AAYMA
RU
Войти

AI Sana — Business Challenge Quality Rating & Open Team Sele

Challenge Hub для AI Sana с многопользовательским 3D-кампусом: опубликованные задачи стоят зданиями, команды ходят по миру и откликаются.

Доведённый продукт
Команда «Bilge» 56💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: Bilge
Кейс HackAlem.ai: Образование — AI Sana
Стадия: Доведённый продукт

Задача кейса: Challenge Hub: превратить задачу бизнеса в задание для студенческих команд

Суть

Challenge Hub для AI Sana с многопользовательским 3D-кампусом: опубликованные задачи стоят зданиями, команды ходят по миру и откликаются. ИИ помогает дописать карточку, сервер считает готовность 0–100, бизнес вручную выбирает команды и подтверждает этапы по ссылке на Git/PR.

Как устроено

Бизнес описывает проблему. OpenAI Responses API (gpt-6-luna, структурированный вывод по Zod-схеме) предлагает значения полей дословными цитатами и задаёт 3–5 уточняющих вопросов. Скор считается только по подтверждённым полям в score.ts, всего 100 баллов. Бэкенд на Express 5, SQLite и Socket.IO: оптимистическая блокировка через expectedVersion (409 при конфликте), идемпотентные создания, realtime-инвалидация. Фронт на React Three Fiber рисует задачи зданиями, место выбирается по hash(task.id), игроки синхронизируются на 12 Гц. После подтверждения этапа (+10 баллов) запускается анимация GRAND TRIUMPH.

Ключевые решения

  • Structured output (Zod)
  • rule-based скоринг готовности
  • Socket.IO realtime-синхронизация
  • optimistic concurrency (expectedVersion)
  • Idempotency-Key
  • OpenAPI 3.1
  • проверка Git/PR-доказательств
  • eval-харнесс для LLM

Особенности

Необычная подача: каталог задач сделан многопользовательским 3D-миром, где рейтинг меняет оформление здания, а лучшая задача становится центральным павильоном. Серьёзная инженерия бэкенда: версии, идемпотентность, OpenAPI. Есть eval-скрипты с отчётом live-harness-report.json. Пробовали генерировать 3D-аватары локальной моделью Hunyuan 3D. Команда проверки (npm run check) работает без внешних вызовов.

Стек

Node.js · TypeScript · Express 5 · Zod · SQLite (better-sqlite3) · Socket.IO · React 19 · Vite 8 · React Three Fiber (three.js)

Модели

gpt-6-luna (OpenAI) · Hunyuan 3D (локальный сервис аватаров)


Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-629b990b-bilge.

README

README.md

AI Sana — Business Challenge Quality Rating & Open Team Selection

Interactive multiplayer 3D campus for discovering AI Sana business challenges.

3D Campus Team Bilge, HackAlem · "Gamification of Practical Tasks" case study.

Watch our demo video here: https://drive.google.com/drive/folders/1PKSJU6z9LSoA1dz7B01vrEgPE5YPXJvW

A business describes a problem in its own words. AI helps complete the description, and the server transparently calculates the card's readiness from 0 to 100. The task is published in a shared catalog, which is also shown as a live 3D campus. Student teams choose tasks themselves and submit proposals; the business manually selects one, several or no teams. A team earns points only for a milestone confirmed by the business.

The main gamification is for the business: the more complete and useful the description, the higher the rating and the position in the catalog. The rating shows how ready a task is for work with students, not how well known the company is.


1. Launch (one command)

