AAYMA
RU
Войти

Career Quest

AI-навигатор карьеры в виде 3D-города. Сотрудник получает до трёх рекомендованных активностей с причинами выбора, выполняет практику и видит рост…

Рабочий MVP
Команда «Uniqs» 18💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: Uniqs
Кейс HackAlem.ai: Менеджмент — Halyk Bank · кейс 1
Стадия: Рабочий MVP

Задача кейса: «Career Quest»: AI-навигатор, связывающий навыки сотрудника с шагами развития

Суть

AI-навигатор карьеры в виде 3D-города. Сотрудник получает до трёх рекомендованных активностей с причинами выбора, выполняет практику и видит рост навыков. HR анализирует разрывы компетенций команды и составляет планы обучения.

Как устроено

Данные организаторов (employees.json, events.json, skills.json, activity_history.csv) загружаются в Node.js. Расчётный движок по профилю, завершённым после ревью активностям, требованиям следующего грейда и истории выбирает кандидатов и факторы выбора. LLM (GPT-6 Sol через OpenAI Responses API) одним вызовом упорядочивает допустимых кандидатов и формулирует ответ наставника. Уровни навыков модель не считает, в офлайн-режиме ответ собирается из локальной базы знаний. Интерфейс построен на React Three Fiber: город с офисами отделов, юрта наставника, практические задачи по коду на сервере, XP и уровни. Есть HR-панель и импорт профилей.

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

  • rule-based рекомендации по skill gap
  • structured LLM output
  • офлайн-fallback
  • 3D open world (three.js / R3F)
  • геймификация XP/уровни

Особенности

Карьерная навигация сделана как 3D-игра: город с CC0-моделями KayKit, интерьеры офисов по грейдам, наставник за дастарханом в юрте, практика по коду в Node.js. При этом решение о рекомендации принимает отдельный расчётный движок, а не LLM. Персональные данные (имя, ID, руководитель) не отправляются в модель.

Стек

TypeScript · Next.js 16 · React 19 · three.js · React Three Fiber · OpenAI Responses API · Node.js 24

Модели

GPT-6 Sol


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

README

README.md

Career Quest · Город карьеры: башни компаний и юрта AI-наставника

HackAlem AI Next.js 16 React 19 TypeScript three.js

Понятный следующий шаг в карьере — от рекомендации до результата.

Запустить локально · Деплой на сервер · Проверить за 5 минут · Соответствие ТЗ · Как устроено

Career Quest связывает обучение с карьерной целью сотрудника. Профиль, завершённые активности после ревью, требования следующего грейда и история участия определяют подходящие шаги. Сотрудник видит причины выбора, выполняет практику и получает измеримый прирост навыков. HR изучает разрывы команды и составляет планы обучения.

Интерфейс — 3D-город карьеры: офисы отделов, площадки обучения, юрта наставника, герой с личным прогрессом. Город помогает исследовать возможности; решение о рекомендации принимает отдельный расчётный движок. Названия компаний на зданиях и в заданиях используются как оформление демонстрационного сценария.

Развёртывание: проект запускается на Node.js-хостинге или VPS. Команды сборки и запуска ↓ · Полная инструкция деплоя.

Для жюри

ПроверкаГде посмотреть
Роль, грейд, карьерная цель, навыки и историяЛобби → «Исследовать город» → лист героя C
До трёх подходящих активностей и причины выбора«Наставник» → запрос следующего шага; факторы на карточках
Изменение навыков после выполнения«Мой план» J / площадка обучения → практика → «Засчитать выполнение»
Импорт проверочных профилей и истории/upload
Компетенции команды и планы обучения/hr, демо-вход ниже
Сравнение карьерных направлений«Примерить роль»
Проверяемый расчёт без LLM и 3DGET /api/profile/E0028, GET /api/recommend/E0028

Пошаговый сценарий и ожидаемые результаты →

Чек-лист ТЗ с источниками в коде →

Статусы в чек-листе отражают реализацию. Основной цикл сотрудника, импорт и обязательные срезы HR реализованы. Сквозное разграничение доступа остаётся частичным. Реальный AI доступен при подключении ключа; без ключа работает явно обозначенный офлайн-режим.

Быстрый запуск

Что понадобится

  • Node.js 24 и npm. Документация проверена на Node 24.11.0, npm 11.6.1. Минимум Next.js — 20.9, но для TypeScript-практики используется API трансформации типов из более нового Node; для воспроизводимости выбирайте указанную версию.
  • Git; Bash и unzip, если данные распаковываются скриптом. Для Windows используйте WSL или Git Bash.
  • Стартовый архив career_quest_dataset.zip, выданный организаторами, либо четыре извлечённых файла из него.
  • Браузер с WebGL; основной демонстрационный размер — десктоп 1440 px.

База данных и ключ LLM для локального запуска не нужны. Python устанавливать не требуется: учебное подмножество языка обрабатывается внутри Node.js. TypeScript/JavaScript-практика также выполняется сервером Node.

1. Получить проект

git clone https://github.com/BAITC-Hacks/hack-88197554-uniqs.git
cd hack-88197554-uniqs

2. Установить зависимости и запустить одной командой

Замените путь к архиву на свой; кавычки сохраняйте, если в пути есть пробелы:

npm ci && DATASET_ZIP="/полный/путь/career_quest_dataset.zip" npm run dev -- --port 3000

