О проекте
Команда: Saryarqa
Кейс HackAlem.ai: Спецтрек — Astana Innovations
Стадия: Доведённый продукт
Задача кейса: «Аким на 5 часов»: городской симулятор, распределяющий бюджет по 5 направлениям и 5 районам
Суть
Браузерный симулятор акима Астаны: игрок выбирает пять мер на бюджет 100 единиц по пяти направлениям и районам, видит последствия на SVG-карте с реальной геометрией города и сохраняет результат в профиль и рейтинг.
Как устроено
Все константы и проверки собраны в одном движке simulator.js: ровно 5 уникальных мер, не больше двух в одном направлении, несовместимые пары запрещены, затем учитываются задержка (8−lag)/8, синергии и веса населения. Балл считается как Score = 0.7×средний индекс + 0.3×слабейший район − число показателей ниже 40. Сервер на Node.js пересчитывает план перед сохранением в Supabase или локальное хранилище. AI-советник (OpenAI) получает только каталог вычисленных фактов, сервер отклоняет неизвестные идентификаторы, при сбое работает локальный помощник. Сцена SVG построена по OSM-геоданным, есть транспорт, жители и прогулка по Нуре.
Ключевые решения
- deterministic scoring engine
- synergies and lag model
- fact-ID grounded LLM answers (prompt-injection guard)
- server-side recomputation
- OSM geodata SVG scene
Метрики
Исходный индекс 52,56 → 56,54 на примере из кейса (0 критических показателей)
Особенности
Сильная игровая подача: SVG-карта Астаны по OSM с миниатюрами 17 достопримечательностей, анимированные жители и транспорт, отдельный пак ассетов. Модель выбирает только идентификаторы подготовленных фактов, поэтому подменить балл через промпт нельзя.
Стек
JavaScript ES Modules · Node.js HTTP server · SVG · Supabase (PostgreSQL) · node:test
Модели
gpt-6-luna (OpenAI, configurable)
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-d5c78ff1-saryarqa.
README
README.md«Аким на 5 часов» — Saryarqa City Simulator
Учебный симулятор управления Астаной по кейсу HackAlem AI. Соберите пять решений на общий бюджет 100 единиц, сравните последствия для районов и сохраните результат своего акима. Главная задача — улучшать город, учитывая не только среднее значение, но и самый слабый район.
Важно: показатели и эффекты — синтетическая модель из кейса, а не прогноз для реальной Астаны. Числа вычисляет детерминированный движок; ИИ не назначает баллы.
Проект предназначен для учебных занятий, обсуждения городских приоритетов и демонстрации бюджетных компромиссов. Игрок выступает в роли акима: распределяет ограниченные средства между транспортом, экологией, социальной инфраструктурой, безопасностью и городскими сервисами. Карта показывает последствия, расчёт позволяет сравнить планы, а советник объясняет уже проверенные результаты.
Быстрый запуск
Нужен Node.js 18+. У приложения нет сторонних runtime-зависимостей; npm install не нужен.
git clone https://github.com/BAITC-Hacks/hack-d5c78ff1-saryarqa.git
cd hack-d5c78ff1-saryarqa
git switch main
npm start
Если репозиторий уже открыт, достаточно выполнить npm start в папке с package.json. Для первого запуска ключи API и база данных не нужны: расчёт, карта, локальный помощник и локальные профили работают самостоятельно. Отдельного этапа сборки нет: сервер отдаёт JavaScript-модули, CSS и локальные ресурсы напрямую. В проекте нет команд npm run build или npm run dev.
Откройте localhost:3000. Не открывайте index.html через file://: модулям и API нужен HTTP-сервер.
Другой порт в PowerShell:
$env:PORT = '3031'
npm start
Сервер слушает 127.0.0.1. Остановить его можно Ctrl+C. После изменения серверного кода или .env перезапустите процесс.
Проверка доступности из второго терминала: curl.exe http://127.0.0.1:3000/api/services в Windows или curl http://127.0.0.1:3000/api/services в Linux/macOS. Этот запрос сообщает состояние интеграций, но сам по себе не проверяет весь пользовательский сценарий.
Что можно сделать
- Игра: выбрать район, назначить меры, наблюдать изменения на карте и сравнить итог со стартом. Есть вид сверху, объёмная проекция, переключение слоёв и прогулка по Нуре.
- Расчёт: собрать тот же план без карты и получить результат по тем же правилам. Районные меры требуют явного назначения района.
- Профиль акима: создать имя, сохранить ключ входа, выйти и восстановить профиль по ключу. Это вход по секретному ключу профиля; email и пароль не требуются.
- История и топ акимов: сохранять рассчитанные планы, возвращаться к ним и сравнивать лучшие результаты. Сервер заново проверяет и рассчитывает план перед сохранением; присланный клиентом балл не принимается.
- Советник: задать вопрос о бюджете, районах, формуле или улучшении плана. Живой AI зависит от серверной настройки; при ошибке доступен явно обозначенный локальный помощник по фактам расчёта.
- Черновик: выбранные решения, предпочтения вида и личный рекорд сохраняются в этом браузере. После изменения плана старый результат сбрасывается.
Интерфейс на русском. Сарайшық присутствует на карте как справочный район, но не входит в расчётный набор из пяти районов. Прогулка, транспорт и жители иллюстрируют город и не меняют балл.
Сценарий для демонстрации
- Откройте приложение. Исходный индекс — 52,56.
- Нажмите «Пример из кейса»: M7 → Нура, M8 → Нура, M10 → Нура, M12 → весь город, M5 → Сарыарка.
- Проверьте бюджет: 95 / 100. Нажмите «Показать прогноз». В режиме игры можно пропустить анимацию кнопкой «К прогнозу».
- Результат: 56,54; точное значение
56.54307; критических показателей — 0. - Откройте советника, задайте вопрос о бюджете или слабейшем районе. Источник ответа обозначен в интерфейсе.
- Войдите в профиль, сохраните результат и проверьте историю и рейтинг. Повторное сохранение того же плана не создаёт дубликат.
- Измените план и рассчитайте его заново. Для недопустимого набора выводятся причины, балл не присваивается.
Для прогулки нажмите «Гулять по Нуре» на карте. Используйте WASD/стрелки или экранные кнопки. Мобильные кнопки удерживаются для движения; центрирование возвращает камеру к акиму.
Сохранения и вход
Есть два независимых уровня хранения:
| Уровень | Что хранит | Граница |
|---|---|---|
localStorage браузера | Черновик, вид карты, личный рекорд и ключ текущего профиля | Только этот браузер; очистка данных удалит локальную копию |
| Серверное хранилище | Профили, история допустимых планов, лучшие результаты | Supabase или явно выбранный локальный сервер |
Без конфигурации Supabase локальный Node-сервер использует файл в исключённой из Git папке .akim-data/. Для явного локального режима:
$env:AKIM_STORAGE_MODE = 'local'
npm start
Это рейтинг данного локального сервера, не глобальный рейтинг опубликованного сайта. Файл должен сохраняться между перезапусками. В бессерверном развёртывании используйте Supabase: локальный диск функции не подходит для постоянного хранения.
Ключ профиля даёт доступ к его истории. Сохраните его приватно; не публикуйте в презентации, Git или скриншотах. Если ключ утрачен и данных браузера нет, восстановления через email в этой версии нет. На общем компьютере выходите из профиля.
Supabase и AI
Скопируйте .env.example в .env или .env.local, если файла ещё нет. Не перезаписывайте существующую конфигурацию. Сервер загружает эти файлы автоматически. При локальной разработке настройки проекта имеют приоритет над унаследованными переменными IDE; при NODE_ENV=production приоритет сохраняется за окружением платформы.
| Переменная | Назначение |
|---|---|
OPENAI_API_KEY | Серверный ключ OpenAI для живого анализа и чата |
OPENAI_MODEL | Доступная вашему аккаунту модель; пример указан в .env.example |
SUPABASE_URL | URL своего проекта Supabase |
SUPABASE_SECRET_KEY | Серверный secret key; предпочтительный вариант |
SUPABASE_SERVICE_ROLE_KEY | Альтернатива для legacy service-role ключа |
AKIM_STORAGE_MODE=local | Явно использовать локальное дисковое хранилище |
PORT | Порт локального сервера, по умолчанию 3000 |
Примените миграцию таблиц и рейтинга в своём Supabase-проекте. Ключи передаются только серверу, не в клиентскую сборку. Таблицы защищены RLS; запись результатов проходит через API приложения.
GET /api/services сообщает доступность хранилища и наличие конфигурации AI без раскрытия ключей. configured: true означает наличие настройки, а не успешную авторизацию у провайдера. Ошибка AI_AUTH_FAILED означает, что провайдер отклонил ключ: исправьте серверную настройку и перезапустите процесс. Локальный разбор продолжит работать.
Правила и формула
Допустимы ровно пять уникальных мер, стоимость до 100 включительно, максимум две меры одного направления. Все районные меры имеют допустимый район; городские — без района. Несовместимые пары отклоняются.
Движок последовательно учитывает задержку (8 − lag) / 8, фиксированные синергии, ограничение показателей диапазоном 0–100, веса показателей и населения. Затем:
Score = 0.7 × средний индекс по населению
+ 0.3 × индекс слабейшего района
− количество значений строго ниже 40
Значение ровно 40 не штрафуется. Внутри расчёта сохраняется полная точность; округление используется только для отображения. Некорректный план не получает результат.
Архитектура
Стек: HTML, CSS, JavaScript ES Modules и SVG в браузере; встроенный HTTP-сервер Node.js; node:test для автоматических проверок. Supabase предоставляет PostgreSQL-хранилище, OpenAI — дополнительный анализ через серверный API. По умолчанию сервер запрашивает модель gpt-6-luna; её можно изменить переменной OPENAI_MODEL на модель, доступную вашему аккаунту. Клиентских UI-фреймворков и сторонних runtime-пакетов нет.
Поток данных: выбор мер → проверка правил → детерминированный результат → карта и прогноз. Запрос на сохранение или AI-анализ передаёт план серверу, который повторяет расчёт. База хранит проверенный план, а модель получает каталог допустимых фактов и рекомендаций.
| Компонент | Ответственность |
|---|---|
simulator.js | Единственный источник официальных констант, проверки и формулы |
app.js, index.html, styles.css | Игровой интерфейс, калькулятор и вывод результата |
game/session.js, game/storage.js | Одна сессия плана и валидируемые локальные сохранения |
game/cloud.js, game/account-ui.js, game/cloud-panel.js | Вход, синхронизация, история и рейтинг |
game/forecast.js, game/advisor.js | Проверенные варианты улучшения и локальный помощник |
api/analyze.js, backend/analysis.js | Повторный расчёт на сервере, запрос к OpenAI и проверка выбранных фактов |
api/player.js, api/runs.js, api/leaderboard.js | Профили, история и рейтинг через авторизованные запросы |
backend/storage.js, backend/local-storage.js | Supabase и локальное серверное хранилище |
scene/ | SVG-карта, проекции, слои, аким, транспорт и воспроизведение |
game/art.js, assets/exports/ | Реестр и готовые художественные ресурсы |
server.js | HTTP-сервер с разрешёнными публичными путями и ограничением тела API |
Игра, калькулятор, история и советник используют один движок. AI получает уже вычисленные факты; ответ проверяется по разрешённым идентификаторам фактов. История из базы повторно проверяется перед восстановлением в интерфейсе.
Границы доверия и prompt injection
Вопрос пользователя не даёт права менять формулу, баллы или серверные настройки. Модель выбирает идентификаторы из подготовленного сервером каталога фактов; сервер отклоняет неизвестные идентификаторы и формирует текст из соответствующих проверенных записей. Тесты API проверяют подмену клиентского балла, недопустимые планы и выдуманные ответы провайдера. Это конкретные ограничения приложения, а не заявление об универсальной защите от всех атак на LLM.
Проверки
npm test
node tools/check-assets.mjs
Проверяются официальные контрольные значения, ограничения плана, сессия/черновики, графика, карта, серверные маршруты, аутентификация и проверка AI-ответов. Моки внешних API в тестах не доказывают доступность живого провайдера.
Дополнительные браузерные сценарии находятся в tests/browser-smoke.mjs и tests/integration-browser.mjs. Для них отдельно нужны Chrome и Playwright; приложение от Playwright не зависит. Задайте AKIM_TEST_URL на адрес запущенного сервера и при внешней установке PLAYWRIGHT_MODULE_PATH на абсолютный путь пакета. Артефакты проверки сохраняются локально и не входят в deliverable.
Пример запуска браузерной проверки в PowerShell после отдельной установки Playwright и запуска сервера:
$env:AKIM_TEST_URL = 'http://127.0.0.1:3000'
node tests/integration-browser.mjs
node tests/browser-smoke.mjs
Если запуск не удался
| Симптом | Что проверить |
|---|---|
node или npm не найден | Установите Node.js 18+ и заново откройте терминал; проверьте node --version |
PowerShell запрещает запуск npm.ps1 | Используйте npm.cmd start и npm.cmd test, не меняя системную политику |
EADDRINUSE | Порт занят: задайте другой PORT, как в примере выше |
| Пустая страница при открытии файла | Откройте HTTP-адрес работающего сервера, а не file:// |
| Карта загружается медленно | Дождитесь загрузки локальных геоданных; расчёт доступен отдельно от карты |
AI недоступен или AI_AUTH_FAILED | Проверьте серверный ключ, модель и квоты; перезапустите сервер после изменения .env |
| История Supabase недоступна | Проверьте URL, серверный ключ и применение миграции; для автономной демонстрации используйте локальное хранилище |
npm start — локальный запуск, а не публикация в интернете. На сервере должны работать и HTTP API, и выдача статических ресурсов; одного размещения HTML на GitHub Pages недостаточно для AI и облачных профилей. Переменные окружения и миграцию настраивают отдельно в выбранном хостинге. Пуш кода не переносит локальные ключи в окружение хостинга.
Выбор города и объединённая карта
В шапке можно выбрать Астану, Алматы или Шымкент. Все три карты используют локальные снимки доступных объектов OpenStreetMap внутри указанных границ: улицы, здания, воду и зелёные зоны. Числовая модель кейса доступна только для Астаны. При переходе в другой город её панели расчёта скрыты, а план и результат сохраняются до возврата.
Полные слои хранятся в gzip; сервер выдаёт их по разрешённым GeoJSON-адресам. SVG отображает геометрию видимой области, объединяя дороги и здания в группы путей. Это уменьшает число DOM-элементов без искусственного лимита количества видимых зданий. Данные загружаются при выборе города; объём полной карты влияет на первый запуск. Источники и границы: реестр городских карт.
Проверка переходов между городами, сохранности плана и нового интерфейса: node tests/sync-browser.mjs (те же Chrome/Playwright и переменные окружения, что выше).
Данные, ресурсы и ограничения
Формула и числовой набор взяты из организаторского «Датасета районов», задача — из кейса «Аким на 5 часов». География не является источником числовых показателей модели. Карта использует отобранные OSM/городские GIS-данные, собственный SVG-рендерер и локальные художественные ресурсы, без загрузки полной базы организаций.
Это 2.5D-проекция, не полноценный 3D-движок. Высоты, население сцены и движение транспорта иллюстративны. Прогулка ограничена Нурой; рекомендации ищут допустимые улучшения одной заменой, а не гарантируют глобальный оптимум. Права на отдельные исходные художественные заготовки и актуальность муниципальных контуров требуют отдельной проверки по реестрам источников.
Живой AI требует действующего ключа и доступной модели. Во время интеграции выполнен контрольный запрос к OpenAI с HTTP 200, source=openai, grounded=true и проверенным баллом 56.54307; сведения об этой проверке и Supabase приведены в отчёте об интеграциях. Эти результаты относятся к проверенному окружению команды и не гарантируют доступность чужих ключей или будущего развёртывания. Локальный помощник отдельно обозначен и не выдаётся за генеративный AI. Подтверждённый публичный URL в этой версии README не заявлен.
Авторы коммитов
История коммитов
- 2026-09-23 17:59ffAbenovv
- 2026-09-23 17:52Merge branch 'codex/akim-session'Abenovv
- 2026-09-23 17:52merge: integrate verified city maps and final launch guideAbenovv
- 2026-09-23 17:51feat: finalize verified simulator accounts AI and launch documentationAbenovv
- 2026-09-23 17:51merge: synchronize complete city maps with current gameplay and servicesAbenovv
- 2026-09-23 17:23Add complete city maps, city selection and mint interfaceBaizhigitov
- 2026-09-23 17:22fix(scene): align standalone planner mobile breakpointAbenovv
- 2026-09-23 17:18Merge branch 'codex/akim-integration' into codex/akim-sessionAbenovv
Все коммиты (95)
- 2026-09-23 17:15feat: integrate completed game interface forecasts and map animationAbenovv
- 2026-09-23 17:14fix(scene): preserve playback timing during slow map framesAbenovv
- 2026-09-23 17:10Merge remote-tracking branch 'origin/codex/akim-world' into codex/akim-sessionAbenovv
- 2026-09-23 17:07Merge remote-tracking branch 'origin/codex/local-complete' into codex/akim-sessionAbenovv
- 2026-09-23 17:03Unify city icons and bring sourced parks to life with greeneryyerbolberdalin1
- 2026-09-23 17:00Index complex greenery edges for responsive viewport selectionyerbolberdalin1
- 2026-09-23 16:59Add actual named park and woodland polygons for Astana greeneryyerbolberdalin1
- 2026-09-23 16:58Add deterministic source-constrained SVG vegetationyerbolberdalin1
- 2026-09-23 16:56Redesign all landmark icons as detailed architectural miniaturesyerbolberdalin1
- 2026-09-23 16:51Load complete city buildings on demand and resolve map label overlapsyerbolberdalin1
- 2026-09-23 16:47Simplify interface with white minimal styling and compact place cardsBaizhigitov
- 2026-09-23 16:47Add complete Astana building coverage as geographic tilesyerbolberdalin1
- 2026-09-23 16:46Select visible buildings by cached viewport footprint areayerbolberdalin1
- 2026-09-23 16:45Render source building footprints with material roofs and shaded facadesyerbolberdalin1
- 2026-09-23 16:39merge: reconcile gameplay fixes with sourced atlas and assetsAbenovv
- 2026-09-23 16:35Polish Astana map hierarchy, contrast, navigation and source detailsyerbolberdalin1
- 2026-09-23 16:31Refine city plan panel hierarchy and decision slotsyerbolberdalin1
- 2026-09-23 16:31Merge remote-tracking branch 'origin/docs/readme-data-sources' into codex/local-completeBaizhigitov
- 2026-09-23 16:31chore: normalize merged map text filesAbenovv
- 2026-09-23 16:30fix(scene): preserve actor nodes, focus and input lifecycleAbenovv
- 2026-09-23 16:30test(scene): exercise shared session gameplay in ChromeAbenovv
- 2026-09-23 16:30Merge remote-tracking branch 'origin/codex/akim-world' into codex/local-completeBaizhigitov
- 2026-09-23 16:28Merge remote-tracking branch 'origin/codex/akim-world' into codex/akim-integrationAbenovv
- 2026-09-23 16:28Merge remote-tracking branch 'origin/codex/akim-assets-qa' into codex/akim-integrationAbenovv
- 2026-09-23 16:26Refine sourced landmark positions and verify real-map gameplayyerbolberdalin1
- 2026-09-23 16:21Add reviewed Astana game asset packageBaizhigitov
- 2026-09-23 16:19test(scene): verify attributed districts and actual Nura walkabilityyerbolberdalin1
- 2026-09-23 16:19Connect the sourced Astana atlas to the main gameyerbolberdalin1
- 2026-09-23 16:18Merge branch 'codex/akim-world-playback-v1' into codex/akim-worldAbenovv
- 2026-09-23 16:18Merge branch 'codex/akim-world-navigation-qa' into codex/akim-worldAbenovv
- 2026-09-23 16:18Connect sourced districts and playable city plan to real Astana atlasyerbolberdalin1
- 2026-09-23 16:17test(scene): catch atlas mayor repaint and collision regressionsyerbolberdalin1
- 2026-09-23 16:16Bind scene playback completion to run IDsAbenovv
- 2026-09-23 16:16Cover actor navigation and representative activityAbenovv
- 2026-09-23 16:15Add sourced six-district Astana boundaries in WGS84yerbolberdalin1
- 2026-09-23 16:13Merge remote-tracking branch 'origin/codex/akim-25d-game' into codex/akim-worldAbenovv
- 2026-09-23 16:12Merge branch 'codex/akim-play-panel' into codex/akim-worldyerbolberdalin1
- 2026-09-23 16:12Merge branch 'codex/world-atlas-regression' into codex/akim-worldyerbolberdalin1
- 2026-09-23 16:12assets: add approved city style and category previewsBaizhigitov
- 2026-09-23 16:12Add session-backed city development panel for Astana atlasyerbolberdalin1
- 2026-09-23 16:11Merge branch 'codex/akim-world-playback-compat' into codex/akim-worldyerbolberdalin1
- 2026-09-23 16:11test(scene): cover real atlas lifecycle and geographic selectionyerbolberdalin1
- 2026-09-23 16:10Respect playback run identity when replaying scene effectsyerbolberdalin1
- 2026-09-23 16:10Render real Astana geography with landmark miniatures and map navigationyerbolberdalin1
- 2026-09-23 16:10Merge remote-tracking branch 'origin/codex/akim-25d-game' into codex/akim-worldyerbolberdalin1
- 2026-09-23 16:10Merge branch 'codex/akim-world-geometry-opt' into codex/akim-worldyerbolberdalin1
- 2026-09-23 16:07Prepare conservative Astana geometry render copiesyerbolberdalin1
- 2026-09-23 16:05Merge branch 'codex/akim-world-effects' into codex/akim-worldyerbolberdalin1
- 2026-09-23 16:05Merge branch 'codex/akim-world-actors' into codex/akim-worldyerbolberdalin1
- 2026-09-23 16:04Add sourced Astana road and municipal landscape geometryyerbolberdalin1
- 2026-09-23 16:04docs: retain collaborator raw-data provenance and final test statusBaizhigitov
- 2026-09-23 16:04Adapt sourced Astana geometry to a shared geographic sceneyerbolberdalin1
- 2026-09-23 16:04Merge remote-tracking branch 'origin/codex/akim-assets-qa' into codex/akim-assets-qaBaizhigitov
- 2026-09-23 16:03Add architectural miniatures for 17 Astana landmarksyerbolberdalin1
- 2026-09-23 16:03docs: recheck assets against latest session and resource servingBaizhigitov
- 2026-09-23 16:02feat: add user-provided raw geodata and generated OSM roads/intersectionsyerbolberdalin1
- 2026-09-23 16:00Merge remote-tracking branch 'origin/codex/akim-25d-game' into codex/akim-assets-qaBaizhigitov
- 2026-09-23 15:58docs: record Laptop 3 QA evidence and remaining owner dependenciesBaizhigitov
- 2026-09-23 15:58Fix scene lifecycle and navigation with browser regression checksyerbolberdalin1
- 2026-09-23 15:57Merge Laptop 1 shared-session and safe-serving foundationYerkebulan
- 2026-09-23 15:56feat: add reviewed asset manifest, sourced city context and geography QABaizhigitov
- 2026-09-23 15:55Merge branch 'codex/akim-world-effects' into codex/akim-worldyerbolberdalin1
- 2026-09-23 15:54feat: integrate shared game session and resilient calculator shellAbenovv
- 2026-09-23 15:54Test scene playback and DOM lifecycle regressionsyerbolberdalin1
- 2026-09-23 15:51Merge branch 'codex/akim-world-actors' into codex/akim-worldyerbolberdalin1
- 2026-09-23 15:50Respect optional exact movement segment guardyerbolberdalin1
- 2026-09-23 15:50feat: finalize world orchestrator implementation and reportyerbolberdalin1
- 2026-09-23 15:48Merge branch 'codex/akim-world-actors' into codex/akim-worldyerbolberdalin1
- 2026-09-23 15:48Merge branch 'codex/akim-world-effects' into codex/akim-worldyerbolberdalin1
- 2026-09-23 15:47Add deterministic scene effects and playback controlleryerbolberdalin1
- 2026-09-23 15:47Add deterministic capped city actors and mayor navigationyerbolberdalin1
- 2026-09-23 15:46Add shared world camera and multipolygon geometry helpersyerbolberdalin1
- 2026-09-23 15:44fix: guard stale replay completion tokensAbenovv
- 2026-09-23 15:44merge: integrate safe resource serving and capabilitiesAbenovv
- 2026-09-23 15:43Guard replay completion and fallback when presentation is unavailableAbenovv
- 2026-09-23 15:42feat: safely serve game resources and capability statusAbenovv
- 2026-09-23 15:40merge: integrate shared policy preview and presentationAbenovv
- 2026-09-23 15:40merge: integrate shared session and local personal bestAbenovv
- 2026-09-23 15:40docs: add data sources to READMEyerbolberdalin1
- 2026-09-23 15:39Add deterministic preview and presentation metadataAbenovv
- 2026-09-23 15:39Add shared game session and local best storageAbenovv
- 2026-09-23 15:34feat: publish game session and scene identity contractAbenovv
- 2026-09-23 15:33docs: establish shared Akim game baseline and team contractsAbenovv
- 2026-09-23 14:16chore: add project placeholderBaizhigitov
- 2026-09-23 14:09feat: build first Akim city simulatorAbenovv
- 2026-09-23 14:02docs: add initial project READMEyerbolberdalin1
- 2026-09-23 13:58chore: record repository activityAbenovv
Структура репозитория (726 файлов)
.env .env.example .gitattributes .gitignore README.md api/analyze.js api/capabilities.js api/leaderboard.js api/player.js api/runs.js api/services.js app.js assets/ASSET-MANIFEST.csv assets/CONTACT-SHEET.pdf assets/MISSING.md assets/PROMPTS.md assets/README-PACK.md assets/Saryarqa-asset-pack.zip assets/build_package.py assets/exports/characters/ASSET-MANIFEST.csv assets/exports/characters/citizen-01-sheet.png assets/exports/characters/citizen-01-still.png assets/exports/characters/citizen-02-sheet.png assets/exports/characters/citizen-02-still.png assets/exports/characters/citizen-03-sheet.png assets/exports/characters/citizen-03-still.png assets/exports/characters/emergency-sheet.png assets/exports/characters/emergency-still.png assets/exports/characters/maintenance-sheet.png assets/exports/characters/maintenance-still.png assets/exports/characters/mayor-sheet.png assets/exports/characters/mayor-still.png assets/exports/effects/better-transit.svg assets/exports/effects/citizen-calm.svg assets/exports/effects/citizen-cheer.svg assets/exports/effects/citizen-concerned.svg assets/exports/effects/cleaner-air.svg assets/exports/effects/clinic-access.svg assets/exports/effects/connection-path.svg assets/exports/effects/critical-warning.svg assets/exports/effects/effects.css assets/exports/effects/finish-higher.svg assets/exports/effects/finish-restrained.svg assets/exports/effects/greenery-improved.svg assets/exports/effects/negative-tradeoff.svg assets/exports/effects/placement-pulse.svg assets/exports/effects/positive-improvement.svg assets/exports/effects/safer-roads.svg assets/exports/effects/school-access.svg assets/exports/effects/utilities-improved.svg assets/exports/favicon/favicon-16.png assets/exports/favicon/favicon-192.png assets/exports/favicon/favicon-32.png assets/exports/favicon/favicon-512.png assets/exports/favicon/favicon-64.png assets/exports/favicon/favicon.svg assets/exports/icons/category-city-services.svg assets/exports/icons/category-ecology.svg assets/exports/icons/category-safety.svg assets/exports/icons/category-social-services.svg assets/exports/icons/category-transport.svg assets/exports/icons/hud-budget.svg assets/exports/icons/hud-compare.svg assets/exports/icons/hud-critical.svg assets/exports/icons/hud-info.svg assets/exports/icons/hud-locked.svg assets/exports/icons/hud-pause.svg assets/exports/icons/hud-play.svg assets/exports/icons/hud-quarter.svg assets/exports/icons/hud-score.svg assets/exports/icons/hud-selected.svg assets/exports/icons/hud-skip.svg assets/exports/icons/hud-sound-off.svg assets/exports/icons/hud-sound-on.svg assets/exports/icons/hud-synergy.svg assets/exports/icons/hud-turn.svg assets/exports/icons/hud-undo.svg assets/exports/icons/hud-warning.svg assets/exports/icons/indicator-B1-lighting.svg assets/exports/icons/indicator-B2-crossing.svg assets/exports/icons/indicator-C1-utilities.svg assets/exports/icons/indicator-C2-requests.svg assets/exports/icons/indicator-E1-greenery.svg assets/exports/icons/indicator-E2-air.svg assets/exports/icons/indicator-S1-education.svg assets/exports/icons/indicator-S2-health.svg assets/exports/icons/indicator-T1-traffic.svg assets/exports/icons/indicator-T2-transit.svg assets/exports/icons/logo-app.svg assets/exports/icons/map-bus.svg assets/exports/icons/map-citizen.svg assets/exports/icons/map-citywide.svg assets/exports/icons/map-district.svg assets/exports/icons/map-lrt.svg assets/exports/icons/map-road.svg assets/exports/icons/map-transport.svg assets/exports/policies/M01-M07/M01-tilted-object.svg assets/exports/policies/M01-M07/M01-ui-icon.svg assets/exports/policies/M01-M07/M01-world-marker.svg assets/exports/policies/M01-M07/M02-tilted-object.svg assets/exports/policies/M01-M07/M02-ui-icon.svg assets/exports/policies/M01-M07/M02-world-marker.svg assets/exports/policies/M01-M07/M03-tilted-object.svg assets/exports/policies/M01-M07/M03-ui-icon.svg assets/exports/policies/M01-M07/M03-world-marker.svg assets/exports/policies/M01-M07/M04-tilted-object.svg assets/exports/policies/M01-M07/M04-ui-icon.svg assets/exports/policies/M01-M07/M04-world-marker.svg assets/exports/policies/M01-M07/M05-tilted-object.svg assets/exports/policies/M01-M07/M05-ui-icon.svg assets/exports/policies/M01-M07/M05-world-marker.svg assets/exports/policies/M01-M07/M06-tilted-object.svg assets/exports/policies/M01-M07/M06-ui-icon.svg assets/exports/policies/M01-M07/M06-world-marker.svg assets/exports/policies/M01-M07/M07-tilted-object.svg assets/exports/policies/M01-M07/M07-ui-icon.svg assets/exports/policies/M01-M07/M07-world-marker.svg assets/exports/policies/M08-M14/M08-tilted-object.svg assets/exports/policies/M08-M14/M08-ui-icon.svg assets/exports/policies/M08-M14/M08-world-marker.svg assets/exports/policies/M08-M14/M09-tilted-object.svg assets/exports/policies/M08-M14/M09-ui-icon.svg assets/exports/policies/M08-M14/M09-world-marker.svg assets/exports/policies/M08-M14/M10-tilted-object.svg assets/exports/policies/M08-M14/M10-ui-icon.svg assets/exports/policies/M08-M14/M10-world-marker.svg assets/exports/policies/M08-M14/M11-tilted-object.svg assets/exports/policies/M08-M14/M11-ui-icon.svg assets/exports/policies/M08-M14/M11-world-marker.svg assets/exports/policies/M08-M14/M12-tilted-object.svg assets/exports/policies/M08-M14/M12-ui-icon.svg assets/exports/policies/M08-M14/M12-world-marker.svg assets/exports/policies/M08-M14/M13-tilted-object.svg assets/exports/policies/M08-M14/M13-ui-icon.svg assets/exports/policies/M08-M14/M13-world-marker.svg assets/exports/policies/M08-M14/M14-tilted-object.svg assets/exports/policies/M08-M14/M14-ui-icon.svg assets/exports/policies/M08-M14/M14-world-marker.svg assets/exports/style/palette.svg assets/exports/style/preview-style.png assets/exports/style/preview-style.svg assets/exports/style/scene-tilted.svg assets/exports/style/scene-top.svg assets/exports/units/vehicles/bus/atlas.png assets/exports/units/vehicles/bus/tilted/forward/frame-01.png assets/exports/units/vehicles/bus/top/down/frame-01.png assets/exports/units/vehicles/bus/top/left/frame-01.png assets/exports/units/vehicles/bus/top/right/frame-01.png assets/exports/units/vehicles/bus/top/up/frame-01.png assets/exports/units/vehicles/car/atlas.png assets/exports/units/vehicles/car/tilted/forward/frame-01.png assets/exports/units/vehicles/car/top/down/frame-01.png assets/exports/units/vehicles/car/top/left/frame-01.png assets/exports/units/vehicles/car/top/right/frame-01.png assets/exports/units/vehicles/car/top/up/frame-01.png assets/exports/units/vehicles/lrt/atlas.png assets/exports/units/vehicles/lrt/tilted/forward/frame-01.png assets/exports/units/vehicles/lrt/top/down/frame-01.png assets/exports/units/vehicles/lrt/top/left/frame-01.png assets/exports/units/vehicles/lrt/top/right/frame-01.png assets/exports/units/vehicles/lrt/top/up/frame-01.png assets/exports/units/vehicles/service-van/atlas.png assets/exports/units/vehicles/service-van/tilted/forward/frame-01.png assets/exports/units/vehicles/service-van/top/down/frame-01.png assets/exports/units/vehicles/service-van/top/left/frame-01.png assets/exports/units/vehicles/service-van/top/right/frame-01.png assets/exports/units/vehicles/service-van/top/up/frame-01.png assets/exports/world/bench-tilted.svg assets/exports/world/bench-top.svg assets/exports/world/bridge-tilted.svg assets/exports/world/bridge-top.svg assets/exports/world/buildings/apartment-block-tilted.svg assets/exports/world/buildings/apartment-block-top.svg assets/exports/world/buildings/bus-stop-tilted.svg assets/exports/world/buildings/bus-stop-top.svg assets/exports/world/buildings/clinic-tilted.svg assets/exports/world/buildings/clinic-top.svg assets/exports/world/buildings/lrt-station-track-tilted.svg assets/exports/world/buildings/lrt-station-track-top.svg assets/exports/world/buildings/office-civic-tilted.svg assets/exports/world/buildings/office-civic-top.svg assets/exports/world/buildings/residential-house-tilted.svg assets/exports/world/buildings/residential-house-top.svg assets/exports/world/buildings/school-kindergarten-tilted.svg assets/exports/world/buildings/school-kindergarten-top.svg assets/exports/world/buildings/sports-court-tilted.svg assets/exports/world/buildings/sports-court-top.svg assets/exports/world/buildings/utility-cue-tilted.svg assets/exports/world/buildings/utility-cue-top.svg assets/exports/world/bus-lane-tilted.svg assets/exports/world/bus-lane-top.svg assets/exports/world/crosswalk-tilted.svg assets/exports/world/crosswalk-top.svg assets/exports/world/ground-grass-tilted.svg assets/exports/world/ground-grass-top.svg assets/exports/world/ground-terrain-tilted.svg assets/exports/world/ground-terrain-top.svg assets/exports/world/park-tilted.svg assets/exports/world/park-top.svg assets/exports/world/paved-plaza-tilted.svg assets/exports/world/paved-plaza-top.svg assets/exports/world/river-edge-tilted.svg assets/exports/world/river-edge-top.svg assets/exports/world/river-water-tilted.svg assets/exports/world/river-water-top.svg assets/exports/world/road-corner-tilted.svg assets/exports/world/road-corner-top.svg assets/exports/world/road-intersection-tilted.svg assets/exports/world/road-intersection-top.svg assets/exports/world/road-straight-tilted.svg assets/exports/world/road-straight-top.svg assets/exports/world/shadow-canopy-tilted.svg assets/exports/world/shadow-canopy-top.svg assets/exports/world/shadow-furniture-tilted.svg assets/exports/world/shadow-furniture-top.svg assets/exports/world/shrub-01-tilted.svg assets/exports/world/shrub-01-top.svg assets/exports/world/shrub-02-tilted.svg assets/exports/world/shrub-02-top.svg assets/exports/world/sidewalk-tilted.svg assets/exports/world/sidewalk-top.svg assets/exports/world/streetlight-tilted.svg assets/exports/world/streetlight-top.svg assets/exports/world/tree-01-tilted.svg assets/exports/world/tree-01-top.svg assets/exports/world/tree-02-tilted.svg assets/exports/world/tree-02-top.svg assets/exports/world/tree-03-tilted.svg assets/exports/world/tree-03-top.svg assets/game/.gitattributes assets/game/CONTACT-SHEET.html assets/game/MISSING.md assets/game/README.md assets/game/SOURCES.md assets/game/contact-sheet-preview.png assets/game/contact-sheet.mjs assets/game/intake.json assets/game/manifest.json assets/game/measure-icons.svg assets/game/miniature-kit.svg assets/game/qa-baseline-1440.png assets/game/qa-baseline-320.png assets/game/qa-baseline.json assets/game/qa-defect-320.png assets/game/qa-integrated/browser-report.json assets/game/qa-integrated/resource-and-results.json assets/game/qa-integrated/results-320.png assets/game/qa-integrated/shell-1024.png assets/game/qa-integrated/shell-1440.png assets/game/qa-integrated/shell-320.png assets/game/qa-integrated/shell-375.png assets/game/qa-integrated/shell-430.png assets/game/qa-integrated/shell-768.png assets/game/qa-interactions.json assets/game/qa-sample-1024.png assets/game/qa-sample-1440.png assets/game/qa-sample-320.png assets/game/qa-sample-375.png assets/game/qa-sample-430.png assets/game/qa-sample-768.png assets/game/reviewed/category.ecology.svg assets/game/reviewed/category.safety.svg assets/game/reviewed/category.services.svg assets/game/reviewed/category.social.svg assets/game/reviewed/category.transport.svg assets/game/reviewed/ground-grass-tilted.svg assets/game/reviewed/ground-grass-top.svg assets/game/reviewed/indicator.B1.svg assets/game/reviewed/indicator.B2.svg assets/game/reviewed/indicator.C1.svg assets/game/reviewed/indicator.C2.svg assets/game/reviewed/indicator.E1.svg assets/game/reviewed/indicator.E2.svg assets/game/reviewed/indicator.S1.svg assets/game/reviewed/indicator.S2.svg assets/game/reviewed/indicator.T1.svg assets/game/reviewed/indicator.T2.svg assets/game/reviewed/road-straight-tilted.svg assets/game/reviewed/road-straight-top.svg assets/previews/agent-01-style-v2.png assets/previews/agent-01-style.png assets/previews/agent-02-map-reference.png assets/previews/agent-03-world.png assets/previews/agent-04-buildings-v2.png assets/previews/agent-04-buildings.png assets/previews/agent-05-characters.png assets/previews/agent-06-vehicles-v2.png assets/previews/agent-06-vehicles.png assets/previews/agent-07-policies-M01-M07-v2.png assets/previews/agent-07-policies-M01-M07.png assets/previews/agent-08-policies-M08-M14.png assets/previews/agent-09-hud-icons.png assets/previews/agent-10-effects.png assets/sources/characters/README.md assets/sources/characters/build_sprites.py assets/sources/characters/citizen-01-source.png assets/sources/characters/citizen-02-source.png assets/sources/characters/citizen-03-source.png assets/sources/characters/emergency-source.png assets/sources/characters/maintenance-source.png assets/sources/characters/mayor-source.png assets/sources/effects/ASSET-MANIFEST.csv assets/sources/effects/README.md assets/sources/effects/better-transit.svg assets/sources/effects/citizen-calm.svg assets/sources/effects/citizen-cheer.svg assets/sources/effects/citizen-concerned.svg assets/sources/effects/cleaner-air.svg assets/sources/effects/clinic-access.svg assets/sources/effects/connection-path.svg assets/sources/effects/critical-warning.svg assets/sources/effects/effects.css assets/sources/effects/finish-higher.svg assets/sources/effects/finish-restrained.svg assets/sources/effects/generate-effects.mjs assets/sources/effects/greenery-improved.svg assets/sources/effects/negative-tradeoff.svg assets/sources/effects/placement-pulse.svg assets/sources/effects/positive-improvement.svg assets/sources/effects/safer-roads.svg assets/sources/effects/school-access.svg assets/sources/effects/utilities-improved.svg assets/sources/icons/ASSET-MANIFEST.csv assets/sources/icons/build_favicon.cjs assets/sources/icons/build_icons.py assets/sources/icons/category-city-services.svg assets/sources/icons/category-ecology.svg assets/sources/icons/category-safety.svg assets/sources/icons/category-social-services.svg assets/sources/icons/category-transport.svg assets/sources/icons/hud-budget.svg assets/sources/icons/hud-compare.svg assets/sources/icons/hud-critical.svg assets/sources/icons/hud-info.svg assets/sources/icons/hud-locked.svg assets/sources/icons/hud-pause.svg assets/sources/icons/hud-play.svg assets/sources/icons/hud-quarter.svg assets/sources/icons/hud-score.svg assets/sources/icons/hud-selected.svg assets/sources/icons/hud-skip.svg assets/sources/icons/hud-sound-off.svg assets/sources/icons/hud-sound-on.svg assets/sources/icons/hud-synergy.svg assets/sources/icons/hud-turn.svg assets/sources/icons/hud-undo.svg assets/sources/icons/hud-warning.svg assets/sources/icons/indicator-B1-lighting.svg assets/sources/icons/indicator-B2-crossing.svg assets/sources/icons/indicator-C1-utilities.svg assets/sources/icons/indicator-C2-requests.svg assets/sources/icons/indicator-E1-greenery.svg assets/sources/icons/indicator-E2-air.svg assets/sources/icons/indicator-S1-education.svg assets/sources/icons/indicator-S2-health.svg assets/sources/icons/indicator-T1-traffic.svg assets/sources/icons/indicator-T2-transit.svg assets/sources/icons/logo-app.svg assets/sources/icons/map-bus.svg assets/sources/icons/map-citizen.svg assets/sources/icons/map-citywide.svg assets/sources/icons/map-district.svg assets/sources/icons/map-lrt.svg assets/sources/icons/map-road.svg assets/sources/icons/map-transport.svg assets/sources/map/MAP-REFERENCE.svg assets/sources/map/MISSING.md assets/sources/map/RESEARCH-REPORT.md assets/sources/policies/M01-M07/ASSET-MANIFEST.csv assets/sources/policies/M01-M07/M01-tilted-object.svg assets/sources/policies/M01-M07/M01-ui-icon.svg assets/sources/policies/M01-M07/M01-world-marker.svg assets/sources/policies/M01-M07/M02-tilted-object.svg assets/sources/policies/M01-M07/M02-ui-icon.svg assets/sources/policies/M01-M07/M02-world-marker.svg assets/sources/policies/M01-M07/M03-tilted-object.svg assets/sources/policies/M01-M07/M03-ui-icon.svg assets/sources/policies/M01-M07/M03-world-marker.svg assets/sources/policies/M01-M07/M04-tilted-object.svg assets/sources/policies/M01-M07/M04-ui-icon.svg assets/sources/policies/M01-M07/M04-world-marker.svg assets/sources/policies/M01-M07/M05-tilted-object.svg assets/sources/policies/M01-M07/M05-ui-icon.svg assets/sources/policies/M01-M07/M05-world-marker.svg assets/sources/policies/M01-M07/M06-tilted-object.svg assets/sources/policies/M01-M07/M06-ui-icon.svg assets/sources/policies/M01-M07/M06-world-marker.svg assets/sources/policies/M01-M07/M07-tilted-object.svg assets/sources/policies/M01-M07/M07-ui-icon.svg assets/sources/policies/M01-M07/M07-world-marker.svg assets/sources/policies/M08-M14/ASSET-MANIFEST.csv assets/sources/policies/M08-M14/M08-tilted-object.svg assets/sources/policies/M08-M14/M08-ui-icon.svg assets/sources/policies/M08-M14/M08-world-marker.svg assets/sources/policies/M08-M14/M09-tilted-object.svg assets/sources/policies/M08-M14/M09-ui-icon.svg assets/sources/policies/M08-M14/M09-world-marker.svg assets/sources/policies/M08-M14/M10-tilted-object.svg assets/sources/policies/M08-M14/M10-ui-icon.svg assets/sources/policies/M08-M14/M10-world-marker.svg assets/sources/policies/M08-M14/M11-tilted-object.svg assets/sources/policies/M08-M14/M11-ui-icon.svg assets/sources/policies/M08-M14/M11-world-marker.svg assets/sources/policies/M08-M14/M12-tilted-object.svg assets/sources/policies/M08-M14/M12-ui-icon.svg assets/sources/policies/M08-M14/M12-world-marker.svg assets/sources/policies/M08-M14/M13-tilted-object.svg assets/sources/policies/M08-M14/M13-ui-icon.svg assets/sources/policies/M08-M14/M13-world-marker.svg assets/sources/policies/M08-M14/M14-tilted-object.svg assets/sources/policies/M08-M14/M14-ui-icon.svg assets/sources/policies/M08-M14/M14-world-marker.svg assets/sources/policies/M08-M14/build_assets.py assets/sources/style/ASSET-MANIFEST.csv assets/sources/style/build-style.mjs assets/sources/style/palette.svg assets/sources/style/preview-style.svg assets/sources/style/scene-tilted.svg assets/sources/style/scene-top.svg assets/sources/style/style-system.md assets/sources/units/vehicles/ASSET-MANIFEST-vehicles.csv assets/sources/units/vehicles/README.md assets/sources/units/vehicles/build-vehicles.ps1 assets/sources/units/vehicles/bus-pair.png assets/sources/units/vehicles/car-pair.png assets/sources/units/vehicles/lrt-pair.png assets/sources/units/vehicles/service-van-pair.png assets/sources/world/ASSET-MANIFEST-world.csv assets/sources/world/bench-tilted.svg assets/sources/world/bench-top.svg assets/sources/world/bridge-tilted.svg assets/sources/world/bridge-top.svg assets/sources/world/build_world.py assets/sources/world/buildings/ASSET-MANIFEST-buildings.csv assets/sources/world/buildings/README.md assets/sources/world/buildings/apartment-block-tilted.svg assets/sources/world/buildings/apartment-block-top.svg assets/sources/world/buildings/build_buildings.py assets/sources/world/buildings/bus-stop-tilted.svg assets/sources/world/buildings/bus-stop-top.svg assets/sources/world/buildings/clinic-tilted.svg assets/sources/world/buildings/clinic-top.svg assets/sources/world/buildings/lrt-station-track-tilted.svg assets/sources/world/buildings/lrt-station-track-top.svg assets/sources/world/buildings/office-civic-tilted.svg assets/sources/world/buildings/office-civic-top.svg assets/sources/world/buildings/residential-house-tilted.svg assets/sources/world/buildings/residential-house-top.svg assets/sources/world/buildings/school-kindergarten-tilted.svg assets/sources/world/buildings/school-kindergarten-top.svg assets/sources/world/buildings/sports-court-tilted.svg assets/sources/world/buildings/sports-court-top.svg assets/sources/world/buildings/utility-cue-tilted.svg assets/sources/world/buildings/utility-cue-top.svg assets/sources/world/bus-lane-tilted.svg assets/sources/world/bus-lane-top.svg assets/sources/world/crosswalk-tilted.svg assets/sources/world/crosswalk-top.svg assets/sources/world/ground-grass-tilted.svg assets/sources/world/ground-grass-top.svg assets/sources/world/ground-terrain-tilted.svg assets/sources/world/ground-terrain-top.svg assets/sources/world/park-tilted.svg assets/sources/world/park-top.svg assets/sources/world/paved-plaza-tilted.svg assets/sources/world/paved-plaza-top.svg assets/sources/world/river-edge-tilted.svg assets/sources/world/river-edge-top.svg assets/sources/world/river-water-tilted.svg assets/sources/world/river-water-top.svg assets/sources/world/road-corner-tilted.svg assets/sources/world/road-corner-top.svg assets/sources/world/road-intersection-tilted.svg assets/sources/world/road-intersection-top.svg assets/sources/world/road-straight-tilted.svg assets/sources/world/road-straight-top.svg assets/sources/world/shadow-canopy-tilted.svg assets/sources/world/shadow-canopy-top.svg assets/sources/world/shadow-furniture-tilted.svg assets/sources/world/shadow-furniture-top.svg assets/sources/world/shrub-01-tilted.svg assets/sources/world/shrub-01-top.svg assets/sources/world/shrub-02-tilted.svg assets/sources/world/shrub-02-top.svg assets/sources/world/sidewalk-tilted.svg assets/sources/world/sidewalk-top.svg assets/sources/world/streetlight-tilted.svg assets/sources/world/streetlight-top.svg assets/sources/world/tree-01-tilted.svg assets/sources/world/tree-01-top.svg assets/sources/world/tree-02-tilted.svg assets/sources/world/tree-02-top.svg assets/sources/world/tree-03-tilted.svg assets/sources/world/tree-03-top.svg backend/analysis.js backend/env.js backend/http.js backend/local-storage.js backend/storage.js data/city/README.md data/city/context.json data/geography/.gitattributes data/geography/README.md data/geography/astana.json data/geography/export.mjs data/geography/review.png data/geography/review.svg data/geography/sources/esaulet-districts.esri.json data/geography/sources/esaulet-layer.json data/osm-research/almaty.json data/osm-research/analyze.py data/osm-research/baikonur.json data/osm-research/nura.json data/osm-research/saraishyk.json data/osm-research/saryarka.json data/osm-research/yesil.json data/raw/astana-ai.json data/raw/build_astana_osm.py data/raw/landmarks.geojson data/raw/parks.geojson data/raw/write_files.py docs/FUTURE-PLAN.md docs/GAME-DESIGN.md docs/INTEGRATIONS.md docs/REQUIREMENTS-AUDIT.md docs/design/DESIGN.md docs/design/design-contract.md docs/design/implementation-handoff.md docs/team/00-START-HERE.md docs/team/01-LEAD.md docs/team/02-WORLD.md docs/team/03-ASSETS-QA.md docs/team/04-CONTRACTS.md docs/team/05-GITHUB-WORKFLOW.md docs/team/06-ACCEPTANCE.md docs/team/07-ASSET-PACK.md docs/team/08-LEAD-CHECKPOINT.md docs/team/reports/assets-qa.md docs/team/reports/game-polish.md docs/team/reports/gameplay-fixes.md docs/team/reports/integration.md docs/team/reports/sync-current.md docs/team/reports/world.md game/account-ui.css game/account-ui.js game/advisor.css game/advisor.js game/art.js game/cloud-panel.js game/cloud.js game/contracts.js game/forecast.js game/presentation.js game/preview.js game/scene-adapter.js game/session.js game/storage.js index.html package.json scene/actors.js scene/atlas.css scene/atlas.js scene/building-tiles.js scene/buildings.js scene/camera.js scene/cities.js scene/city-buildings.js scene/cloud-panel.css scene/data/astana/BUILDING-COVERAGE.md scene/data/astana/GREENERY-COVERAGE.md scene/data/astana/INTEGRATION.md scene/data/astana/README.md scene/data/astana/SOURCES.md scene/data/astana/astana-ai.json scene/data/astana/build_astana_osm.py scene/data/astana/build_building_tiles.py scene/data/astana/build_geography.py scene/data/astana/build_osm_greenery.py scene/data/astana/build_osm_snapshot.py scene/data/astana/buildings-city-source.json scene/data/astana/buildings-manifest.json scene/data/astana/buildings-render.geojson scene/data/astana/buildings-source.json scene/data/astana/buildings-tiles/r0-c0.geojson scene/data/astana/buildings-tiles/r0-c1.geojson scene/data/astana/buildings-tiles/r0-c2.geojson scene/data/astana/buildings-tiles/r0-c3.geojson scene/data/astana/buildings-tiles/r1-c0.geojson scene/data/astana/buildings-tiles/r1-c1.geojson scene/data/astana/buildings-tiles/r1-c2.geojson scene/data/astana/buildings-tiles/r1-c3.geojson scene/data/astana/buildings-tiles/r2-c0.geojson scene/data/astana/buildings-tiles/r2-c1.geojson scene/data/astana/buildings-tiles/r2-c2.geojson scene/data/astana/buildings-tiles/r2-c3.geojson scene/data/astana/buildings-tiles/r3-c0.geojson scene/data/astana/buildings-tiles/r3-c1.geojson scene/data/astana/buildings-tiles/r3-c2.geojson scene/data/astana/buildings-tiles/r3-c3.geojson scene/data/astana/buildings.geojson scene/data/astana/districts-current-source.json scene/data/astana/districts-current.geojson scene/data/astana/districts-source.json scene/data/astana/districts.geojson scene/data/astana/green.geojson scene/data/astana/greenery-render.geojson scene/data/astana/greenery-source.json scene/data/astana/intersections.geojson scene/data/astana/landmark-osm-source/node-4894937300.osm scene/data/astana/landmark-osm-source/way-166198046.osm scene/data/astana/landmark-osm-source/way-230401645.osm scene/data/astana/landmark-osm-source/way-460703779.osm scene/data/astana/landmark-osm-source/way-917478479.osm scene/data/astana/landmark-positions.json scene/data/astana/landmarks.geojson scene/data/astana/landscape-render.geojson scene/data/astana/landscape.geojson scene/data/astana/major_roads.json scene/data/astana/osm-greenery-response.json scene/data/astana/osm-major-roads-response.json scene/data/astana/parks.geojson scene/data/astana/prepare_render.py scene/data/astana/requirements.txt scene/data/astana/roads-municipal-source.json scene/data/astana/roads-municipal.geojson scene/data/astana/roads.geojson scene/data/astana/stats.json scene/data/astana/traffic_corridors.csv scene/data/astana/traffic_corridors.json scene/data/astana/validate_building_coverage.py scene/data/astana/water-source.json scene/data/astana/water.geojson scene/data/cities/README.md scene/data/cities/almaty-buildings.geojson.gz scene/data/cities/almaty-landscape.geojson.gz scene/data/cities/almaty-roads.geojson.gz scene/data/cities/almaty-source.json scene/data/cities/astana-buildings.geojson.gz scene/data/cities/astana-landscape.geojson.gz scene/data/cities/astana-roads.geojson.gz scene/data/cities/astana-source.json scene/data/cities/shymkent-buildings.geojson.gz scene/data/cities/shymkent-landscape.geojson.gz scene/data/cities/shymkent-roads.geojson.gz scene/data/cities/shymkent-source.json scene/dev-fixture.html scene/dev-fixture.js scene/dev.html scene/dev.js scene/effects.js scene/fixtures/assets.js scene/fixtures/browser-checks.html scene/fixtures/browser-checks.js scene/fixtures/evidence/astana-botanical-greenery.png scene/fixtures/evidence/astana-greenery-mobile.png scene/fixtures/evidence/astana-landmark-models.png scene/fixtures/evidence/astana-real-mobile.png scene/fixtures/evidence/astana-real-nura.png scene/fixtures/evidence/astana-real-overview.png scene/fixtures/evidence/astana-station-buildings.png scene/fixtures/evidence/astana-station-mobile.png scene/fixtures/evidence/astana-station-top.png scene/fixtures/evidence/mobile-320.png scene/fixtures/evidence/nura-1440.png scene/fixtures/evidence/overview-1440.png scene/fixtures/geography.js scene/fixtures/snapshot.js scene/geodata.js scene/icons.js scene/index.js scene/landmarks.js scene/load-map.js scene/map-feedback.css scene/map-feedback.js scene/map-life.js scene/map-visual-state.js scene/play-panel.css scene/play-panel.js scene/spatial-index.js scene/styles.css scene/vegetation.js scene/walk-controls.css scene/walk-controls.js scene/world.js server.js simulator.js styles.css supabase/migrations/202609230001_akim_rankings.sql tests/accounts.test.js tests/analyze.test.js tests/art.test.js tests/assets.test.js tests/backend-env.test.js tests/backend.test.js tests/browser-smoke.mjs tests/city-data.test.js tests/city-maps.test.js tests/cloud.test.js tests/fixtures/building-tiles.js tests/forecast.test.js tests/integration-browser.mjs tests/map-feedback.test.js tests/map-life.test.js tests/map-visual-state.test.js tests/presentation.test.js tests/preview.test.js tests/scene-actors.test.js tests/scene-adapter.test.js tests/scene-atlas.test.js tests/scene-browser.mjs tests/scene-building-tiles.test.js tests/scene-buildings.test.js tests/scene-camera.test.js tests/scene-effects.test.js tests/scene-geodata.test.js tests/scene-load-map.test.js tests/scene-vegetation.test.js tests/scene-walk-controls.test.js tests/server.test.js tests/session.test.js tests/simulator.test.js tests/storage.test.js tests/sync-browser.mjs tools/check-assets.mjs tools/fetch-city-maps.mjs проект/.gitkeep
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.