AAYMA
RU
Войти

АКИМ — AI-симулятор управления Астаной

Игровой симулятор на 3D-карте Астаны (OpenStreetMap, 42 311 зданий): игрок выбирает 5 мер из 14 в 5 направлениях при бюджете 100 и подписывает план.

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

О проекте

Команда: Bolme
Кейс HackAlem.ai: Спецтрек — Astana Innovations
Стадия: Доведённый продукт

Задача кейса: «Аким на 5 часов»: городской симулятор, распределяющий бюджет по 5 направлениям и 5 районам

Суть

Игровой симулятор на 3D-карте Астаны (OpenStreetMap, 42 311 зданий): игрок выбирает 5 мер из 14 в 5 направлениях при бюджете 100 и подписывает план. Затем идёт облёт «Прошло 2 года», итоговый AI-анализ, реакция жителей в соцсетях и сравнение с оптимальным планом.

Как устроено

Датасет кейса перенесён 1:1 в data.ts. Движок engine.ts считает Astana QoL Score по формуле кейса и проверяет правила: бюджет, 5 решений, лимит направления, конфликты. Exhaustive solver перебирает 694 395 допустимых планов: даёт ранг плана, долю реализованного потенциала, вклад каждой меры по Шепли и одиночные замены «как улучшить». /api/analyze пересчитывает план на сервере и вызывает OpenAI Responses API со Structured Outputs только по фактам движка; без ключа выводится детерминированный офлайн-отчёт. 3D-сцена на three.js собрана из OSM-пайплайна, с транспортом на графе дорог, ЧС и seeded-лентой соцсети.

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

  • exhaustive solver (694 395 планов)
  • значения Шепли
  • OpenAI Responses API + Structured Outputs
  • OSM-пайплайн 3D-города
  • seeded детерминированная социальная лента
  • режим живого прогноза Score

Метрики

Эталонный план: Score 56,54 (+3,99 к базе 52,56), критических показателей 2 → 0, лучше 99,9% из 694 395 планов, реализовано 85,2% возможного прироста

Особенности

Полный перебор пространства решений даёт ранг плана, «призрак оптимума» на карте и вклад мер по Шепли. Независимая сверка движка с документом кейса (npm run sim:verify). Кинематографичная 3D-карта реального города, обучение из 14 шагов, «ловушка M11» для демонстрации компромиссов. Лог использования Codex приложен.

Стек

Next.js 16 · TypeScript · React · three.js · OpenStreetMap · Vercel

Модели

OpenAI GPT (Responses API) · Codex


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

README

README.md

АКИМ — AI-симулятор управления Астаной

HackAlem AI · кейс «Аким на 5 часов» · команда Bolme: Сабыржан и Али Назар

Вы — аким Астаны. У вас два года, бюджет 100 единиц и ровно пять решений. Вы выбираете меры на настоящей 3D-карте города (OpenStreetMap, 42 311 зданий) и подписываете бюджет. Затем видите, как изменились районы.

Точный движок считает Astana Quality of Life Score по формуле кейса. AI-аналитик объясняет сильные стороны, риски, последствия и компромиссы, но ни одного числа не придумывает: все цифры он берёт из расчёта движка.

Главный экран после подписи бюджета: слева «Бюджет города» и выбранные решения с иконками, справа «События» и Score 56,54, на 3D-карте Астаны пульсируют кольца районов

Демо и доступ для жюри

Демоhttps://hackalem.vercel.app
Логинreviewer
ПарольAkim-Astana-2026
БраузерChrome, Edge или Safari с WebGL 2, экран от 1280 px

Демо открывается со страницы входа для жюри. После входа начинается интро и обучение. Локально (npm run dev) страницы входа нет, приложение открывается сразу.

Навигация: Проверка за 3 минуты · Возможности · Соответствие кейсу · Код и AI · Моды · Дизайн · Архитектура · Эталонные расчёты · Запуск · Деплой · Codex · Развитие