Откройте http://localhost:3000. При первом запуске Next.js компилирует страницы и браузер загружает модели; дождитесь появления профиля и активной кнопки входа.

predev извлекает данные из case_1/career_quest_dataset/ внутри стартового архива. Если все четыре файла уже есть в data/, распаковка пропускается.

Данные уже распакованы / повторный запуск

Разместите файлы непосредственно в корне папки data/:

data/
├── employees.json
├── events.json
├── skills.json
└── activity_history.csv

Затем:

npm ci && npm run dev -- --port 3000

После установки зависимостей достаточно npm run dev -- --port 3000.

DATASET_ZIP задавайте в окружении команды: Bash-скрипт predev сам не загружает .env.local. Автоматический резервный путь ../Варианты/карьера/career_quest_dataset.zip удобен для рабочей папки команды, но в чистом клоне его может не быть.

Почему данных нет в репозитории: по условиям кейса стартовый набор синтетический и не выносится за пределы хакатона. Жюри использует выданный организаторами архив. Папка data/ и .env* исключены из Git. В репозитории нет реальных персональных данных.

Production-сборка локально

Предварительно подготовьте data/ по инструкции выше. В отличие от npm run dev, команда build архив не распаковывает.

npm ci
DATASET_ZIP="/полный/путь/career_quest_dataset.zip" bash scripts/setup-data.sh --if-missing
npm run build
npm run start -- --port 3000

Перед start остановите dev-сервер, использующий тот же порт.

Деплой

Приложение можно разместить на VPS или управляемом Node.js Web Service. Для текущего демо используйте Node 24, один постоянно работающий процесс и файловую систему с возможностью записи. Статический хостинг не запускает API; serverless-размещение без изменения хранения не обеспечивает общий прогресс и HR-сессии.

Настройка сервисаЗначение
Репозиторий / веткаЭтот репозиторий, main
Рабочая папкаКорень репозитория
RuntimeNode.js 24
Installnpm ci --include=dev
Buildnpm run build
Startbash scripts/setup-data.sh --if-missing && npm run start -- --hostname 0.0.0.0
EnvironmentNODE_ENV=production; PORT задаёт платформа, Next.js читает его автоматически
ДанныеЧетыре файла в data/ или доступный на сервере архив и DATASET_ZIP
Экземпляры1 процесс / 1 реплика

Команда Start рассчитана на shell с Bash. Для распаковки архива нужен unzip; если data/ уже заполнена, распаковка пропускается. Датасет не входит в Git и должен быть подготовлен в runtime-окружении, а не только на компьютере разработчика. Ключ AI необязателен; переменные приведены ниже.

Пошаговый деплой: данные, переменные, диск, домен и проверка →

Это инструкция размещения, а не ссылка на уже опубликованный сервис. Подтверждённый публичный адрес пока не указан.

Режимы наставника

РежимКак включитьЧто происходит
ОфлайнНе задавать ключ либо LLM_PROVIDER=mockДвижок рассчитывает кандидатов и факторы, справка и ответ собираются из локальной базы знаний; без вызова модели
OpenAIOPENAI_API_KEY и при необходимости OPENAI_MODELОдин вызов модели выбирает/упорядочивает допустимых кандидатов и формулирует ответ
Fallback при ошибке APIАвтоматическиОшибка инструмента отображается, остаётся расчётный ответ

Для онлайн-режима создайте локальный файл .env.local и перезапустите сервер:

OPENAI_API_KEY=your_api_key_here
LLM_PROVIDER=openai
# По умолчанию в коде — gpt-6-sol; можно указать доступную вашему аккаунту модель.
OPENAI_MODEL=gpt-6-sol

Без явного LLM_PROVIDER наличие ключа автоматически выбирает OpenAI. Для воспроизводимой проверки без сети используйте LLM_PROVIDER=mock. Ключ нужен только серверу; префикс NEXT_PUBLIC_ не используется.

Модель не рассчитывает уровни навыков и не добавляет события за пределами подготовленного списка. В запрос уходят карьерные характеристики, навыки, история и сообщения диалога; имя, ID сотрудника и руководитель исключаются из профиля. Онлайн-режим требует доступа к API и подходящей модели. Подробности и границы AI →

Экраны и управление

АдресНазначение
/Лобби: сотрудник, герой и цель → город → профиль, наставник, план, практика
/hrКомпетенции, планы обучения, доступ и роли
/uploadИмпорт employees.json и/или activity_history.csv для проверки жюри

Подробные обязательные метрики находятся на вкладке «Обзор компетенций», в раскрываемом блоке «Подробный HR-отчёт · навыки и участие в обучении».

Демо-доступ HR: логин admin, пароль admin — оба значения латиницей, также указаны на форме входа. Это открытые демонстрационные реквизиты.

УправлениеДействие
WASD / стрелкиПередвижение; в первом лице относительно направления взгляда
ShiftБег
E / EnterВойти в здание или взаимодействовать с ближайшим объектом
C / JЛист героя / мой план
VОбзор ↔ вид от первого лица
Зажатая мышь и движениеОсмотреться в первом лице
Колесо мышиПриблизить/отдалить в режиме обзора
EscЗакрыть панель, встать или выйти из здания — в зависимости от контекста
«Карта»Быстро перейти к нужному месту