Only Node.js 22.12+ is required (https://nodejs.org). From the repository root:

npm start        # dependencies → build → server: http://127.0.0.1:3001
npm run check    # check: backend/frontend types and tests, build, smoke run (PASS/FAIL summary)
  • npm start creates backend/.env from backend/.env.example. Everything works without an OpenAI key; AI questions run in a clearly labelled fallback mode. For live AI, set OPENAI_API_KEY in backend/.env and restart.
  • After launch, the console prints login codes and ready-made links (2 businesses, 5 teams). The codes are stored in the local backend/demo-accounts.local.json; this file is not committed to git. You can also log in as a guest.
  • Each browser tab is a separate role. For example, the business in one tab and a team in another.
  • npm run start:bots runs the same thing plus demo players in the 3D world (marked "demo").
  • npm run check starts the server on a temporary database with AI in stub mode and Git in mock mode: no external calls, no spend and no changes to your data.
  • If the port is busy: PORT=3005 npm start. In PowerShell: $env:PORT=3005; npm start.
  • Development with hot reload: cd frontend && npm run dev:all → http://localhost:5173. API documentation: http://127.0.0.1:3001/api/docs

How to use

For a business: add and publish a task

  1. Log in. On the login screen enter a business code (printed by npm start, also in backend/demo-accounts.local.json). You land on My tasks.
  2. Describe a new task. In the "Describe a new task" block, write in your own words what happens now and what you want to change (e.g. "The cafe has a lot of unsold food left over"). Title and industry can be added later. Click Save description — the task builder opens.
  3. Improve the card in the builder:
    • Analyze description — AI suggests values for empty fields as exact quotes from your text; tick the ones you want and click Add selected.
    • Clarify with AI — answer 3–5 questions one at a time; answers go into the card verbatim.
    • Edit any field by hand and click Save draft. On the right you see the forecast score and what the next improvement is worth.
  4. Confirm details — the official score is recalculated; the breakdown shows exactly which fields earned points.
  5. Publish — the task appears in the shared catalog and as a building in the 3D world. Low readiness does not block publishing or proposals.
  6. Choose teams. When proposals arrive, open Compare proposals from your dashboard, then Select team or Reject each one (several teams or none is fine).
  7. Review results. A selected team creates a milestone and submits a Git/PR link. Open the milestone, check the materials, then Confirm result (+10 points to the team, GRAND TRIUMPH in the 3D world) or Return for rework with a comment.

For a team

Log in with the team code (optionally enter your name for the 3D world) → walk around the campus (WASD, M map, E open a task) or use All tasks → submit a proposal → after the business selects you, create a milestone and submit your result from the task card or Team dashboard. Teammates share one code and see each other in the world.

As a guest

Click Guest — view only on the login screen: browse the catalog and the 3D world without proposals.

2. Architecture

frontend/  React 19 + TypeScript + Vite 8 + React Three Fiber (three.js)
   │  2D screens: login, dashboard, builder, catalog, card, proposals, milestone, rating
   │  3D campus: task buildings, team bases, online players, GRAND TRIUMPH
   │  typed client backend/client/index.ts (HTTP) + socket.io-client
   ▼
backend/   BFF: Node.js + TypeScript + Express 5 + Zod + SQLite (better-sqlite3) + Socket.IO
   ├─ src/app.ts            HTTP API /api/v1 (OpenAPI 3.1 → /api/docs), CORS/Origin, rate limit
   ├─ src/services/         use cases and invariants: tasks, proposals, selection, milestones, point awards
   ├─ src/domain/score.ts   readiness formula (section 3)
   ├─ src/views.ts          ready-made screen models, available actions, next step
   ├─ src/integrations/     OpenAI (Responses API, Luna) and Git/PR checks — replaceable, with a fallback mode
   ├─ src/realtime.ts       invalidate/sync.required events after writes to SQLite
   └─ src/world.ts          player presence in 3D, emotes, world.triumph, GET /api/v1/world
  • The server is the source of truth. The client never sends scores, team names or decisions. Permissions are checked on every command: role, task owner, selected team.
  • Versions and retries. Changes are protected by expectedVersion: on a conflict the server returns 409 and does not overwrite someone else's edits. Creating a task, a proposal and a milestone is idempotent (Idempotency-Key).
  • Real time. After every change, clients receive an event and re-read the screen. The same task is shown identically in the 2D catalog and in the 3D world.
  • Storage. SQLite (backend/data/ai-sana.db) survives restarts. Secrets are stored only on the server and are not committed to git.
  • 3D world.
    • A highly rated task stands as the main pavilion by the monument in the centre of the square. Other tasks are buildings in districts by industry.
    • A building's location is stable; it is chosen by seed = hash(task.id).
    • The readiness level changes the building's styling, beacon and label.
    • Players are synchronized via Socket.IO at 12 Hz with movement smoothing. Walking and emotes do not give points.
    • GRAND TRIUMPH is triggered only after the business confirms a milestone.
    • Without WebGL, the 2D catalog opens instead.

3. Task rating formula

Points are awarded only for fields confirmed by the business (backend/src/domain/score.ts, scale from the brief, section 4):

CategoryPointsCondition
Context and need10 + 10describes what happens now / what needs to change
Data and materials10 + 10data availability is known (available or not) / if available, a real source is named
Expected result15a concrete result of the team's work is described
Success criterion15a metric with a target value or an acceptance condition
Constraints10deadlines, technologies, access or explicitly confirmed "no constraints"
Users10it is clear who the solution is for
Communication with the business5 + 5contact channel / format of consultations and feedback
Total100
  • Empty and boilerplate answers (typical placeholders such as "don't know", "TBD") give no points. Separate quality hints flag generic phrases, the same text in several fields and contradictions, but they do not change the score. "No data" gives 10 points but does not pretend a dataset exists.
  • The score is an explainable completeness heuristic, not a verification that the information is true: the business vouches for accuracy.
  • The card shows a breakdown by category, a list of what is missing and the nearest improvement, for example "+15: add an acceptance condition".
  • A draft gives a forecast, while the official score is recalculated on every "Confirm details" and can both rise and fall.

Readiness levels:

  • 0–39 "Draft" — the task is visible, marked as needing clarification;
  • 40–69 "Working";
  • 70–89 "Ready" — higher in the catalog;
  • 90–100 "Priority" — highlighted.

A low rating does not hide a task or prevent proposals.

Team points are a separate metric: 10 points per milestone, only after confirmation by the business and exactly once (the award record is written in a single SQLite transaction). Proposals, commit links, AI comments, walking and time online give no points.

4. Catalog rules

  • The catalog shows all published tasks to all teams and guests. Drafts are visible only to their owner.
  • Only a confirmed snapshot of the card is published. Draft edits are not publicly visible until confirmed.
  • Sorting: official score descending → newer publication first → id (stable order).
  • Filters: industry (topic), readiness level, search by title and description.
  • The number of proposals is unlimited; a team may propose several approaches.
  • Selection is manual only: on the proposal comparison screen the business selects or rejects each proposal. Several teams or none may be selected. There is no automatic assignment.
  • The selected team creates a milestone with an acceptance criterion. Submitting a Git/PR link moves the milestone to "in review"; this gives no points. The business confirms the milestone (+10 points) or returns it with an explanation.

5. AI usage

By default the OpenAI Responses API is used, model gpt-6-luna (OPENAI_MODEL), with structured output (Zod schema). The code is in backend/src/integrations/ai.ts, analysis.ts, ai-runtime.ts.

FunctionInputOutputRule
Description analysis{ rawDescription, fields }{ suggestions: [{ field, quote }] }the server accepts only verbatim contiguous quotes from the original description and only for empty fields; the human chooses what to apply
Clarifying questions{ rawDescription, fields, missingFields }{ missingFields, questions: [{ field, text }] }, 3–5 questionsthe AI chooses the missing fields, the question text comes from a neutral server-side catalog; answers are copied into the card verbatim
Milestone pre-checkacceptance criterion, description, fetched Git/PR materialsquotes from the materials for each criteriona quote does not prove completion; the business decides
  • An invalid model response (off-schema, refusal, 30 s timeout, no key) triggers an explicit fallback mode mode=stub:

    • questions come from a template;
    • analysis returns an empty list;
    • the milestone check switches to manual mode with a warning.

    Manual filling, confirmation and publication do not depend on AI. There are no automatic paid retries.

  • The AI does not add facts the user did not provide, does not choose a team on behalf of the business and does not use personal data.

  • Every call is recorded in the task history: operation, model, duration, validation, fallback reason. Prompts and keys are not written to the log.

  • Live regression report: docs/evals/live-harness-report.json.

6. Data

On first launch the server creates synthetic demo data (backend/src/seed.ts):

  • 2 businesses and 5 teams with interests, skills and technologies;
  • 5 drafts of varying completeness;
  • 5 published cards covering all four levels;
  • 5 proposals with an idea, plan, timeline and link.

Restarting does not overwrite your changes. All companies and people are fictional.

7. Test scenarios

Automated (npm run check)

  • backend, 172 tests (vitest):
    • formula and level boundaries;
    • role permissions, draft isolation, version conflicts, idempotency;
    • end-to-end business and team scenarios;
    • AI and Git providers, including fallback mode;
    • realtime, session logout;
    • OpenAPI and client contract;
    • 3D world: team players are visible separately, speed is limited by the server, emotes from an allowlist, world.triumph exactly once and only after business confirmation.
  • frontend, 6 tests: deterministic world layout, stable locations when new tasks appear, no overlap between buildings and roads, collisions, movement interpolation.
  • Smoke run of the built application: health, UI serving, catalog, /world, code login, two players see each other.

Manual: required demo (≤ 5 minutes)

  1. Business (tab 1): "Describe a new task" — enters a weak description, for example "The cafe has a lot of unsold food left over". Clicks "Analyze description" and selects quotes.
  2. "Clarify with AI": answers 3–5 questions one at a time. On the right, the score forecast grows.
  3. Edits the card and clicks "Confirm details": the official score has risen, and the breakdown shows exactly what for. Then "Publish".
  4. Team (tab 2, team code): the task immediately appears in the catalog and as a building in the 3D world. The player walks up to the building, presses E and submits a proposal.
  5. Business: "Compare proposals" → "Select team" or "Reject".
  6. (P1) The team creates a milestone and submits a link. The business confirms: +10 points in the team rating, and GRAND TRIUMPH plays across the whole 3D world.

Edge-case checks

  • Input errors: an empty description or an invalid link — the server returns field errors, which are highlighted in the form.
  • Edits without confirmation: fields were changed but "Confirm" was not clicked — the public score does not change.
  • Version conflict: editing the same card in two tabs — 409 and an offer to load the latest version; the input is preserved.
  • Permission bypass attempts: a team tries to confirm its own milestone — 403. A repeated confirmation — "No repeated award".
  • No AI key: template questions with a label; the whole scenario completes.

8. Repository structure

backend/     BFF (README: backend/README.md; frontend notes: docs/backend-integration.md)
frontend/    web interface and 3D world (README: frontend/README.md)
scripts/     start.mjs (npm start), check.mjs (npm run check)
docs/        backend and harness design, eval reports

3D model licenses: CC0 — Kenney (City Kit Commercial, Car Kit, Mini) and KayKit City Builder Bits; full list in frontend/public/models/LICENSES.txt.

Звёзды
⭐ 0
Форки
0
Язык
TypeScript
Последний push
в прошлом месяце
Коммиты
113
Авторы
4
Файлы
366
Ветки
4

Авторы коммитов

Beibarys 99Mamyr Altaibek 9BBT Yuta 5MamyrAltaibek 3

История коммитов

  • 2026-09-23 18:11docs: README — merge teammate header, add How to use (business/team/guest)Beibarys
  • 2026-09-23 18:11i18n: translate backend/test/journeys.test.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate backend/test/score.test.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate backend/test/validation.test.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/ui/TaskDrawer.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate backend/test/world.test.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/ui/WorldHUD.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/world/TriumphPlaza.tsx to EnglishBeibarys
Все коммиты (113)
  • 2026-09-23 18:10i18n: translate backend/test/realtime.test.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/world/WorldEnvironment.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate backend/test/contract.test.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate backend/test/git-materials.test.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/world/WorldLayout.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/tests/world.test.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/scripts/demo-bots.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/scripts/prepare-campus-assets.sh to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate backend/test/integrations.test.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/scripts/glb-anims.mjs to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate backend/src/integrations/ai.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate backend/src/integrations/analysis.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate backend/src/integrations/git.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate backend/src/openapi.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate backend/src/seed.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate backend/src/services/tasks.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate backend/src/views.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate backend/src/world.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate docs/agent-harness-assessment.md to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate docs/backend-integration.md to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate docs/consumer-ux-review.md to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate docs/superpowers/plans/2026-09-23-agent-harness.md to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate docs/superpowers/specs/2026-09-23-agent-harness-design.md to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/README.md to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/index.html to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/public/models/LICENSES.txt to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/World.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/assets/AssetModel.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/assets/assetRegistry.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/camera/CameraController.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/events/AmbientWorld.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/events/TriumphEvent.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/events/WorldEventManager.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/map/WorldMap.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/multiplayer/MultiplayerManager.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/multiplayer/NetworkInterpolation.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/multiplayer/PresenceStore.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/multiplayer/RemotePlayers.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/performance/mergeParts.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/players/LocalPlayer.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/world.css to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/App.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/api/index.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/components/TaskPanel.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/components/common.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/pages/CatalogList.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/pages/Dashboard.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/pages/Login.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/pages/MilestonePage.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/pages/ReviewDesk.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/pages/Scoreboard.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/pages/TaskEditor.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/pages/TaskPage.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/pages/World.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/shared/types.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/shared/world.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/state.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/styles.css to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/world/webgl.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/vite.config.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate package.json to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate scripts/check.mjs to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate scripts/lib.mjs to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate scripts/start.mjs to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/players/PlayerAvatar.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate backend/client/index.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate backend/src/services/work.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/players/PlayerEmotes.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/tasks/LabelBudget.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate backend/scripts/demo.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate backend/scripts/eval-cases.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/tasks/TaskBuilding.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/tasks/TaskBuildingGenerator.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/teams/TeamBase.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate frontend/src/3d/ui/CanvasHelpers.tsx to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate backend/README.md to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate backend/src/app.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate backend/src/auth.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate backend/src/contracts.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate backend/src/domain/quality.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate backend/src/domain/score.ts to EnglishBeibarys
  • 2026-09-23 18:10i18n: translate backend/src/errors.ts to EnglishBeibarys
  • 2026-09-23 18:08i18n: translate CONTEXT.md to EnglishBeibarys
  • 2026-09-23 18:00Update README.mdMamyrAltaibek
  • 2026-09-23 17:58docs(3d): add final interactive multiplayer demoMamyr Altaibek
  • 2026-09-23 17:56Enhance README with 3D campus and video informationMamyrAltaibek
  • 2026-09-23 17:55Add files via uploadMamyrAltaibek
  • 2026-09-23 17:52chore: запуск и проверка проекта одной командой для организаторовBeibarys
  • 2026-09-23 17:52docs: README по требованиям ТЗ; dev-прокси Vite работает на любом портуBeibarys
  • 2026-09-23 17:52chore: check повторяет тесты бэкенда один раз при сбое по таймауту; README и dev-проксиBeibarys
  • 2026-09-23 17:44docs(3d): add verified campus screenshots on mainMamyr Altaibek
  • 2026-09-23 17:43feat: объединить BFF и фронтенд с мультиплеерным 3D-кампусомBeibarys
  • 2026-09-23 17:42docs(3d): add verified multiplayer world screenshotsMamyr Altaibek
  • 2026-09-23 17:27feat(frontend): мультиплеерный 3D-кампус AI Sana + сервер (Express, Socket.IO, SQLite)Beibarys
  • 2026-09-23 17:07docs(avatar): update demo documentation and screenshotsMamyr Altaibek
  • 2026-09-23 17:07feat(avatar): improve local human reconstruction and texturingMamyr Altaibek
  • 2026-09-23 16:53fix: clarify business and team review journeysBBT Yuta
  • 2026-09-23 16:38docs: add HackAlem README with local avatar demoMamyr Altaibek
  • 2026-09-23 16:35feat: add Luna harness and grounded Git evidence workflowsBBT Yuta
  • 2026-09-23 16:31fix(avatar): skip rembg so first Hunyuan shape job can startMamyr Altaibek
  • 2026-09-23 16:23Revert "feat(avatar): add local Hunyuan 3D avatar service"Mamyr Altaibek
  • 2026-09-23 16:20feat(avatar): add local Hunyuan 3D avatar serviceMamyr Altaibek
  • 2026-09-23 15:52fix: preserve clarification progress and sync user-facing statusBBT Yuta
  • 2026-09-23 15:26feat: deliver AI Sana backend with UX BFF journeys and verified team progressBBT Yuta
  • 2026-09-23 14:56docs: define backend BFF journeys and implementation planBBT Yuta
Структура репозитория (366 файлов)
.gitignore
3d-world-overview.png
CONTEXT.md
README.md
backend/.env.example
backend/.prettierrc.json
backend/README.md
backend/client/index.ts
backend/package-lock.json
backend/package.json
backend/scripts/demo.ts
backend/scripts/eval-cases.ts
backend/scripts/eval.ts
backend/scripts/preflight.ts
backend/src/app.ts
backend/src/auth.ts
backend/src/config.ts
backend/src/contracts.ts
backend/src/db.ts
backend/src/domain/quality.ts
backend/src/domain/score.ts
backend/src/errors.ts
backend/src/integrations/ai-runtime.ts
backend/src/integrations/ai.ts
backend/src/integrations/analysis.ts
backend/src/integrations/git.ts
backend/src/integrations/runtime.ts
backend/src/openapi.ts
backend/src/realtime.ts
backend/src/seed-cli.ts
backend/src/seed.ts
backend/src/server.ts
backend/src/services/tasks.ts
backend/src/services/work.ts
backend/src/views.ts
backend/src/world.ts
backend/test/consumer-journeys.test.ts
backend/test/contract.test.ts
backend/test/git-materials.test.ts
backend/test/harness.test.ts
backend/test/integrations.test.ts
backend/test/journeys.test.ts
backend/test/realtime.test.ts
backend/test/score.test.ts
backend/test/seed.test.ts
backend/test/validation.test.ts
backend/test/world.test.ts
backend/tsconfig.build.json
backend/tsconfig.json
docs/agent-harness-assessment.md
docs/backend-integration.md
docs/consumer-ux-review.md
docs/evals/live-harness-report.json
docs/superpowers/plans/2026-09-23-agent-harness.md
docs/superpowers/plans/2026-09-23-backend.md
docs/superpowers/specs/2026-09-23-agent-harness-design.md
docs/superpowers/specs/2026-09-23-backend-design.md
frontend/.DS_Store
frontend/.gitignore
frontend/README.md
frontend/docs/screenshots/3d-world-overview.png
frontend/docs/screenshots/debug-3d.png
frontend/docs/screenshots/grand-triumph.png
frontend/docs/screenshots/multiplayer.png
frontend/docs/screenshots/player-world.png
frontend/docs/screenshots/task-building.png
frontend/docs/screenshots/world-map.png
frontend/index.html
frontend/package-lock.json
frontend/package.json
frontend/public/models/LICENSES.txt
frontend/public/models/car/Textures/colormap.png
frontend/public/models/car/ambulance.glb
frontend/public/models/car/box.glb
frontend/public/models/car/cone.glb
frontend/public/models/car/delivery.glb
frontend/public/models/car/garbage-truck.glb
frontend/public/models/car/hatchback-sports.glb
frontend/public/models/car/police.glb
frontend/public/models/car/sedan.glb
frontend/public/models/car/suv.glb
frontend/public/models/car/taxi.glb
frontend/public/models/car/truck.glb
frontend/public/models/car/van.glb
frontend/public/models/city/Textures/colormap.png
frontend/public/models/city/building-a.glb
frontend/public/models/city/building-b.glb
frontend/public/models/city/building-c.glb
frontend/public/models/city/building-d.glb
frontend/public/models/city/building-e.glb
frontend/public/models/city/building-f.glb
frontend/public/models/city/building-g.glb
frontend/public/models/city/building-h.glb
frontend/public/models/city/building-i.glb
frontend/public/models/city/building-j.glb
frontend/public/models/city/building-k.glb
frontend/public/models/city/building-l.glb
frontend/public/models/city/building-m.glb
frontend/public/models/city/building-n.glb
frontend/public/models/city/building-skyscraper-a.glb
frontend/public/models/city/building-skyscraper-b.glb
frontend/public/models/city/building-skyscraper-c.glb
frontend/public/models/city/building-skyscraper-d.glb
frontend/public/models/city/building-skyscraper-e.glb
frontend/public/models/city/detail-awning-wide.glb
frontend/public/models/city/detail-awning.glb
frontend/public/models/city/detail-parasol-a.glb
frontend/public/models/city/detail-parasol-b.glb
frontend/public/models/city/low-detail-building-a.glb
frontend/public/models/city/low-detail-building-b.glb
frontend/public/models/city/low-detail-building-c.glb
frontend/public/models/city/low-detail-building-d.glb
frontend/public/models/city/low-detail-building-e.glb
frontend/public/models/city/low-detail-building-f.glb
frontend/public/models/city/low-detail-building-g.glb
frontend/public/models/city/low-detail-building-h.glb
frontend/public/models/city/low-detail-building-i.glb
frontend/public/models/city/low-detail-building-j.glb
frontend/public/models/city/low-detail-building-k.glb
frontend/public/models/city/low-detail-building-l.glb
frontend/public/models/city/low-detail-building-m.glb
frontend/public/models/city/low-detail-building-wide-a.glb
frontend/public/models/city/low-detail-building-wide-b.glb
frontend/public/models/kaykit/bench.bin
frontend/public/models/kaykit/bench.gltf
frontend/public/models/kaykit/bush.bin
frontend/public/models/kaykit/bush.gltf
frontend/public/models/kaykit/citybits_texture.png
frontend/public/models/kaykit/dumpster.bin
frontend/public/models/kaykit/dumpster.gltf
frontend/public/models/kaykit/firehydrant.bin
frontend/public/models/kaykit/firehydrant.gltf
frontend/public/models/kaykit/streetlight.bin
frontend/public/models/kaykit/streetlight.gltf
frontend/public/models/kaykit/trafficlight_A.bin
frontend/public/models/kaykit/trafficlight_A.gltf
frontend/public/models/kaykit/trafficlight_B.bin
frontend/public/models/kaykit/trafficlight_B.gltf
frontend/public/models/kaykit/trafficlight_C.bin
frontend/public/models/kaykit/trafficlight_C.gltf
frontend/public/models/kaykit/watertower.bin
frontend/public/models/kaykit/watertower.gltf
frontend/public/models/mini/arcade/Textures/colormap.png
frontend/public/models/mini/arcade/air-hockey.glb
frontend/public/models/mini/arcade/arcade-machine.glb
frontend/public/models/mini/arcade/basketball-game.glb
frontend/public/models/mini/arcade/cash-register.glb
frontend/public/models/mini/arcade/character-employee.glb
frontend/public/models/mini/arcade/character-gamer.glb
frontend/public/models/mini/arcade/claw-machine.glb
frontend/public/models/mini/arcade/column.glb
frontend/public/models/mini/arcade/dance-machine.glb
frontend/public/models/mini/arcade/floor.glb
frontend/public/models/mini/arcade/gambling-machine.glb
frontend/public/models/mini/arcade/pinball.glb
frontend/public/models/mini/arcade/prize-wheel.glb
frontend/public/models/mini/arcade/prizes.glb
frontend/public/models/mini/arcade/ticket-machine.glb
frontend/public/models/mini/arcade/vending-machine.glb
frontend/public/models/mini/arcade/wall-corner.glb
frontend/public/models/mini/arcade/wall-door-rotate.glb
frontend/public/models/mini/arcade/wall-window.glb
frontend/public/models/mini/arcade/wall.glb
frontend/public/models/mini/arena/Textures/colormap.png
frontend/public/models/mini/arena/banner.glb
frontend/public/models/mini/arena/block.glb
frontend/public/models/mini/arena/border-corner.glb
frontend/public/models/mini/arena/border-straight.glb
frontend/public/models/mini/arena/bricks.glb
frontend/public/models/mini/arena/character-soldier.glb
frontend/public/models/mini/arena/column-damaged.glb
frontend/public/models/mini/arena/column.glb
frontend/public/models/mini/arena/floor-detail.glb
frontend/public/models/mini/arena/floor.glb
frontend/public/models/mini/arena/stairs-corner-inner.glb
frontend/public/models/mini/arena/stairs-corner.glb
frontend/public/models/mini/arena/stairs.glb
frontend/public/models/mini/arena/statue.glb
frontend/public/models/mini/arena/tree.glb
frontend/public/models/mini/arena/trophy.glb
frontend/public/models/mini/arena/wall-corner.glb
frontend/public/models/mini/arena/wall-gate.glb
frontend/public/models/mini/arena/wall.glb
frontend/public/models/mini/arena/weapon-rack.glb
frontend/public/models/mini/arena/weapon-spear.glb
frontend/public/models/mini/arena/weapon-sword.glb
frontend/public/models/mini/characters/Textures/colormap.png
frontend/public/models/mini/characters/aid-cane-blind.glb
frontend/public/models/mini/characters/aid-cane-low-vision.glb
frontend/public/models/mini/characters/aid-cane.glb
frontend/public/models/mini/characters/aid-crutch.glb
frontend/public/models/mini/characters/aid-defibrillator-green.glb
frontend/public/models/mini/characters/aid-defibrillator-red.glb
frontend/public/models/mini/characters/aid-glasses.glb
frontend/public/models/mini/characters/aid-mask.glb
frontend/public/models/mini/characters/aid-sunglasses.glb
frontend/public/models/mini/characters/aid_hearing.glb
frontend/public/models/mini/characters/character-female-a.glb
frontend/public/models/mini/characters/character-female-b.glb
frontend/public/models/mini/characters/character-female-c.glb
frontend/public/models/mini/characters/character-female-d.glb
frontend/public/models/mini/characters/character-female-e.glb
frontend/public/models/mini/characters/character-female-f.glb
frontend/public/models/mini/characters/character-male-a.glb
frontend/public/models/mini/characters/character-male-b.glb
frontend/public/models/mini/characters/character-male-c.glb
frontend/public/models/mini/characters/character-male-d.glb
frontend/public/models/mini/characters/character-male-e.glb
frontend/public/models/mini/characters/character-male-f.glb
frontend/public/models/mini/characters/wheelchair-deluxe.glb
frontend/public/models/mini/characters/wheelchair-power-deluxe.glb
frontend/public/models/mini/characters/wheelchair-power.glb
frontend/public/models/mini/characters/wheelchair.glb
frontend/public/models/mini/dungeon/Textures/colormap.png
frontend/public/models/mini/dungeon/banner.glb
frontend/public/models/mini/dungeon/barrel.glb
frontend/public/models/mini/dungeon/chair.glb
frontend/public/models/mini/dungeon/character-human.glb
frontend/public/models/mini/dungeon/character-orc.glb
frontend/public/models/mini/dungeon/chest.glb
frontend/public/models/mini/dungeon/coin.glb
frontend/public/models/mini/dungeon/column.glb
frontend/public/models/mini/dungeon/dirt.glb
frontend/public/models/mini/dungeon/floor-detail.glb
frontend/public/models/mini/dungeon/floor.glb
frontend/public/models/mini/dungeon/gate.glb
frontend/public/models/mini/dungeon/key.glb
frontend/public/models/mini/dungeon/pot.glb
frontend/public/models/mini/dungeon/potion.glb
frontend/public/models/mini/dungeon/rocks.glb
frontend/public/models/mini/dungeon/shield-rectangle.glb
frontend/public/models/mini/dungeon/shield-round.glb
frontend/public/models/mini/dungeon/stairs.glb
frontend/public/models/mini/dungeon/stones.glb
frontend/public/models/mini/dungeon/table.glb
frontend/public/models/mini/dungeon/trap.glb
frontend/public/models/mini/dungeon/wall-half.glb
frontend/public/models/mini/dungeon/wall-narrow.glb
frontend/public/models/mini/dungeon/wall-opening.glb
frontend/public/models/mini/dungeon/wall.glb
frontend/public/models/mini/dungeon/weapon-spear.glb
frontend/public/models/mini/dungeon/weapon-sword.glb
frontend/public/models/mini/dungeon/wood-structure.glb
frontend/public/models/mini/dungeon/wood-support.glb
frontend/public/models/mini/forest/Textures/colormap.png
frontend/public/models/mini/forest/bridge.glb
frontend/public/models/mini/forest/building-platform.glb
frontend/public/models/mini/forest/building-roof.glb
frontend/public/models/mini/forest/building-structure.glb
frontend/public/models/mini/forest/character-archer.glb
frontend/public/models/mini/forest/fence.glb
frontend/public/models/mini/forest/flag.glb
frontend/public/models/mini/forest/ladder.glb
frontend/public/models/mini/forest/patch-dirt.glb
frontend/public/models/mini/forest/patch-grass.glb
frontend/public/models/mini/forest/plant.glb
frontend/public/models/mini/forest/platform.glb
frontend/public/models/mini/forest/rocks-high.glb
frontend/public/models/mini/forest/rocks-low.glb
frontend/public/models/mini/forest/rocks-ramp.glb
frontend/public/models/mini/forest/stones.glb
frontend/public/models/mini/forest/target.glb
frontend/public/models/mini/forest/tent.glb
frontend/public/models/mini/forest/tree-high.glb
frontend/public/models/mini/forest/tree.glb
frontend/public/models/mini/forest/weapon-arrow.glb
frontend/public/models/mini/forest/weapon-bow.glb
frontend/public/models/mini/market/Textures/colormap.png
frontend/public/models/mini/market/bottle-return.glb
frontend/public/models/mini/market/cash-register.glb
frontend/public/models/mini/market/character-employee.glb
frontend/public/models/mini/market/column.glb
frontend/public/models/mini/market/display-bread.glb
frontend/public/models/mini/market/display-fruit.glb
frontend/public/models/mini/market/fence-door-rotate.glb
frontend/public/models/mini/market/fence.glb
frontend/public/models/mini/market/floor.glb
frontend/public/models/mini/market/freezer.glb
frontend/public/models/mini/market/freezers-standing.glb
frontend/public/models/mini/market/shelf-bags.glb
frontend/public/models/mini/market/shelf-boxes.glb
frontend/public/models/mini/market/shelf-end.glb
frontend/public/models/mini/market/shopping-basket.glb
frontend/public/models/mini/market/shopping-cart.glb
frontend/public/models/mini/market/wall-corner.glb
frontend/public/models/mini/market/wall-door-rotate.glb
frontend/public/models/mini/market/wall-window.glb
frontend/public/models/mini/market/wall.glb
frontend/public/models/mini/skate/Textures/colormap.png
frontend/public/models/mini/skate/bowl-corner-inner.glb
frontend/public/models/mini/skate/bowl-corner-outer.glb
frontend/public/models/mini/skate/bowl-side.glb
frontend/public/models/mini/skate/character-skate-boy.glb
frontend/public/models/mini/skate/character-skate-girl.glb
frontend/public/models/mini/skate/floor-concrete.glb
frontend/public/models/mini/skate/floor-wood.glb
frontend/public/models/mini/skate/half-pipe.glb
frontend/public/models/mini/skate/obstacle-box.glb
frontend/public/models/mini/skate/obstacle-end.glb
frontend/public/models/mini/skate/obstacle-middle.glb
frontend/public/models/mini/skate/pallet.glb
frontend/public/models/mini/skate/rail-curve.glb
frontend/public/models/mini/skate/rail-high.glb
frontend/public/models/mini/skate/rail-low.glb
frontend/public/models/mini/skate/rail-slope.glb
frontend/public/models/mini/skate/skateboard.glb
frontend/public/models/mini/skate/steps.glb
frontend/public/models/mini/skate/structure-platform.glb
frontend/public/models/mini/skate/structure-wood.glb
frontend/scripts/demo-bots.ts
frontend/scripts/glb-anims.mjs
frontend/scripts/prepare-campus-assets.sh
frontend/src/.DS_Store
frontend/src/3d/World.tsx
frontend/src/3d/assets/AssetModel.tsx
frontend/src/3d/assets/assetRegistry.ts
frontend/src/3d/camera/CameraController.tsx
frontend/src/3d/events/AmbientWorld.tsx
frontend/src/3d/events/TriumphEvent.tsx
frontend/src/3d/events/WorldEventManager.ts
frontend/src/3d/map/WorldMap.tsx
frontend/src/3d/multiplayer/MultiplayerManager.ts
frontend/src/3d/multiplayer/NetworkInterpolation.ts
frontend/src/3d/multiplayer/PresenceStore.ts
frontend/src/3d/multiplayer/RemotePlayers.tsx
frontend/src/3d/performance/mergeParts.ts
frontend/src/3d/players/LocalPlayer.tsx
frontend/src/3d/players/PlayerAvatar.tsx
frontend/src/3d/players/PlayerEmotes.ts
frontend/src/3d/tasks/LabelBudget.ts
frontend/src/3d/tasks/TaskBuilding.tsx
frontend/src/3d/tasks/TaskBuildingGenerator.ts
frontend/src/3d/teams/TeamBase.tsx
frontend/src/3d/ui/CanvasHelpers.tsx
frontend/src/3d/ui/TaskDrawer.tsx
frontend/src/3d/ui/WorldHUD.tsx
frontend/src/3d/world.css
frontend/src/3d/world/TriumphPlaza.tsx
frontend/src/3d/world/WorldEnvironment.tsx
frontend/src/3d/world/WorldLayout.ts
frontend/src/App.tsx
frontend/src/api/index.ts
frontend/src/components/TaskPanel.tsx
frontend/src/components/common.tsx
frontend/src/main.tsx
frontend/src/pages/CatalogList.tsx
frontend/src/pages/Dashboard.tsx
frontend/src/pages/Login.tsx
frontend/src/pages/MilestonePage.tsx
frontend/src/pages/ReviewDesk.tsx
frontend/src/pages/Scoreboard.tsx
frontend/src/pages/TaskEditor.tsx
frontend/src/pages/TaskPage.tsx
frontend/src/pages/World.tsx
frontend/src/shared/types.ts
frontend/src/shared/world.ts
frontend/src/state.tsx
frontend/src/styles.css
frontend/src/world/webgl.ts
frontend/tests/world.test.ts
frontend/tsconfig.json
frontend/vite.config.ts
package.json
scripts/check.mjs
scripts/lib.mjs
scripts/start.mjs
Ветки (4)

Обсуждение 0 комментариев

Войдите, чтобы комментировать

Пока нет комментариев — будьте первым.