Проверка за 3 минуты

  1. Откройте демо и войдите: reviewer / Akim-Astana-2026.

  2. Интро. За карточкой «Вы — аким Астаны» камера облетает город. Нажмите «Показать, как всё устроено».

  3. Обучение из 14 шагов подсвечивает каждую часть интерфейса:

    • красное кольцо Нуры;
    • «События» и колокольчик, который сворачивает правую панель;
    • Score;
    • район, бюджет, режимы, каталог мер, моды;
    • подпись бюджета и режимы камеры.

    Пройти его снова можно кнопкой «Как играть» справа вверху.

  4. Нажмите на метку Нура → «Смотреть в 3D» и добавьте меры прямо из карточки района. Или слева: «Быстрый старт → Пример из кейса». Затем «Подписать бюджет и прожить 2 года».

  5. Облёт «Прошло 2 года». Камера пролетает над районами, где изменения сильнее всего. У каждого района подпись с баллом «до → после».

  6. Итоговый анализ. Ожидаемо:

    • звание «Сильный аким»;
    • потрачено 95 / 100;
    • Score 56,54 (+3,99 к базе 52,56);
    • критических показателей 2 → 0;
    • план лучше 99,9% из 694 395 допустимых планов, реализовано 85,2% возможного прироста.
  7. «Ловушка M11». Нажмите «Новый план» → «Ловушка M11» и подпишите. Безопасные переходы в Алматы опускают «Дороги» с 40 до 38,25, появляется новый провал. Score 52,42 оказывается ниже, чем если ничего не делать.

AI-анализ работает и без ключа OpenAI: показывается детерминированный отчёт движка с пометкой «офлайн-отчёт». С ключом отчёт пишет GPT по тем же фактам.

Возможности

Интро и обучение

Интро поверх облётаОбучение со спотлайтом
Карточка «Вы — аким Астаны»: 100 единиц бюджета, 5 решений из 14, 8 кварталов; за ней кинематографичный облёт городаШаг обучения: затемнённый экран, подсвеченная метка Нуры и карточка с объяснением, почему район горит красным
  • Интро. Первый экран объясняет правила, пока за стеклянной карточкой идёт облёт Астаны по ориентирам.
  • Обучение. 14 шагов. Экран затемняется, нужный элемент подсвечивается рамкой, рядом карточка с объяснением. Управление: «Далее», «Назад», стрелки, Esc.
  • «Как играть» в правом верхнем углу запускает обучение заново.

Карта и события

  • Кольца-«камни в воде». Кольцо пульсирует над каждым районом:

    • красное — показатель ниже критической черты 40 (в Нуре: школы 38 и медпомощь 35);
    • оранжевое — слабые места без провала;
    • после подписи — зелёное там, где стало заметно лучше.

    На карте под кольцом только короткая метка с названием района, у ЧС — значок молнии, поэтому подписи не перекрывают друг друга. Клик по метке открывает карточку с деталями и кнопкой «Смотреть в 3D».

  • Карточка «События». Что требует внимания: провалы ниже 40 по районам и ЧС за два года. У ЧС есть оценка тяжести: «Высокий», «Средний» или «Умеренный». Тяжесть считается из суммарной потери показателей. После подписи карточка показывает, как вы отреагировали на каждую ЧС. Клик по событию наводит на него камеру.

  • Колокольчик «События» справа вверху сворачивает правую панель, чтобы видеть город целиком. События продолжают прилетать в него: счётчик показывает, сколько их, и краснеет, если есть срочные.

  • Режимы камеры: M — карта сверху, 3 — объёмный 3D-вид, F — полёт (WASD, E/Space выше, Q/C ниже, Shift быстрее), T — кинематографичный облёт. Esc возвращает к карте.

Решения прямо в 3D

3D-вид района Нура: карточка слева показывает слабые места района и меры, которые их закрывают, с кнопкой «В план»; школа из плана уже стоит на карте

  • Карточка района в 3D. Клик по метке района → «Смотреть в 3D». Камера подлетает к району, а карточка показывает:

    • слабые места района (ниже 50, провалы ниже 40 — красным);
    • ЧС, которая ждёт район;
    • до пяти мер, которые закрывают эти места или смягчают ЧС, с ценой, затронутыми показателями и кнопкой «В план».

    Недоступные меры уходят вниз с причиной: превышение бюджета, конфликт, лимит направления. Здание меры сразу появляется на карте. Когда набрано 5 решений, бюджет можно подписать прямо из карточки.

  • ЧС в 3D после подписи. Клик по значку молнии → «Смотреть в 3D» → выбор реакции: «Не вмешиваться», временные меры или полная ликвидация. Реакция оплачивается из резерва — неподписанного остатка бюджета. Score с учётом ЧС пересчитывается сразу.