Панели открываются кнопками, поэтому для проверки бизнес-сценария не нужно вручную обходить весь город. Физические этажи офисов — гостевой, рабочие команды, разработка и управление; карьерный грейд и готовность к нему считаются отдельно в профиле.

Что сохраняется

ДанныеХранение и поведение после перезапуска
Стартовые профили, события, навыки, историяЧитаются из data/
Импорт, новые выполнения, отказы и карьерные целиПамять одного Node.js-процесса; сбрасываются при его перезапуске
HR-аккаунты и планыЛокальный файл src/features/hr/.local/workspace.json; нужна записываемая файловая система
HR-сессииПамять процесса, срок 8 часов
Ник и выбор экипировкиlocalStorage браузера
Принятые в городе квесты и черновики практикиПамять вкладки; не заменяют серверную историю

Для повторной проверки импортированных сотрудников после рестарта повторите импорт. HR-планы сохраняются отдельно от профилей, поэтому прежний план может ссылаться на ещё не загруженного сотрудника.

Проверки и документация

./scripts/check.sh

Команда выполняет генерацию типов маршрутов, TypeScript и ESLint. Предупреждение о window.location.assign() на странице импорта известно; ошибок typecheck/lint при подготовке документации нет.

  • DEPLOYMENT.md — развёртывание на Node.js-хостинге или VPS, runtime-данные, переменные и проверка.
  • DEMO.md — сценарий жюри, ожидаемые значения, импорт, API-команды и частые проблемы.
  • REQUIREMENTS.md — требования ТЗ, подтверждение в коде и ограничения.
  • ARCHITECTURE.md — архитектура, формула ранжирования, обновление навыков, AI и API.
  • VISION.md — исходные продуктовые приоритеты; это план, а не подтверждение готовности.
  • DECISIONS.md — история решений и контрактов; актуальное поведение описано в документах выше.
  • Отдельный прототип офиса — эксперимент с совместным присутствием; основной город не является многопользовательским.

Границы демо

Роли ограничивают HR-модуль, но публичные API города и импорта остаются демонстрационными. Нет долговременного хранения общего прогресса, автоматического присвоения грейда и подтверждённого замера SLA на хостинге. Эти пункты явно выделены в чек-листе.

3D-модели KayKit сопровождаются лицензиями в public/models/; основной стек — Next.js, React, TypeScript, Tailwind, shadcn/Base UI и React Three Fiber.

Звёзды
⭐ 0
Форки
0
Язык
HTML
Последний push
в прошлом месяце
Коммиты
77
Авторы
3
Файлы
513
Ветки
9

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

Bexul 51Yelnur 26Ye1nurN 1

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

  • 2026-09-23 17:59Merge remote-tracking branch 'origin/main' into codex/officeYelnur
  • 2026-09-23 17:57Use company names consistently across city and office interiorsYelnur
  • 2026-09-23 17:53docs: add prominent deployment guide for Node hosting and VPSBexul
  • 2026-09-23 17:41Merge remote-tracking branch 'origin/main' into codex/officeYelnur
  • 2026-09-23 17:40Add upload and HR navigation to lobbyYelnur
  • 2026-09-23 17:40Merge remote-tracking branch 'origin/main' into worktree-agent-ab55e81c9ca50d667Bexul
  • 2026-09-23 17:40feat(intro): интро-роадмап продукта и чат-гид перед лоббиBexul
  • 2026-09-23 17:39Merge remote-tracking branch 'origin/main' into codex/officeYelnur
