AAYMA
RU
Войти

Saryarqa City Simulator

Браузерный симулятор акима Астаны: игрок выбирает пять мер на бюджет 100 единиц по пяти направлениям и районам, видит последствия на SVG-карте с…

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

О проекте

Команда: 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 зависит от серверной настройки; при ошибке доступен явно обозначенный локальный помощник по фактам расчёта.
  • Черновик: выбранные решения, предпочтения вида и личный рекорд сохраняются в этом браузере. После изменения плана старый результат сбрасывается.

Интерфейс на русском. Сарайшық присутствует на карте как справочный район, но не входит в расчётный набор из пяти районов. Прогулка, транспорт и жители иллюстрируют город и не меняют балл.

Сценарий для демонстрации

  1. Откройте приложение. Исходный индекс — 52,56.
  2. Нажмите «Пример из кейса»: M7 → Нура, M8 → Нура, M10 → Нура, M12 → весь город, M5 → Сарыарка.
  3. Проверьте бюджет: 95 / 100. Нажмите «Показать прогноз». В режиме игры можно пропустить анимацию кнопкой «К прогнозу».
  4. Результат: 56,54; точное значение 56.54307; критических показателей — 0.
  5. Откройте советника, задайте вопрос о бюджете или слабейшем районе. Источник ответа обозначен в интерфейсе.
  6. Войдите в профиль, сохраните результат и проверьте историю и рейтинг. Повторное сохранение того же плана не создаёт дубликат.
  7. Измените план и рассчитайте его заново. Для недопустимого набора выводятся причины, балл не присваивается.

Для прогулки нажмите «Гулять по Нуре» на карте. Используйте 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_URLURL своего проекта 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.jsSupabase и локальное серверное хранилище
scene/SVG-карта, проекции, слои, аким, транспорт и воспроизведение
game/art.js, assets/exports/Реестр и готовые художественные ресурсы
server.jsHTTP-сервер с разрешёнными публичными путями и ограничением тела 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 не заявлен.

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

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

yerbolberdalin1 46Abenovv 36Baizhigitov 13

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

  • 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
Ветки (8)

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

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

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