План акима

  • Бюджет города: потрачено из 100, остаток и число выбранных решений из 5.

  • Выбранные решения: у каждой меры код, иконка, район, квартал начала работы и стоимость.

  • 14 мер в 5 направлениях: транспорт, экология, социальная сфера, безопасность, городской сервис. На карточке меры:

    • цена;
    • с какого квартала мера заработает;
    • какие показатели поднимет ↑ или опустит ↓;
    • синергии ⚡ и конфликты ⛔.

    Районную меру назначают в выбранный район, городская действует сразу на все пять.

  • Проверка правил. Карточку, нарушающую правила, система не примет и объяснит причину: превышение бюджета, шестое решение, повтор, третья мера одного направления или несовместимость.

  • «Аким» и «Аналитик». В режиме «Аким» (по умолчанию) результат скрыт до подписи, как у настоящего акима. «Аналитик» включает живой прогноз: Score плана пересчитывается под бюджетом при каждом клике, на каждой карточке виден прирост «+X к Score, если добавить сейчас», у выбранных решений — их вклад, а кольца на карте меняют цвет по прогнозу.

  • Район под микроскопом: десять показателей района, критическая черта 40 и шкала недовольства жителей.

После подписи

Облёт «Прошло 2 года»Итоговый анализ
Камера над районом Нура: построенные меры, балл района 49,2 → 53,0, школы 38 → 48,0, медпомощь 35 → 43,8, критический провал устранёнЭкран «Итоговый анализ»: звание «Сильный аким», Score 56,54, ключевые показатели, вывод AI-аналитика и реакция жителей в соцсетях
  • Облёт «Прошло 2 года». Камера пролетает до четырёх районов, где прирост больше всего. Подписи считает движок:

    • какие меры построены;
    • балл района «до → после»;
    • главные изменения показателей;
    • устранённые провалы.

    Облёт можно пропустить или повторить.

  • Итоговый анализ на весь экран:

    • звание акима по доле реализованного потенциала: от «Аким-стажёр» до «Легендарный аким»;
    • Score, эффективность на 10 единиц бюджета, критические показатели, слабейший район;
    • вывод AI: сильные стороны, риски, последствия для жителей, компромиссы, рекомендации;
    • куда ушли деньги по направлениям;
    • как поступил бы лучший аким.
  • Реакция в соцсетях. Вымышленные жители пишут о ваших мерах, обещаниях и ЧС. Кто пишет, шанс одобрения, лайки и дизлайки считает код. Результат детерминирован: seed берётся из плана, поэтому один и тот же план даёт одну и ту же ленту.

  • Место среди всех планов: доля реализованного потенциала, ранг среди 694 395 допустимых планов, районы до и после, точный вклад каждой меры по Шепли.

  • «Как улучшить». Проверенные движком одиночные замены с приростом Score. Каждую можно применить одной кнопкой.

  • «Призрак оптимума» показывает на карте лучший из 694 395 планов.

  • Бриф для презентации собирает решение на одну страницу для печати или PDF.

Соответствие кейсу

Must have

Требование кейсаРеализация
Единый виртуальный бюджет100 единиц; датасет кейса перенесён 1:1 в src/domain/data.ts
Решения по 5 направлениям14 мер в пяти направлениях, ровно 5 решений, выбор района для районных мер
Автоматический контроль бюджетаКарточка сверх бюджета блокируется с причиной; сервер /api/analyze пересчитывает план и отклоняет недопустимый
AI-анализ решений/api/analyze: OpenAI Responses API + Structured Outputs по фактам движка (route.ts)
Итоговый Astana QoL ScoreТочная формула в src/domain/engine.ts
Сильные стороны, риски, последствияЭкран «Итоговый анализ»: звание акима, ключевые показатели, вывод AI (сильные стороны, риски, последствия для жителей, компромиссы, рекомендации), сравнение с лучшим планом

Опционально

Опция кейсаРеализация
Визуализация изменений районов3D-карта: здания мер, кольца с баллом «до → после», облёт «Прошло 2 года», таблица районов и показателей
AI-рекомендации по улучшениюДвижок перебирает все одиночные замены и переносы; AI объясняет только проверенные варианты. Плюс «призрак» глобального оптимума
Неожиданные городские событияМод «ЧС»: паводок, порыв теплотрассы, смог. Реагирование оплачивается из остатка бюджета
Краткая презентация решения«Бриф для презентации» → печать / PDF
Сравнение нескольких командНе реализовано, в планах развития

Независимая сверка с документом кейса