Все коммиты (77)
  • 2026-09-23 17:39feat(hr): edit published learning plans and preserve completed stepsYelnur
  • 2026-09-23 17:38docs: add jury launch guide, verification walkthrough and requirements matrixBexul
  • 2026-09-23 17:36feat: ground mentor and profile guidance in ecosystem knowledgeBexul
  • 2026-09-23 17:29Merge remote-tracking branch 'origin/main' into feat/practice-tasksBexul
  • 2026-09-23 17:29Merge origin/main into feat/practice-tasksBexul
  • 2026-09-23 17:27Merge remote-tracking branch 'origin/main' into codex/officeYelnur
  • 2026-09-23 17:27Merge remote-tracking branch 'origin/main' into HEADYelnur
  • 2026-09-23 17:27Merge latest HR reconciliation from mainYelnur
  • 2026-09-23 17:26chore: preserve current profile import before main integrationYelnur
  • 2026-09-23 17:26feat(venues): per-activity practice tasks with server-side code runners and solution scoreBexul
  • 2026-09-23 17:25feat(hr): add learning templates and personalized plans for every employeeYelnur
  • 2026-09-23 17:25feat(city): add switchable first-person camera and relative movementBexul
  • 2026-09-23 17:24Merge origin/main into docs/banner-companiesBexul
  • 2026-09-23 17:24Merge office features and HR demo access into mainYelnur
  • 2026-09-23 17:24docs: detailed banner towers with company signs, README refreshBexul
  • 2026-09-23 17:21Merge remote-tracking branch 'origin/main' into codex/interactive-activitiesBexul
  • 2026-09-23 17:20Integrate HR plans and reconcile skills with the current engineBexul
  • 2026-09-23 17:20fix(hr): use admin as the demo passwordYelnur
  • 2026-09-23 17:19fix(character): Esc and C close hero sheet while controls are lockedBexul
  • 2026-09-23 17:17feat(hr): show demo login and set requested admin passwordYelnur
  • 2026-09-23 17:16Merge remote-tracking branch 'origin/main' into worktree-agent-aa6bc31ac649e16b4Bexul
  • 2026-09-23 17:16feat(character): full-screen hero sheet with 3D hero, gear, trophies and nicknameBexul
  • 2026-09-23 17:13fix(hr): restrict employee search and clarify plan suggestionsYelnur
  • 2026-09-23 17:12Merge remote-tracking branch 'origin/main' into codex/interior-lifeBexul
  • 2026-09-23 17:12feat(city): bring interiors closer and add activities and colleaguesBexul
  • 2026-09-23 17:11fix(hud): glow mentor card instead of spawning followerBexul
  • 2026-09-23 17:10chore(hr): save current access and learning-plan implementationYelnur
  • 2026-09-23 17:07Integrate career comparison and remaining published changesBexul
  • 2026-09-23 17:07Integrate recommendation engine, HR dashboard, and profile uploadBexul
  • 2026-09-23 17:03Merge origin/main into feat/xp-levelsBexul
  • 2026-09-23 17:03feat(character): XP and levels for voluntary steps, reward overlayBexul
  • 2026-09-23 17:03feat(city): department towers branded as company officesBexul
  • 2026-09-23 17:03Merge remote-tracking branch 'origin/main' into codex/officeYelnur
  • 2026-09-23 17:02feat(career): compare role paths and explain personal venue recommendationsYelnur
  • 2026-09-23 16:56Merge remote-tracking branch 'origin/main' into worktree-agent-a4cf79d6daf705729Bexul
  • 2026-09-23 16:56feat(venues): practice tasks come from a sponsor companyBexul
  • 2026-09-23 16:53Merge remote-tracking branch 'origin/main' into codex/officeYelnur
  • 2026-09-23 16:52feat(hud): mentor guide glows, appears and vanishes in a beam of lightBexul
  • 2026-09-23 16:52Merge remote-tracking branch 'origin/main' into codex/officeYelnur
  • 2026-09-23 16:52feat(city): share four-floor office layout across office towersYelnur
  • 2026-09-23 16:45feat(city): add four-floor Backend office from reference planYelnur
  • 2026-09-23 16:44docs: eye-catching README header with city banner, badges and pitchBexul
  • 2026-09-23 16:43feat(hud): mentor greets on the street and guides a goal-based city tourBexul
  • 2026-09-23 16:39Merge remote-tracking branch 'origin/main' into codex/officeYelnur
  • 2026-09-23 16:38feat(city): add three-floor Frontend office from reference planYelnur
  • 2026-09-23 16:32feat(hud): two-step lobby with career goal, POST /api/goal updates engine targetBexul
  • 2026-09-23 16:29fix(mentor): enforce structured AI replies and distinguish fallback statusBexul
  • 2026-09-23 16:27feat(venues): add guided coding exercises and practical activity casesBexul
  • 2026-09-23 16:23feat(mentor): add conversational chat with inline activity cardsBexul
  • 2026-09-23 16:21feat(hud): 3D character select in lobby, chosen hero walks the cityBexul
  • 2026-09-23 16:16feat(mentor): automatically suggest actionable development cardsBexul
  • 2026-09-23 16:12feat(mentor): connect GPT-6 Sol through OpenAI Responses APIBexul
  • 2026-09-23 16:04feat(hud): add career lobby, focused navigation and next stepBexul
  • 2026-09-23 15:56Merge remote-tracking branch 'origin/main' into codex/officeYelnur
  • 2026-09-23 15:52Merge office layouts with current city interiorsBexul
  • 2026-09-23 15:50city: quest markers over venues, +skill popup with cheer after progress, wider interior camera; decisions note on CC0 packsBexul
  • 2026-09-23 15:50feat(city): adapt Yelnur office interiors with distinct building layoutsBexul
  • 2026-09-23 15:48city: yurt interior with mentor at the dastarkhan (floor sitting, greeting by language), Academy auditorium, mentors' café with barista and chandelierBexul
  • 2026-09-23 15:43city: interiors — tower lobby with reception and elevator, 4 grade floors per department (Backend racks, Frontend studio, Data dashboards, QA device lab, Product roadmap, HR lounge, Sales trophies, SuBexul
  • 2026-09-23 15:36Add multiplayer office prototype and implementation specificationYelnur
  • 2026-09-23 15:34feat(hr): aggregate career gaps and participation from storeBexul
  • 2026-09-23 15:34city: open world on CC0 models — 8 distinct towers with signs, roads with sidewalks and markings, KayKit venues/homes, street props, cars, pedestrians, sky and env; interior entry with fadeBexul
  • 2026-09-23 15:33feat(upload): import employee profiles and historyBexul
  • 2026-09-23 15:32Fix skill reconciliation and explainable activity recommendationsBexul
  • 2026-09-23 15:18city: CC0 KayKit character with idle/walk/run/sit animations, Shift run, closer cameraBexul
  • 2026-09-23 15:03Merge remote-tracking branch 'origin/main' into feat/open-worldBexul
  • 2026-09-23 15:03skeleton: Next.js app, data contract, API stubs, 3D city shell and HUDBexul
  • 2026-09-23 14:29docs: add quick start instructionsYe1nurN
  • 2026-09-23 14:16docs: outline Career Quest direction and demo milestonesBexul
Структура репозитория (513 файлов)
.claude/commands/check.md
.claude/commands/demo.md
.claude/commands/handoff.md
.claude/commands/integrate.md
.claude/commands/sync.md
.claude/commands/task.md
.claude/hooks/stop-check.sh
.claude/launch.json
.claude/settings.json
.gitignore
AGENTS.md
CLAUDE.md
README.md
components.json
docs/ARCHITECTURE.md
docs/DECISIONS.md
docs/DEMO.md
docs/DEPLOYMENT.md
docs/INTEGRATOR.md
docs/OFFICE_SPEC.ru.md
docs/PLAYBOOK.md
docs/REQUIREMENTS.md
docs/TODO.md
docs/VISION.md
docs/assets/banner.svg
docs/concept/START.md
eslint.config.mjs
next.config.ts
package-lock.json
package.json
postcss.config.mjs
prompts/skeleton.md
prototypes/office/.gitignore
prototypes/office/DELIVERY.md
prototypes/office/README.md
prototypes/office/build.mjs
prototypes/office/lib/dataset.mjs
prototypes/office/licenses/models.txt
prototypes/office/licenses/three.txt
prototypes/office/package-lock.json
prototypes/office/package.json
prototypes/office/server.mjs
prototypes/office/shared/world.mjs
prototypes/office/src/app.js
prototypes/office/src/index.html
prototypes/office/src/scene.js
prototypes/office/src/style.css
prototypes/office/test/world.test.mjs
prototypes/office/world.html
public/models/adventurers/Barbarian.glb
public/models/adventurers/Knight.glb
public/models/adventurers/License.txt
public/models/adventurers/Mage.glb
public/models/adventurers/Rogue.glb
public/models/city/License.txt
public/models/city/base.bin
public/models/city/base.gltf
public/models/city/bench.bin
public/models/city/bench.gltf
public/models/city/box_A.bin
public/models/city/box_A.gltf
public/models/city/box_B.bin
public/models/city/box_B.gltf
public/models/city/building_A.bin
public/models/city/building_A.gltf
public/models/city/building_A_withoutBase.bin
public/models/city/building_A_withoutBase.gltf
public/models/city/building_B.bin
public/models/city/building_B.gltf
public/models/city/building_B_withoutBase.bin
public/models/city/building_B_withoutBase.gltf
public/models/city/building_C.bin
public/models/city/building_C.gltf
public/models/city/building_C_withoutBase.bin
public/models/city/building_C_withoutBase.gltf
public/models/city/building_D.bin
public/models/city/building_D.gltf
public/models/city/building_D_withoutBase.bin
public/models/city/building_D_withoutBase.gltf
public/models/city/building_E.bin
public/models/city/building_E.gltf
public/models/city/building_E_withoutBase.bin
public/models/city/building_E_withoutBase.gltf
public/models/city/building_F.bin
public/models/city/building_F.gltf
public/models/city/building_F_withoutBase.bin
public/models/city/building_F_withoutBase.gltf
public/models/city/building_G.bin
public/models/city/building_G.gltf
public/models/city/building_G_withoutBase.bin
public/models/city/building_G_withoutBase.gltf
public/models/city/building_H.bin
public/models/city/building_H.gltf
public/models/city/building_H_withoutBase.bin
public/models/city/building_H_withoutBase.gltf
public/models/city/bush.bin
public/models/city/bush.gltf
public/models/city/car_hatchback.bin
public/models/city/car_hatchback.gltf
public/models/city/car_police.bin
public/models/city/car_police.gltf
public/models/city/car_sedan.bin
public/models/city/car_sedan.gltf
public/models/city/car_stationwagon.bin
public/models/city/car_stationwagon.gltf
public/models/city/car_taxi.bin
public/models/city/car_taxi.gltf
public/models/city/citybits_texture.png
public/models/city/dumpster.bin
public/models/city/dumpster.gltf
public/models/city/firehydrant.bin
public/models/city/firehydrant.gltf
public/models/city/road_corner.bin
public/models/city/road_corner.gltf
public/models/city/road_corner_curved.bin
public/models/city/road_corner_curved.gltf
public/models/city/road_junction.bin
public/models/city/road_junction.gltf
public/models/city/road_straight.bin
public/models/city/road_straight.gltf
public/models/city/road_straight_crossing.bin
public/models/city/road_straight_crossing.gltf
public/models/city/road_tsplit.bin
public/models/city/road_tsplit.gltf
public/models/city/streetlight.bin
public/models/city/streetlight.gltf
public/models/city/trafficlight_A.bin
public/models/city/trafficlight_A.gltf
public/models/city/trafficlight_B.bin
public/models/city/trafficlight_B.gltf
public/models/city/trafficlight_C.bin
public/models/city/trafficlight_C.gltf
public/models/city/trash_A.bin
public/models/city/trash_A.gltf
public/models/city/trash_B.bin
public/models/city/trash_B.gltf
public/models/city/watertower.bin
public/models/city/watertower.gltf
public/models/furniture/License.txt
public/models/furniture/armchair.bin
public/models/furniture/armchair.gltf
public/models/furniture/armchair_pillows.bin
public/models/furniture/armchair_pillows.gltf
public/models/furniture/bed_double_A.bin
public/models/furniture/bed_double_A.gltf
public/models/furniture/bed_double_B.bin
public/models/furniture/bed_double_B.gltf
public/models/furniture/bed_single_A.bin
public/models/furniture/bed_single_A.gltf
public/models/furniture/bed_single_B.bin
public/models/furniture/bed_single_B.gltf
public/models/furniture/book_set.bin
public/models/furniture/book_set.gltf
public/models/furniture/book_single.bin
public/models/furniture/book_single.gltf
public/models/furniture/cabinet_medium.bin
public/models/furniture/cabinet_medium.gltf
public/models/furniture/cabinet_medium_decorated.bin
public/models/furniture/cabinet_medium_decorated.gltf
public/models/furniture/cabinet_small.bin
public/models/furniture/cabinet_small.gltf
public/models/furniture/cabinet_small_decorated.bin
public/models/furniture/cabinet_small_decorated.gltf
public/models/furniture/cactus_medium_A.bin
public/models/furniture/cactus_medium_A.gltf
public/models/furniture/cactus_medium_B.bin
public/models/furniture/cactus_medium_B.gltf
public/models/furniture/cactus_small_A.bin
public/models/furniture/cactus_small_A.gltf
public/models/furniture/cactus_small_B.bin
public/models/furniture/cactus_small_B.gltf
public/models/furniture/chair_A.bin
public/models/furniture/chair_A.gltf
public/models/furniture/chair_A_wood.bin
public/models/furniture/chair_A_wood.gltf
public/models/furniture/chair_B.bin
public/models/furniture/chair_B.gltf
public/models/furniture/chair_B_wood.bin
public/models/furniture/chair_B_wood.gltf
public/models/furniture/chair_C.bin
public/models/furniture/chair_C.gltf
public/models/furniture/chair_stool.bin
public/models/furniture/chair_stool.gltf
public/models/furniture/chair_stool_wood.bin
public/models/furniture/chair_stool_wood.gltf
public/models/furniture/couch.bin
public/models/furniture/couch.gltf
public/models/furniture/couch_pillows.bin
public/models/furniture/couch_pillows.gltf
public/models/furniture/furniturebits_texture.png
public/models/furniture/lamp_standing.bin
public/models/furniture/lamp_standing.gltf
public/models/furniture/lamp_table.bin
public/models/furniture/lamp_table.gltf
public/models/furniture/pictureframe_large_A.bin
public/models/furniture/pictureframe_large_A.gltf
public/models/furniture/pictureframe_large_B.bin
public/models/furniture/pictureframe_large_B.gltf
public/models/furniture/pictureframe_medium.bin
public/models/furniture/pictureframe_medium.gltf
public/models/furniture/pictureframe_small_A.bin
public/models/furniture/pictureframe_small_A.gltf
public/models/furniture/pictureframe_small_B.bin
public/models/furniture/pictureframe_small_B.gltf
public/models/furniture/pictureframe_small_C.bin
public/models/furniture/pictureframe_small_C.gltf
public/models/furniture/pictureframe_standing_A.bin
public/models/furniture/pictureframe_standing_A.gltf
public/models/furniture/pictureframe_standing_B.bin
public/models/furniture/pictureframe_standing_B.gltf
public/models/furniture/pillow_A.bin
public/models/furniture/pillow_A.gltf
public/models/furniture/pillow_B.bin
public/models/furniture/pillow_B.gltf
public/models/furniture/rug_oval_A.bin
public/models/furniture/rug_oval_A.gltf
public/models/furniture/rug_oval_B.bin
public/models/furniture/rug_oval_B.gltf
public/models/furniture/rug_rectangle_A.bin
public/models/furniture/rug_rectangle_A.gltf
public/models/furniture/rug_rectangle_B.bin
public/models/furniture/rug_rectangle_B.gltf
public/models/furniture/rug_rectangle_stripes_A.bin
public/models/furniture/rug_rectangle_stripes_A.gltf
public/models/furniture/rug_rectangle_stripes_B.bin
public/models/furniture/rug_rectangle_stripes_B.gltf
public/models/furniture/shelf_A_big.bin
public/models/furniture/shelf_A_big.gltf
public/models/furniture/shelf_A_small.bin
public/models/furniture/shelf_A_small.gltf
public/models/furniture/shelf_B_large.bin
public/models/furniture/shelf_B_large.gltf
public/models/furniture/shelf_B_large_decorated.bin
public/models/furniture/shelf_B_large_decorated.gltf
public/models/furniture/shelf_B_small.bin
public/models/furniture/shelf_B_small.gltf
public/models/furniture/shelf_B_small_decorated.bin
public/models/furniture/shelf_B_small_decorated.gltf
public/models/furniture/table_low.bin
public/models/furniture/table_low.gltf
public/models/furniture/table_medium.bin
public/models/furniture/table_medium.gltf
public/models/furniture/table_medium_long.bin
public/models/furniture/table_medium_long.gltf
public/models/furniture/table_small.bin
public/models/furniture/table_small.gltf
public/models/restaurant/License.txt
public/models/restaurant/bowl.bin
public/models/restaurant/bowl.gltf
public/models/restaurant/chair_A.bin
public/models/restaurant/chair_A.gltf
public/models/restaurant/chair_B.bin
public/models/restaurant/chair_B.gltf
public/models/restaurant/chair_stool.bin
public/models/restaurant/chair_stool.gltf
public/models/restaurant/crate.bin
public/models/restaurant/crate.gltf
public/models/restaurant/cuttingboard.bin
public/models/restaurant/cuttingboard.gltf
public/models/restaurant/dishrack_plates.bin
public/models/restaurant/dishrack_plates.gltf
public/models/restaurant/door_A.bin
public/models/restaurant/door_A.gltf
public/models/restaurant/extractorhood.bin
public/models/restaurant/extractorhood.gltf
public/models/restaurant/food_burger.bin
public/models/restaurant/food_burger.gltf
public/models/restaurant/food_dinner.bin
public/models/restaurant/food_dinner.gltf
public/models/restaurant/food_stew.bin
public/models/restaurant/food_stew.gltf
public/models/restaurant/fridge_A.bin
public/models/restaurant/fridge_A.gltf
public/models/restaurant/jar_A_large.bin
public/models/restaurant/jar_A_large.gltf
public/models/restaurant/jar_B_large.bin
public/models/restaurant/jar_B_large.gltf
public/models/restaurant/jar_C_large.bin
public/models/restaurant/jar_C_large.gltf
public/models/restaurant/kitchencabinet.bin
public/models/restaurant/kitchencabinet.gltf
public/models/restaurant/kitchencounter_sink.bin
public/models/restaurant/kitchencounter_sink.gltf
public/models/restaurant/kitchencounter_straight_A.bin
public/models/restaurant/kitchencounter_straight_A.gltf
public/models/restaurant/kitchencounter_straight_A_decorated.bin
public/models/restaurant/kitchencounter_straight_A_decorated.gltf
public/models/restaurant/menu.bin
public/models/restaurant/menu.gltf
public/models/restaurant/pillar_A.bin
public/models/restaurant/pillar_A.gltf
public/models/restaurant/plate.bin
public/models/restaurant/plate.gltf
public/models/restaurant/pot_A.bin
public/models/restaurant/pot_A.gltf
public/models/restaurant/restaurantbits_texture.png
public/models/restaurant/shelf_papertowel_decorated.bin
public/models/restaurant/shelf_papertowel_decorated.gltf
public/models/restaurant/stew_bowl.bin
public/models/restaurant/stew_bowl.gltf
public/models/restaurant/stove_single_countertop.bin
public/models/restaurant/stove_single_countertop.gltf
public/models/restaurant/table_round_A.bin
public/models/restaurant/table_round_A.gltf
public/models/restaurant/table_round_A_small.bin
public/models/restaurant/table_round_A_small.gltf
public/models/restaurant/table_round_B.bin
public/models/restaurant/table_round_B.gltf
public/models/restaurant/wall.bin
public/models/restaurant/wall.gltf
public/models/restaurant/wall_doorway.bin
public/models/restaurant/wall_doorway.gltf
public/models/restaurant/wall_window_open.bin
public/models/restaurant/wall_window_open.gltf
scripts/check.sh
scripts/setup-data.sh
scripts/setup-worktree.sh
src/app/api/career/preview/route.ts
src/app/api/employees/route.ts
src/app/api/events/route.ts
src/app/api/goal/route.ts
src/app/api/hr/access/route.ts
src/app/api/hr/candidates/route.ts
src/app/api/hr/plans/route.ts
src/app/api/hr/route.ts
src/app/api/hr/seed/route.ts
src/app/api/hr/session/route.ts
src/app/api/hr/templates/route.ts
src/app/api/intro/chat/route.ts
src/app/api/knowledge/route.ts
src/app/api/mentor/route.ts
src/app/api/profile/[id]/route.ts
src/app/api/progress/route.ts
src/app/api/recommend/[id]/route.ts
src/app/api/upload/route.ts
src/app/api/venues/practice/route.ts
src/app/favicon.ico
src/app/globals.css
src/app/hr/page.tsx
src/app/layout.tsx
src/app/page.tsx
src/app/upload/page.tsx
src/components/ui/badge.tsx
src/components/ui/button.tsx
src/components/ui/card.tsx
src/components/ui/dialog.tsx
src/components/ui/progress.tsx
src/components/ui/scroll-area.tsx
src/components/ui/select.tsx
src/components/ui/separator.tsx
src/components/ui/sheet.tsx
src/components/ui/sonner.tsx
src/components/ui/tabs.tsx
src/components/ui/tooltip.tsx
src/features/career/CareerExplorer.tsx
src/features/career/WhyHere.tsx
src/features/career/api.ts
src/features/career/domain.ts
src/features/character/HeroButton.tsx
src/features/character/HeroStage.tsx
src/features/character/Panel.tsx
src/features/character/QuestsPanel.tsx
src/features/character/SheetTabs.tsx
src/features/character/XpLevel.tsx
src/features/character/XpReward.tsx
src/features/character/gear.ts
src/features/character/heroStore.ts
src/features/character/useHero.ts
src/features/character/useXp.ts
src/features/character/xp.ts
src/features/city/Buildings.tsx
src/features/city/CameraControls.tsx
src/features/city/CameraRig.tsx
src/features/city/Character.tsx
src/features/city/CityCanvas.tsx
src/features/city/Decor.tsx
src/features/city/Ground.tsx
src/features/city/Hint3D.tsx
src/features/city/Label.tsx
src/features/city/Npc.tsx
src/features/city/Places.tsx
src/features/city/Player.tsx
src/features/city/QuestMarkers.tsx
src/features/city/Street.tsx
src/features/city/Tower.tsx
src/features/city/Venue.tsx
src/features/city/avatar.ts
src/features/city/cameraState.ts
src/features/city/companies.ts
src/features/city/extras.ts
src/features/city/interiors/Academy.tsx
src/features/city/interiors/ActivitySpot.tsx
src/features/city/interiors/Cafe.tsx
src/features/city/interiors/Colleague.tsx
src/features/city/interiors/ElevatorPanel.tsx
src/features/city/interiors/Hall.tsx
src/features/city/interiors/Interior.tsx
src/features/city/interiors/InteriorActivities.tsx
src/features/city/interiors/InteriorControls.tsx
src/features/city/interiors/Lobby.tsx
src/features/city/interiors/Office.tsx
src/features/city/interiors/OfficeFloor.tsx
src/features/city/interiors/OfficeLife.tsx
src/features/city/interiors/Room.tsx
src/features/city/interiors/YurtInterior.tsx
src/features/city/interiors/backend/BackendOffice.tsx
src/features/city/interiors/backend/BackendOfficeControls.tsx
src/features/city/interiors/backend/furniture.tsx
src/features/city/interiors/backend/layout.ts
src/features/city/interiors/frontend/FrontendOffice.tsx
src/features/city/interiors/frontend/FrontendOfficeControls.tsx
src/features/city/interiors/frontend/layout.ts
src/features/city/interiors/officePlans.ts
src/features/city/interiors/props.tsx
src/features/city/kit.tsx
src/features/city/layout.ts
src/features/city/models.ts
src/features/city/playerState.ts
src/features/city/sceneState.ts
src/features/engine/api.ts
src/features/engine/eligibility.ts
src/features/engine/goal.ts
src/features/engine/profile.ts
src/features/engine/progress.ts
src/features/engine/recommend.ts
src/features/hr/.gitignore
src/features/hr/AccessPanel.tsx
src/features/hr/HistoricalReport.tsx
src/features/hr/Page.tsx
src/features/hr/PlanSteps.tsx
src/features/hr/PlansPanel.tsx
src/features/hr/TemplatesPanel.tsx
src/features/hr/access.ts
src/features/hr/api.ts
src/features/hr/client.ts
src/features/hr/competencies.ts
src/features/hr/demo-access.ts
src/features/hr/seed.ts
src/features/hr/state.ts
src/features/hr/summary.ts
src/features/hr/templates.ts
src/features/hr/types.ts
src/features/hud/CharacterSelect.tsx
src/features/hud/CityMap.tsx
src/features/hud/EmployeeSelect.tsx
src/features/hud/FastTravel.tsx
src/features/hud/GoalStep.tsx
src/features/hud/Hud.tsx
src/features/hud/InteractHint.tsx
src/features/hud/Lobby.tsx
src/features/hud/MentorGuide.tsx
src/features/hud/NextStep.tsx
src/features/hud/PanelHost.tsx
src/features/hud/ProfileChip.tsx
src/features/hud/SoonPanel.tsx
src/features/hud/TopBar.tsx
src/features/hud/TourCard.module.css
src/features/hud/TourCard.tsx
src/features/hud/data.ts
src/features/hud/tour.ts
src/features/hud/useHotkeys.ts
src/features/hud/useNextStep.ts
src/features/intro/Intro.tsx
src/features/intro/IntroChat.tsx
src/features/intro/Roadmap.tsx
src/features/intro/chat.ts
src/features/intro/content.ts
src/features/knowledge/Guide.tsx
src/features/knowledge/ProfileKnowledge.tsx
src/features/knowledge/answers.ts
src/features/knowledge/api.ts
src/features/knowledge/catalog.ts
src/features/knowledge/context.ts
src/features/mentor/Panel.tsx
src/features/mentor/agent.ts
src/features/mentor/api.ts
src/features/mentor/chat.ts
src/features/mentor/offline.ts
src/features/mentor/questions.ts
src/features/office/Panel.tsx
src/features/upload/Page.tsx
src/features/upload/api.ts
src/features/upload/fields.ts
src/features/upload/parse.ts
src/features/upload/types.ts
src/features/upload/validation.ts
src/features/venues/Panel.tsx
src/features/venues/PracticeDialog.tsx
src/features/venues/api.ts
src/features/venues/exercises.ts
src/features/venues/python.ts
src/features/venues/tasks/clients.ts
src/features/venues/tasks/data.ts
src/features/venues/tasks/engineering.ts
src/features/venues/tasks/fallback.ts
src/features/venues/tasks/frontend.ts
src/features/venues/tasks/index.ts
src/features/venues/tasks/people.ts
src/features/venues/tasks/product.ts
src/features/venues/tasks/quality.ts
src/features/venues/tasks/soft.ts
src/features/venues/tasks/types.ts
src/features/venues/typescript.ts
src/lib/client-store.ts
src/lib/llm.ts
src/lib/sse.ts
src/lib/store.ts
src/lib/types.ts
src/lib/utils.ts
src/lib/world.ts
src/nav.ts
src/panels.ts
tsconfig.json
Ветки (9)

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

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

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