npm run sim:verify (scripts/sim/verify-case.ts) читает таблицы прямо из документа кейса, а не из кода.

  • Сверяет с data.ts все 127 чисел: 50 исходных значений, доли населения, веса, стоимость, лаги и эффекты 14 мер, синергии, несовместимости.
  • Реализует правила 1–8 и формулу заново, по тексту документа, и прогоняет эталон и движок на всех 1 407 054 планах: все сочетания пяти мер во всех районах, допустимые и недопустимые.
  • Результат: одинаковые решения «допустим / не допустим», одинаковые причины отказа, расхождение Score = 0.
  • Проверку проверили на ошибках: неверный лаг M7 и синергия, умноженная на лаг, обе ловятся.

Критерии проверки → автоматические тесты

42 теста, запуск npm test. Критерии кейса проверяются в src/domain/engine.test.ts, лента соцсетей — в src/domain/social.test.ts.

Критерий кейсаТест
Все начинают с одинакового бюджета и данныхA1 same budget and data: бюджет 100, базовый Score 52.55768, баллы всех районов по таблице
Нельзя превысить бюджетA2 budget cannot be exceeded: план > 100 получает ok:false, код BUDGET, Score нет; карточка сверх бюджета блокируется
Решения влияют на показателиA3 decisions change indicators: районный и городской охват, лаг, синергия, клиппинг, порог ровно 40, отрицательный эффект M11
AI объясняет результат и компромиссыОтчёт строится только из фактов движка; пункты с числами вне расчёта отбрасываются (report.ts); офлайн-отчёт при сбое
Другие решения → другой ScoreA5 changing decisions changes the Score: пример кейса 56.54307 против оптимума 57.236735

Что считает код и что делает AI

Код (детерминированно)AI (GPT через OpenAI Responses API)
Валидация плана, бюджет, лаги (8−L)/8, синергии, клиппинг, D районов, ScoreОбъясняет, почему Score изменился, простым языком для управленца
Полный перебор 694 395 допустимых планов: максимум, ранг, доля потенциалаФормулирует сильные стороны, риски, последствия и компромиссы
Точный вклад мер по Шепли (32 подмножества, сумма = прирост)Выбирает, какие рассчитанные факты важны для вывода
Лучшие одиночные замены планаРекомендует только из проверенных движком замен
Моды: ЧС, недовольство, обещания; лента соцсетей: авторы, шансы, реакцииУпоминает нарушенные обещания и реакцию на ЧС; переписывает тексты постов живым языком

Защита от выдуманных чисел.

  • Сервер пересчитывает план и собирает реестр фактов с id.
  • Модель пишет числа только плейсхолдерами ({{score}}, {{nura_S1_after}}), формат ответа задаёт строгая JSON-схема.
  • Код подставляет значения из реестра.
  • Пункт с неизвестным id или с «сырым» числом вне реестра отбрасывается.
  • В постах соцсетей (/api/reactions) GPT меняет только текст. Если в тексте появилась цифра, которой нет среди фактов поста, остаётся шаблонный текст движка.
  • Без ключа, при ошибке или таймауте показывается отчёт, собранный кодом из тех же фактов.

Моды города

Моды включаются справа до подписи бюджета. Официальный Score они не меняют: у них отдельный, явно подписанный результат. Коэффициенты модов — игровые допущения команды, а не прогноз для Астаны. События одинаковы для всех игроков.

  • ЧС. Три события за два года:

    • паводок на Нуре (весна, 2-й квартал);
    • порыв теплотрассы в Алматы (зима, 5-й квартал);
    • смог над Сарыаркой (зима, 5-й квартал).

    Реагировать можно из остатка бюджета, поэтому неиспользованный резерв становится страховкой. Выбранные меры смягчают удар: M13 в районе, M14 по городу, M5 и M6 против смога. Итог — «Score с учётом ЧС» (игровой, не официальный).

  • Шкала недовольства (0–100 по району). Растёт от критических показателей, отставания от города, брошенных ЧС и нарушенных обещаний. Падает, когда проблемы устранены и жизнь заметно улучшилась.

  • Память народа. До подписи вы даёте до трёх публичных обещаний, например «Выведу школы Нуры из критической зоны». После подписи код проверяет каждое обещание по показателям. Нарушенное обещание злит район, и AI-анализ его припоминает.

  • Реакция в соцсетях на экране итогового анализа:

    • код (src/domain/social.ts) решает, кто пишет и о чём;
    • шанс одобрения зависит от результата района, недовольства, обещаний и реакции на ЧС;
    • исход — «бросок» с фиксированным seed от плана;
    • лайки и дизлайки тоже считает код, а GPT только переписывает текст.

Дизайн

  • Настоящая Астана 1:1. 42 311 зданий, дороги, река, парки и ориентиры из OpenStreetMap. Байтерек, Хан Шатыр, Ак Орда, Нур Алем и другие смоделированы по реальным контурам. По дорожному графу ездят машины, автобусы и поезда ЛРТ.

  • «Тёплый атлас». Светлые полупрозрачные панели поверх карты, кнопки-пилюли, линейные иконки у мер и событий.

    БумагаКарточкаЧернилаОлива
    #F3F0E8#FFFDF8#292B26#576349
  • Цвет несёт смысл:

    • красный — провал ниже 40;
    • оранжевый — слабое место;
    • зелёный — улучшение;
    • оливковый — действие.
  • Шрифты: Unbounded для заголовков и цифр, Onest для текста.

Архитектура

flowchart LR
    subgraph Browser[Браузер: Next.js + React Three Fiber]
        MAP[3D-город OSM<br/>src/scene, src/city]
        UI[Панели, интро, обучение<br/>src/ui]
        SIM[Состояние игры, мост к сцене<br/>src/sim]
        ENG[Движок, перебор, Шепли, моды, соцсети<br/>src/domain]
    end
    API["/api/analyze, /api/reactions<br/>пересчёт + реестр фактов"]
    GPT[OpenAI Responses API<br/>Structured Outputs]
    UI --> SIM --> ENG
    SIM -->|кольца-события, здания мер, облёт| MAP
    UI -->|план + моды| API
    API --> ENG
    API -->|факты с id| GPT
    GPT -->|текст с плейсхолдерами| API
    API -->|проверенный отчёт| UI
ПутьНазначение
src/domain/Чистый TypeScript без React: датасет, типы, engine.ts (валидация и формула), solver.ts (перебор, замены, Шепли), rank.ts, mods.ts, social.ts, тесты
src/domain/generated/solver.jsonРезультат npm run sim:solve: оптимумы, Парето-фронт, гистограмма 694 395 планов
src/sim/Состояние игры (zustand), факты и офлайн-отчёт, мост «движок → кольца на карте», 3D-слой мер
src/ui/sim/Панели: бюджет и выбранные решения, каталог, «События», район и моды, результат, облёт, итоговый анализ, соцсети, бриф
src/ui/onboarding/Интро поверх облёта и обучение со спотлайтом; шаги — в steps.ts
src/app/api/analyze — AI-анализ с проверкой фактов; reactions — тексты постов соцсетей
src/scene/, src/city/, scripts/city/3D-Астана 1:1 из OpenStreetMap: камера «карта / 3D / полёт / облёт», ориентиры, районы, транспорт. Подробно — гайд сцены

Сцена и симулятор связаны только через стор src/city/store.ts. Симулятор выставляет кольца-события по районам, ведёт камеру в облёте и подключает свой 3D-слой одной строкой в CityCanvas.tsx.

Эталонные расчёты

Все значения проверяются в npm test и совпадают с кейсом.

СценарийСтоимостьКритическихScore
Без решений (база)0252.55768
Пример из кейса: M7, M8, M10 в Нуре + M12 + M5 в Сарыарке95056.54307
Глобальный оптимум: M2 + M3, M8, M9 в Нуре + M1498057.236735
Ловушка: M9, M10, M4 в Байконуре + M11 в Алматы + M1261352.42382
Та же ловушка, M11 перенесена в Байконур61253.36453
Строгое прочтение «одна мера на направление», оптимум93056.34451
I′ = clip(I + Σ эффект × (8 − L) / 8 + синергия, 0, 100)
D  = Σ w_k × I′_k                 (веса показателей, сумма 1)
Score = 0.7 × Σ pop_d × D_d + 0.3 × min(D) − 1 × (число пар «район × показатель» < 40)

Интерпретации правил.

  • «Не более двух мер одного направления» — по детальным правилам кейса. В его же примере нет транспортной меры. Строгий вариант поддерживает движок (strictDirections), его оптимум указан в таблице.
  • Промежуточного округления нет.
  • Порядок решений не влияет на результат.
  • Неполный или недопустимый план итогового Score не получает.

Локальный запуск

Нужны Node.js 20+ и npm.

git clone https://github.com/BAITC-Hacks/hack-614786e3-bolme.git
cd hack-614786e3-bolme
npm ci
cp .env.example .env.local   # ключ OpenAI необязателен
npm run dev                  # http://localhost:3000
npm test                     # 42 теста: критерии кейса A1–A5, эталоны, правила, полный перебор, соцсети
npm run sim:verify           # сверка с документом кейса: 127 чисел датасета, 1 407 054 плана против эталона
npm run typecheck && npm run lint
npm run sim:solve            # пересчитать src/domain/generated/solver.json (~5 с)
npm run build && npm start   # production-сборка
ПеременнаяНазначение
OPENAI_API_KEYКлюч OpenAI для живого AI-анализа и текстов соцсетей. Без него работает офлайн-отчёт движка
OPENAI_MODELМодель, по умолчанию gpt-6-luna
REVIEWER_LOGIN, REVIEWER_PASSWORDЛогин и пароль страницы входа. Вход включается, только когда заданы обе переменные; без них приложение открывается сразу

Полезное:

  • ?nointro в адресе пропускает интро;
  • ?debug показывает FPS и статистику сцены.

Деплой

Демо развёрнуто на Vercel: https://hackalem.vercel.app.

vercel --prod

В настройках проекта Vercel заданы REVIEWER_LOGIN и REVIEWER_PASSWORD: так включается страница входа для жюри. OPENAI_API_KEY и OPENAI_MODEL можно добавить там же. Без ключа AI-анализ показывает офлайн-отчёт движка.

Страница входа для жюри в стиле «тёплого атласа»

Codex в разработке

Codex (OpenAI) использовался на всех этапах:

  • четыре независимых анализа кейса: жюри, реализм, геймдизайн, архитектура;
  • реализация движка, перебора и тестов по контракту src/domain/types.ts;
  • лента соцсетей и её тесты.

Журнал с id сессий: docs/codex-log.md. Исходные ответы Codex: docs/research/akim-analysis/codex/.

Ограничения и развитие

Ограничения.

  • Показатели синтетические, из кейса. Симулятор не прогнозирует фактическое развитие Астаны.
  • Геометрия города реальная (OSM), но игровые районы — это пять районов кейса. В Астане с 2024 года шесть районов (добавлен Сарайшык).
  • Модель кейса не зависит от порядка решений. Соседние районы влияют друг на друга только через городские меры и общий балл.

Развитие (спроектировано в анализе).

  1. Сравнение команд — ссылка-вызов с планом и дуэль планов с AI-комментатором.
  2. Мод «Подрядчики» — госзакупки: задержки, удорожание, контроль исполнения.
  3. Мод «Последствия»:
    • перетоки между соседними районами через Есиль;
    • строительный шум и помехи во время лага;
    • эксплуатационные расходы на 3–5-й годы.
  4. Публичные слушания. Житель самого слабого района оспаривает план, AI проверяет возражения инструментами движка; голос через TTS.
  5. Реальные данные и 6 районов — открытые данные Астаны вместо синтетики.

Документация

Команда Bolme

Сабыржан3D-город Астаны из OpenStreetMap, камера и облёт, интерфейс, интро и обучение, деплой
Али НазарДвижок и формула кейса, полный перебор, AI-анализ, моды, облёт «Прошло 2 года», итоговый анализ, соцсети

Карта: © OpenStreetMap contributors, ODbL.

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

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

Sabyrzhan 16Alinazavrr 12

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

  • 2026-09-23 17:49feat(sim): staged game — world settings and promises before the planAlinazavrr
  • 2026-09-23 17:29feat(sim): make decisions from the 3D viewSabyrzhan
  • 2026-09-23 17:22docs: document sim:verify and log the Codex compliance auditAlinazavrr
  • 2026-09-23 17:22test: independent verification against the case document (npm run sim:verify)Alinazavrr
  • 2026-09-23 17:22fix(sim): close the gaps found by the Codex compliance auditAlinazavrr
  • 2026-09-23 17:22feat(sim): make analyst mode useful — live Score forecast and per-measure gainsSabyrzhan
  • 2026-09-23 17:17feat: reviewer login, calmer map and HUD, Vercel deploy, README in RussianSabyrzhan
  • 2026-09-23 17:01feat(ui): intro over the flyover, spotlight walkthrough and warm light-glass HUDSabyrzhan
Все коммиты (28)
  • 2026-09-23 16:52docs: document reveal, final analysis and social feed; log Codex sessionAlinazavrr
  • 2026-09-23 16:52feat(domain): seeded social-network reactions to a signed planAlinazavrr
  • 2026-09-23 16:52feat(sim): cinematic reveal, final analysis screen and social feedAlinazavrr
  • 2026-09-23 16:37docs: rewrite README around the working simulator and log Codex usageAlinazavrr
  • 2026-09-23 16:37docs: add case analysis, Codex research sessions and simulator specAlinazavrr
  • 2026-09-23 16:37feat(domain): exact scoring engine, exhaustive solver and case testsAlinazavrr
  • 2026-09-23 16:37feat(sim): playable simulator on the 3D city with grounded AI analysisAlinazavrr
  • 2026-09-23 16:35feat: add colour accents for glass towers, schools, clinics and tracksSabyrzhan
  • 2026-09-23 16:35feat: model Northern Lights towers and Astana ArenaSabyrzhan
  • 2026-09-23 16:35feat: add cars, buses and LRT trains on the real road graphSabyrzhan
  • 2026-09-23 16:35feat: keep hotspot rings readable on the city overviewSabyrzhan
  • 2026-09-23 16:08docs: refresh scene guide status; improve tour caption contrastSabyrzhan
  • 2026-09-23 16:08feat: keep roads and rails readable on the zoomed-out mapSabyrzhan
  • 2026-09-23 16:05fix: make sun shadows visible and quiet distant markers in 3DSabyrzhan
  • 2026-09-23 15:59feat: render Astana 1:1 3D map with camera modes and hotspotsSabyrzhan
  • 2026-09-23 15:59docs: add city scene integration guide and planning docsSabyrzhan
  • 2026-09-23 15:59chore: scaffold Next.js 16 app with three.js stackSabyrzhan
  • 2026-09-23 15:59feat: add OpenStreetMap pipeline for Astana city dataSabyrzhan
  • 2026-09-23 14:58docs: add case brief and consolidated simulator data and rulesAlinazavrr
  • 2026-09-23 12:29docs: add preliminary creative industries researchSabyrzhan
Структура репозитория (174 файлов)
.env.example
.gitignore
.vercelignore
AGENTS.md
CLAUDE.md
README.md
docs/case/HackAlem AI_ «Аким на 5 часов» - AI-симулятор управления городом.md
docs/case/README.md
docs/case/akim-simulator-dataset-and-rules.md
docs/case/source/01-indicators.png
docs/case/source/02-districts.png
docs/case/source/03-measures-1.png
docs/case/source/04-measures-2.png
docs/case/source/05-score.png
docs/case/source/06-example-rules.png
docs/case/source/07-rules.png
docs/case/source/08-case.png
docs/case/source/09-requirements.png
docs/case/source/10-acceptance.png
docs/case/source/11-rubric.png
docs/case/{162C4C59-EE9A-4F03-9B1E-131B72793AE1}.png
docs/case/{5130A968-8A4D-4883-8F2C-337CFA1DB3BF}.png
docs/case/{64BBABC9-DCAC-4142-8C12-3A4D5BDBAEFD}.png
docs/case/{E1A7EE5A-E0B6-4021-9244-0624B1B2FA32}.png
docs/case/{FF0E7AE5-A1EE-4BAC-A360-3CCB83ECCA2A}.png
docs/city-scene-guide.md
docs/codex-log.md
docs/design/astana-clay-reference.png
docs/design/city-concept-v1-prompt.md
docs/design/city-concept-v1.png
docs/media/debrief.png
docs/media/decide-3d.png
docs/media/hero.png
docs/media/intro.png
docs/media/login.png
docs/media/reveal.png
docs/media/walkthrough.png
docs/planning/astana-open-data-visual.md
docs/planning/city-simulator-concept.md
docs/planning/visual-voice-pipeline.md
docs/research/README.md
docs/research/akim-analysis/README.md
docs/research/akim-analysis/codex/audit-report.md
docs/research/akim-analysis/codex/audit-task-prompt.md
docs/research/akim-analysis/codex/engine-task-prompt.md
docs/research/akim-analysis/codex/engine-task-report.md
docs/research/akim-analysis/codex/lens-A-jury-strategy.md
docs/research/akim-analysis/codex/lens-A-prompt.md
docs/research/akim-analysis/codex/lens-B-prompt.md
docs/research/akim-analysis/codex/lens-B-simulation-realism.md
docs/research/akim-analysis/codex/lens-C-game-design.md
docs/research/akim-analysis/codex/lens-C-prompt.md
docs/research/akim-analysis/codex/lens-D-architecture.md
docs/research/akim-analysis/codex/lens-D-prompt.md
docs/research/akim-analysis/codex/sessions.txt
docs/research/akim-analysis/codex/shared-brief-prompt.md
docs/research/akim-analysis/codex/social-task-prompt.md
docs/research/akim-analysis/codex/social-task-report.md
docs/research/akim-analysis/solve-space-output.txt
docs/research/akim-analysis/solve-space.mjs
docs/research/astana-osm-sample.json
docs/research/creative-industries-preliminary-research.md
docs/superpowers/specs/2026-09-23-akim-simulator-design.md
eslint.config.mjs
next.config.ts
package-lock.json
package.json
postcss.config.mjs
public/city/buildings.json
public/city/ground.json
public/city/manifest.json
public/city/trees.bin
public/login/backdrop.jpg
scripts/city/build-city.ts
scripts/city/config.ts
scripts/city/fetch-osm.ts
scripts/city/lib/classify.ts
scripts/city/lib/geo.ts
scripts/city/lib/osm.ts
scripts/city/lib/raster.ts
scripts/sim/solve.ts
scripts/sim/try-analyze.mts
scripts/sim/verify-case.ts
src/app/api/analyze/route.ts
src/app/api/login/route.ts
src/app/api/reactions/route.ts
src/app/favicon.ico
src/app/globals.css
src/app/layout.tsx
src/app/login/login.css
src/app/login/page.tsx
src/app/page.tsx
src/auth/session.ts
src/city/decode.ts
src/city/demoHotspots.ts
src/city/geo.ts
src/city/geometry/buildings.ts
src/city/geometry/ground.ts
src/city/geometry/ribbon.ts
src/city/geometry/traffic.ts
src/city/geometry/trees.ts
src/city/geometry/triangulate.ts
src/city/geometry/writer.ts
src/city/landmarks.ts
src/city/loader.ts
src/city/prepare.ts
src/city/schema.ts
src/city/store.ts
src/domain/data.ts
src/domain/engine.test.ts
src/domain/engine.ts
src/domain/generated/solver.json
src/domain/mods.ts
src/domain/rank.ts
src/domain/social.test.ts
src/domain/social.ts
src/domain/solver.ts
src/domain/types.ts
src/proxy.ts
src/scene/CityCanvas.tsx
src/scene/CityExperience.tsx
src/scene/DebugGroundPicker.tsx
src/scene/FpsProbe.tsx
src/scene/camera/CameraRig.tsx
src/scene/camera/cameraState.ts
src/scene/camera/poses.ts
src/scene/camera/useKeyboard.ts
src/scene/fpsState.ts
src/scene/fx/Effects.tsx
src/scene/labels/LabelProjector.tsx
src/scene/labels/anchors.ts
src/scene/markers/Districts.tsx
src/scene/markers/Ripples.tsx
src/scene/palette.ts
src/scene/world/Atmosphere.tsx
src/scene/world/Buildings.tsx
src/scene/world/Ground.tsx
src/scene/world/Landmarks.tsx
src/scene/world/Traffic.tsx
src/scene/world/Trees.tsx
src/scene/world/landmarks/AstanaArena.tsx
src/scene/world/landmarks/NorthernLights.tsx
src/scene/world/materials.ts
src/sim/SimBridge.tsx
src/sim/analysis.ts
src/sim/labels.ts
src/sim/report.ts
src/sim/scene/SimLayer.tsx
src/sim/store.ts
src/sim/useAnalysis.ts
src/ui/hud/Hud.tsx
src/ui/hud/LoadingScreen.tsx
src/ui/hud/ViewSwitcher.tsx
src/ui/icons.tsx
src/ui/labels/MapLabels.tsx
src/ui/onboarding/Intro.tsx
src/ui/onboarding/Walkthrough.tsx
src/ui/onboarding/onboarding.css
src/ui/onboarding/steps.ts
src/ui/onboarding/store.ts
src/ui/sim/AiReport.tsx
src/ui/sim/BriefSheet.tsx
src/ui/sim/EventsCard.tsx
src/ui/sim/FinalDebrief.tsx
src/ui/sim/FocusActions.tsx
src/ui/sim/InfoPanel.tsx
src/ui/sim/PlanPanel.tsx
src/ui/sim/ResultView.tsx
src/ui/sim/Reveal.tsx
src/ui/sim/SimHud.tsx
src/ui/sim/SocialFeed.tsx
src/ui/sim/WorldSetup.tsx
src/ui/sim/sim.css
tsconfig.json
Ветки (2)

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

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

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