О проекте
Команда: Samga-AI
Кейс HackAlem.ai: Спецтрек — Astana Innovations
Стадия: Доведённый продукт
Задача кейса: «Аким на 5 часов»: городской симулятор, распределяющий бюджет по 5 направлениям и 5 районам
Суть
Веб-панель городского симулятора с картой Астаны: 5 мер в бюджете 100, индекс качества жизни по районам, сравнение планов, полный перебор допустимых назначений, HTML/JSON-отчёт для руководителя, AI-ассистент с голосом и отдельные iPhone-демо для акима и жителя.
Как устроено
Node.js-сервер отдаёт веб-панель, расчётный API, отчёты и мобильную галерею; движок считает индекс с горизонтом 8 кварталов и штрафом за критические значения (<40). Модуль analytics выполняет полный поиск по 694 395 допустимым назначениям и поиск с ограничениями (цель, расход). AI-ассистент (OpenAI, голос ElevenLabs, 3D-аватар) опирается на рассчитанные числа; iOS-приложения на Swift — отдельные локальные демо.
Ключевые решения
- exhaustive search
- constrained search
- grounded assistant
- WebGL map
- GeoJSON districts
Особенности
Показывает «цену приоритета»: устранение критических значений за 66, обязательная школа в Нуре поднимает минимум до 80; максимум модели 57.236735 за 98. Честно зафиксировано расхождение PDF и DOCX ТЗ по правилу направлений. Скрипт jury-check.mjs для автоматической проверки.
Стек
Node.js · JavaScript · Swift · WebGL · GeoJSON · HTML/CSS
Модели
OpenAI GPT · ElevenLabs
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-ad91e510-samga-ai.
README
README.mdАКИМ / SAMGA AI — «Аким на 5 часов»
Выберите пять городских проектов, уложитесь в бюджет 100 и увидьте, кому станет лучше через два года. Сравните свой план с альтернативами: общий балл, показатели районов и нерешённые проблемы.
Учебные данные из задания HackAlem AI. Расчёт воспроизводимый; это не официальная статистика и не прогноз реального бюджета Астаны.
Для эксперта: маршрут проверки · соответствие критериям и доказательства · итог приёмки командой · источники и повторно использованные компоненты.
Что показать за три минуты
- Одинаковые деньги — разные последствия. Два плана стоят95: перенос тех же мер между районами меняет индекс53,86→56,54 и число критических показателей2→0.
- Решение можно проверить. Полный поиск в модели перебирает694395 допустимых назначений. При исходных ограничениях максимум —57.236735 за98 единиц; результат относится к учебному датасету и заданной цели.
- Видна цена приоритета. Устранить критические значения в модели можно за66; обязательная школа в Нуре повышает минимум до80. Поиск показывает условия и оставшиеся компромиссы.
- Результат можно передать и повторить. HTML-записка для руководителя, JSON с пятью решениями и возврат на карту с сохранением плана. Отдельно представлены реальные iPhone-демо для акима и жителя.
Запустить и начать
Нужны Node.js 24+, современный браузер с WebGL и интернет для карты. Установка npm-пакетов и аккаунт для расчёта не требуются. Из корня репозитория:
node backend/server.mjs
Команда одинакова на macOS, Windows и Linux. Откройте АКИМ → «Открыть демонстрацию». Почта и пароль не нужны. Сервер останавливается клавишами Ctrl+C. Если порт занят, остановите прежний экземпляр этой платформы; не завершайте чужие процессы.
127.0.0.1 — адрес вашего компьютера. Чтобы показать продукт на другом ноутбуке, запустите там эту же версию репозитория; это не общая интернет-ссылка. Один сервер отдаёт веб-панель, расчётный API, отчёты и мобильную галерею.
Два понятных пути
| Хочу | Что нажать |
|---|---|
| Сначала понять идею | «Посмотреть пример» — готовый показ: проблема → неудачный выбор → перераспределение → сравнение |
| Принять решения самому | «Составить свой план» — каталог мер с ценами, районами и последствиями |
| Вспомнить порядок действий | «Как пользоваться» — короткая инструкция прямо в панели |
| Подобрать альтернативу и сохранить итог | «Подбор и отчёт» — поиск и скачивание HTML/JSON |
| Посмотреть мобильные роли | «Мобильная версия» — настоящие iPhone-скриншоты и маршруты |
flowchart LR
A[Выберите меру и район] --> B[Соберите 5 решений]
B --> C[Проверьте расход до 100]
C --> D[Увидьте результат через 2 года]
D --> E[Сравните пользу и оставшиеся проблемы]
- Нажмите «Составить свой план» или «Новый план». Каталог откроется сразу.
- Выберите район мероприятия, затем «Добавить» на карточке. Для городской меры район не нужен.
- Добавьте следующие меры через «+ Мера». Недоступные сочетания объясняются под названием: повтор, превышение бюджета или конфликт.
- После пятой допустимой меры результат рассчитывается автоматически. До этого вместо итогового балла стоит
—. - В «Сравнение районов» выберите нужные районы и переключите «Сейчас / После решений». В «Сравнение вариантов» сопоставьте свой план с примерами.
Чтобы заменить меру, нажмите её название в списке решений. Выбор готового примера сохраняет ваш план в текущей открытой странице — вернитесь через строку «Мой план». После перезагрузки начнётся новая сессия.
Повторите проверенный пример
Одна мера из каждого из пяти направлений:
| Мера | Куда | Цена |
|---|---|---|
| M1 · Выделенные полосы для автобусов | Нура | 18 |
| M4 · Парк / сквер | Сарыарка | 15 |
| M7 · Школа + детсад | Нура | 24 |
| M10 · Освещение и камеры | Нура | 12 |
| M12 · Единая цифровая платформа обращений | Весь город | 14 |
Ожидаемый результат: потрачено 83, осталось 17, индекс 52,56 → 55,61, критических показателей 2 → 1. Точный итог модели: 55.60722.
В Нуре школы растут с 38 до 48, общественный транспорт — с 40 до 46,75. Медицина остаётся на 35: рост общего балла не означает решения всех проблем. Парк находится в Сарыарке, потому что парк и школа несовместимы в одном районе.

Быстрое сравнение: выберите «Всё в Есиль», затем «Помочь слабым районам». При одинаковых расходах 95 индекс меняется 53,86 → 56,54, критические значения 2 → 0. Это примеры, а не доказательство глобального оптимума; второй вариант охватывает четыре направления.
Как читать показатели
- Бюджет — расход и остаток из условных 100 единиц, не тенге.
- Индекс качества жизни / Score — общий балл модели. Он учитывает население, показатели районов, слабейший район и штраф за критические значения. Выше — лучше по правилам этого датасета.
- Критическое значение — показатель строго ниже 40. Знак
!помогает найти его. - Сейчас / После решений — исходное состояние и результат на горизонте 8 кварталов. Задержки проектов уже учтены.
- Карта — обзор районов; точки условные и не обозначают реальные участки строительства.
Что реализовано по ТЗ
| Требование | Как проверить |
|---|---|
| Пять самостоятельных решений, районные и городские меры | Собрать пример выше через каталог |
| Бюджет 100, повторы и несовместимости | Каталог блокирует недопустимые варианты с причиной |
| Изменение последствий от выбора | Поменять район школы и посмотреть показатели |
| Astana Quality of Life Score | Сверить точное значение 55.60722 с примером |
| Наглядные последствия и сравнение | Таблица районов до/после и строка собственного плана |
| AI-анализ сильных сторон, рисков и последствий | В задаче ассистента подтверждены два настоящих GPT-ответа; сравнение опирается на рассчитанные числа |
Расхождение исходников: PDF требует пять направлений, DOCX задаёт не более двух мер из одной группы, из чего следует минимум три. Валидатор следует DOCX. Пример выше покрывает все пять; это не отменяет необходимости подтвердить трактовку задания. PDF · DOCX.
AI-ассистент
Расчёт чисел работает без AI. Круглая кнопка справа снизу открывает помощника по текущему плану.
Для подключения нужен Node.js и доступ к API OpenAI; для голоса — ElevenLabs. Во втором терминале, из корня:
node assistant-service/server.mjs
В панели ассистента откройте «Настройки» и введите ключи локально. Не добавляйте их в репозиторий или переписку. Подробности — в инструкции ассистента.
Проверено: два настоящих GPT-ответа, включая сравнение трёх планов с правильными числами. В финальной проверке 23.09.2026 Карим подтвердил работу звука и успешный запуск на другом компьютере. Это ручная приёмка команды, отдельно от автоматических тестов. Для новой установки нужен настроенный серверный API-доступ: ключи хранятся в памяти процесса и в репозиторий не входят. Живое распознавание произвольной речи не заявляется проверенным только на основании проверки звука.
Подбор плана и экспорт
Нажмите «Подбор и отчёт» в панели. Полный собственный план передаётся в отчёт; если план ещё не собран, открывается пример. В разделе можно выбрать цель поиска, ограничить расходы и посмотреть компромиссы. «Сохранить итог для руководителя» скачивает автономный HTML, «Данные расчёта» — JSON для повторной проверки. «Открыть план на карте» возвращает все пять мер и их районы в новую панель.
Прямая ссылка после запуска: сравнение и отчёт. Дополнительная командная аналитика: аналитическая панель.
Мобильное приложение: две роли
| Роль | Понятный маршрут |
|---|---|
| Аким | Открыть демоверсию → События → Взять на контроль → Помощник → Проект поручения → Сохранить черновик |
| Житель | Фото / Голос / Текст → проверить место → Отправить в демо → Открыть обращение → посмотреть статус |
Это отдельные локальные iPhone-демо, дополняющие веб-сценарий. Связь между приложениями, вебом и реальными службами пока не подключена. Посмотреть мобильные экраны в браузере можно без Xcode: это реальные скриншоты, а не запускаемые iOS-приложения. Исходники обеих ролей уже включены в mobile/; там же команды сборки и тестов. Для нативного запуска нужны macOS, Xcode и XcodeGen. У жителя проверены отправка учебного обращения, карточка и сохранение после перезапуска; 5/5 тестов прошли.
Что остаётся ограничением
Веб-панель, сервер, поиск, отчёты и мобильные исходники собраны в этом репозитории. Не подключены синхронизация мобильных ролей, реальные городские службы и авторизация. Для live AI на новой машине нужен настроенный серверный API-доступ. Проверка на другом компьютере и звуковое воспроизведение подтверждены командой; публикация кода и подтверждение отправки решения на конкурсной платформе остаются разными действиями.
Для команды и проверки
Начать разработку · Происхождение материалов · Происхождение текущей панели · История этапов.
Проверка для эксперта, после запуска сервера в первом терминале:
node scripts/jury-check.mjs --url http://127.0.0.1:4197
Ожидается deterministicPassed: true: проверяются веб- и мобильные страницы, пример 83 / 55.60722 / 1, ограничения, подмена чисел, поиск и серверный экспорт. requiredAiVerified: false означает, что эта команда не вызывала живой AI. Она не подменяет отдельную проверку помощника с настроенным OpenAI. Пошаговый сценарий эксперта.
Минимальные модульные проверки расчётного пути:
node --test docs/brief-analysis/test/model.test.mjs demos/astana-story/comparison.test.mjs demos/astana-story/planner.test.mjs
node --check demos/astana-story/onboarding.mjs
В финальной общей сборке прошли 123/123 теста, 16/16 HTTP-проверок сценария эксперта и 5/5 тестов мобильной модели жителя. Оба iOS-приложения успешно собраны из чистого опубликованного архива. В браузере подтверждены 83 / 55,61, перенос в отчёт, скачивание и возврат с теми же мерами, а также мобильная галерея. Машиночитаемый результат. Звук и запуск на другом компьютере дополнительно приняты командой: итог приёмки.
Исходное командное мини-ТЗ и вклад
Мини-ТЗ
Постановка из командного коммита b5738e7 (gtaslan2201), объединённая
с результатами разбора датасета. Ниже описан целевой продукт; текущая реализация
и её ограничения перечислены выше.
Цель
Показать, как распределение ограниченного городского бюджета между разными направлениями влияет на качество жизни горожан.
Сценарий пользователя
- Получить фиксированный виртуальный бюджет, одинаковый для всех участников.
- Принять пять решений о распределении бюджета по направлениям:
- транспорт;
- озеленение;
- социальная сфера;
- безопасность;
- городские сервисы.
- Сразу увидеть последствия выбранного распределения.
- Получить итоговый Astana Quality of Life Score и понятное объяснение того, как решения повлияли на результат.
Требования к MVP
- Интерфейс распределения бюджета по пяти направлениям.
- Проверка, что суммарные расходы не превышают доступный бюджет.
- Расчёт Astana Quality of Life Score на основе принятых решений.
- Отображение последствий распределения бюджета.
- AI-объяснение результата: преимущества, компромиссы и последствия решений для города.
Что уточнено по датасету
- Виртуальный бюджет — 100 условных единиц.
- Шкала показателей — 0–100; формула Score и правила влияния мер приведены в DOCX
и воспроизведены в
docs/brief-analysis/dist/model.mjs. - Остаётся уточнить требование охвата всех пяти направлений: расхождение PDF/DOCX описано выше и не объявлено решённым.
Симулятор использует игровую модель: итоговый показатель не является официальной оценкой качества жизни в Астане.
Авторы коммитов
История коммитов
- 2026-09-23 17:53Merge pull request #9 from BAITC-Hacks/karim/simulatorkmakhutov93-ai
- 2026-09-23 17:52docs: finalize team acceptance and judging evidencekmakhutov93-ai
- 2026-09-23 17:41Merge pull request #8 from BAITC-Hacks/karim/simulatorkmakhutov93-ai
- 2026-09-23 17:40feat: complete reproducible web and mobile review packagekmakhutov93-ai
- 2026-09-23 17:35docs: record simulator smoke test resultsmerunyyaa
- 2026-09-23 17:33fix: allow documented simulator origin for assistantmerunyyaa
- 2026-09-23 17:31Добавить пакет мобильных демоkmakhutov93-ai
- 2026-09-23 17:31test(ux): verify guided decisions and clarify plan recoverygtaslan2201
Все коммиты (73)
- 2026-09-23 17:29feat: serve Akim panel from integrated backendkmakhutov93-ai
- 2026-09-23 17:29Merge remote-tracking branch 'origin/aslan/frontend' into HEADkmakhutov93-ai
- 2026-09-23 17:27merge: assemble verified backend analytics and report toolskmakhutov93-ai
- 2026-09-23 17:25feat: ship checked Akim assistant alongside guided simulatorkmakhutov93-ai
- 2026-09-23 17:25feat(ux): make five city decisions a clear guided journeygtaslan2201
- 2026-09-23 17:23merge: combine published team workflow with verified user guidekmakhutov93-ai
- 2026-09-23 17:21docs: guide users through Akim web and mobile demoskmakhutov93-ai
- 2026-09-23 17:14fix: clarify budget and calculated result labelskmakhutov93-ai
- 2026-09-23 17:07feat: add interactive planning and district comparison widgetskmakhutov93-ai
- 2026-09-23 16:55feat(ui): apply blue glass palette to dashboard and 3D citygtaslan2201
- 2026-09-23 16:54docs: record verified planner progress for 16:00–17:00kmakhutov93-ai
- 2026-09-23 16:54merge: preserve team setup alongside verified planner logickmakhutov93-ai
- 2026-09-23 16:43docs: record planned API integration for Akim simulatormerunyyaa
- 2026-09-23 16:37docs: prepare Akim panel for team collaborationkmakhutov93-ai
- 2026-09-23 16:36fix(map): preserve 3D framing across viewport and scenario changesgtaslan2201
- 2026-09-23 16:33feat: validate draft plans and compare district indicatorskmakhutov93-ai
- 2026-09-23 16:31feat(map): add explorable WebGL city with district and building drill-downgtaslan2201
- 2026-09-23 16:25feat: build Akim widget dashboard from approved entrykmakhutov93-ai
- 2026-09-23 16:13fix(ux): guide first click through city planning flowmerunyyaa
- 2026-09-23 16:08docs: record clean archive verification and remaining live AI gatekmakhutov93-ai
- 2026-09-23 16:07docs: record integrated acceptance evidence and remaining AI gatekmakhutov93-ai
- 2026-09-23 16:07docs: record verified exports and final local acceptancekmakhutov93-ai
- 2026-09-23 16:07feat(ux): make budget choice and future comparison the main city flowmerunyyaa
- 2026-09-23 16:04fix: show every downside in strategy comparisons and exported briefskmakhutov93-ai
- 2026-09-23 16:04docs: document verified integrated launch and submission gateskmakhutov93-ai
- 2026-09-23 16:03feat(integration): connect strategy brief and round-trip plan reviewkmakhutov93-ai
- 2026-09-23 16:01fix: require exhaustive proof and reject invalid audit argumentskmakhutov93-ai
- 2026-09-23 16:00feat: add verifiable strategy comparison and executive decision briefkmakhutov93-ai
- 2026-09-23 15:59feat(integration): validate plans opened from scenario comparisonskmakhutov93-ai
- 2026-09-23 15:59fix(launch): run integrated node backendkmakhutov93-ai
- 2026-09-23 15:58feat: turn Karim city map into interactive planning simulatormerunyyaa
- 2026-09-23 15:58feat(dashboard): connect interactive city map to district problems and scenario planninggtaslan2201
- 2026-09-23 15:56feat(city): connect independent measure selection to verified server resultskmakhutov93-ai
- 2026-09-23 15:54docs: record verified progress for 15:00–16:00kmakhutov93-ai
- 2026-09-23 15:53feat: compare city plans and explain decision tradeoffskmakhutov93-ai
- 2026-09-23 15:51feat(server): serve city lab assets locallykmakhutov93-ai
- 2026-09-23 15:49Merge Karim city map into simulator integrationmerunyyaa
- 2026-09-23 15:49feat(map): add offline Astana geography and district action componentsgtaslan2201
- 2026-09-23 15:47docs: отметить тестирование макетов и сценариев и доработку каркасаmerunyyaa
- 2026-09-23 15:44feat: add verified analytics, constrained search and grounded assistantmerunyyaa
- 2026-09-23 15:44fix(ux): simplify plan and preview replacements before applyingmerunyyaa
- 2026-09-23 15:44merge: retain Aslan frontend and selection modules for city integrationkmakhutov93-ai
- 2026-09-23 15:44feat(brand): rebrand SAMGA as a desktop city command centergtaslan2201
- 2026-09-23 15:44feat(api): add simulator contracts and OpenAI analysis backendМеру
- 2026-09-23 15:44docs: record isolated integration plan and verified source headskmakhutov93-ai
- 2026-09-23 15:38fix(ux): simplify plan and preview replacements before applyingmerunyyaa
- 2026-09-23 15:28feat: add guided Astana city simulation demokmakhutov93-ai
- 2026-09-23 15:22feat: add verified analytics, constrained search and grounded assistantmerunyyaa
- 2026-09-23 15:21feat: package city demo with simple team launcherskmakhutov93-ai
- 2026-09-23 15:18feat(ui): polish mobile flow and verify end-to-end backend integrationgtaslan2201
- 2026-09-23 15:12docs: point team to dedicated mockup branchkmakhutov93-ai
- 2026-09-23 15:11feat: share selected Astana city mockup with teamkmakhutov93-ai
- 2026-09-23 15:06feat(analytics): add district comparisons and server-backed result screengtaslan2201
- 2026-09-23 15:06Merge team AI backend for verified analytics integrationmerunyyaa
- 2026-09-23 15:02test(frontend): compare model scores with floating-point tolerancegtaslan2201
- 2026-09-23 15:01feat(decisions): add budget-aware initiative selection and district sheetsgtaslan2201
- 2026-09-23 14:56feat(api): add simulator contracts and OpenAI analysis backendМеру
- 2026-09-23 14:55Merge current main and preserve team documentation alongside prototypesmerunyyaa
- 2026-09-23 14:53Add three interactive city planning prototypes and verified strategy analysismerunyyaa
- 2026-09-23 14:49feat(ui): create iOS glass dashboard and navigationgtaslan2201
- 2026-09-23 13:58chore: exclude local secrets and credentials from Gitgtaslan2201
- 2026-09-23 13:57docs: document project status and submission checklistmerunyyaa
- 2026-09-23 13:57docs: describe Akim for 5 Hours project and MVP requirementsgtaslan2201
- 2026-09-23 13:56merge: объединить мини-ТЗ команды с проверенной расчётной модельюkmakhutov93-ai
- 2026-09-23 13:51feat: зафиксировать разбор ТЗ и проверяемую модель Аким на 5 часовkmakhutov93-ai
Структура репозитория (250 файлов)
.gitignore AI_START.md INTEGRATION-NOTES.md PROGRESS.md README.md SOURCES.md START-HERE.md START-MAC.command START-WINDOWS.bat analytics/README.md analytics/evidence.mjs analytics/grounding.mjs analytics/optimizer.mjs analytics/public/index.html analytics/public/workbench.css analytics/public/workbench.js analytics/scenarios.mjs analytics/search-worker.mjs analytics/search.mjs analytics/test/grounding.test.mjs analytics/test/http.test.mjs analytics/test/optimizer.test.mjs analytics/test/scenarios.test.mjs assistant-service/README.md assistant-service/context.mjs assistant-service/providers.mjs assistant-service/server.mjs assistant-service/test/context.test.mjs assistant-service/test/providers.test.mjs assistant-service/test/server.test.mjs backend/.env.example backend/README.md backend/ai.mjs backend/assistant.mjs backend/contracts.mjs backend/demo.mjs backend/server.mjs backend/simulator-adapter.mjs backend/static.mjs backend/test/api.test.mjs backend/test/brief.test.mjs backend/test/static.test.mjs briefing/README.md briefing/app.mjs briefing/index.html briefing/report.mjs briefing/session.mjs briefing/style.css briefing/test/report.test.mjs briefing/test/session.test.mjs demos/astana-city/README.md demos/astana-city/app.mjs demos/astana-city/astana.geojson demos/astana-city/base-style.json demos/astana-city/districts-preview.png demos/astana-city/index.html demos/astana-city/mobile-preview.png demos/astana-city/planner.css demos/astana-city/planner.mjs demos/astana-city/preview.png demos/astana-city/session.mjs demos/astana-city/style.css demos/astana-city/test/session.test.mjs demos/astana-story/ORIGIN.md demos/astana-story/README.md demos/astana-story/app.mjs demos/astana-story/assets/akim-civic-hall.png demos/astana-story/assets/akim-image-source.md demos/astana-story/assets/brand-motion.js demos/astana-story/assets/gridstack/LICENSE demos/astana-story/assets/gridstack/gridstack-all.js demos/astana-story/assets/gridstack/gridstack-all.js.LICENSE.txt demos/astana-story/assets/gridstack/gridstack.min.css demos/astana-story/assets/hall-dark.jpg demos/astana-story/assets/hall-light.jpg demos/astana-story/assets/kz-emblem.webp demos/astana-story/assistant-bootstrap.mjs demos/astana-story/assistant/README.md demos/astana-story/assistant/assistant.css demos/astana-story/assistant/assistant.mjs demos/astana-story/assistant/avatar/ORIGIN.md demos/astana-story/assistant/avatar/README.md demos/astana-story/assistant/avatar/assets/avatarsdk.glb demos/astana-story/assistant/avatar/head.css demos/astana-story/assistant/avatar/head.mjs demos/astana-story/assistant/avatar/preview.html demos/astana-story/assistant/sse.mjs demos/astana-story/assistant/sse.test.mjs demos/astana-story/base.css demos/astana-story/catalog-ui.mjs demos/astana-story/comparison.mjs demos/astana-story/comparison.test.mjs demos/astana-story/config.js demos/astana-story/export-local.mjs demos/astana-story/findings.md demos/astana-story/index.html demos/astana-story/login.css demos/astana-story/main.html demos/astana-story/map.mjs demos/astana-story/onboarding.css demos/astana-story/onboarding.mjs demos/astana-story/plan-link.test.mjs demos/astana-story/planner.mjs demos/astana-story/planner.test.mjs demos/astana-story/progress.md demos/astana-story/shell.mjs demos/astana-story/style.css demos/astana-story/task_plan.md demos/astana-story/theme.js demos/astana-story/ui.js demos/astana-story/widget-layout.mjs docs/brief-analysis/IMAGE-PROMPTS.md docs/brief-analysis/README.md docs/brief-analysis/sources/brief.txt docs/brief-analysis/sources/dataset.txt docs/brief-analysis/test/model.test.mjs docs/integration/HANDOFF.md docs/integration/progress.md docs/integration/verification.json docs/jury/DEMO.md docs/jury/EVIDENCE.md docs/jury/findings.md docs/jury/progress.md docs/jury/task_plan.md docs/superpowers/plans/2026-09-23-verified-analytics.md docs/user-guide/ACCEPTANCE.md docs/user-guide/JURY-CHECK.md docs/user-guide/MOBILE.md docs/user-guide/verification.json docs/user-guide/verified-example.png findings.md frontend/.gitignore frontend/MAP-SOURCES.md frontend/README.md frontend/THIRD-PARTY.md frontend/app.mjs frontend/blue.css frontend/components/AIInsightCard.mjs frontend/components/BudgetHeader.mjs frontend/components/CityIllustration.mjs frontend/components/CityMap.mjs frontend/components/ControlShell.mjs frontend/components/DecisionCard.mjs frontend/components/DistrictCard.mjs frontend/components/DistrictInspector.mjs frontend/components/DistrictSheet.mjs frontend/components/GlassCard.mjs frontend/components/GlassTabBar.mjs frontend/components/Icon.mjs frontend/components/JourneyProgress.mjs frontend/components/MetricBar.mjs frontend/components/OutcomeSummary.mjs frontend/components/PlanSummary.mjs frontend/components/ScenarioDock.mjs frontend/components/SceneToolbar.mjs frontend/components/ScoreRing.mjs frontend/control.css frontend/data/astana-buildings.json frontend/dev-server.mjs frontend/favicon.svg frontend/index.html frontend/journey.css frontend/lib/astana-geography.mjs frontend/lib/city-scene.mjs frontend/lib/district-insights.mjs frontend/lib/format.mjs frontend/lib/journey.mjs frontend/lib/map-interaction.mjs frontend/lib/motion.mjs frontend/lib/scenario.mjs frontend/lib/scene-controller.mjs frontend/lib/scene-geography.mjs frontend/lib/scene-meshes.mjs frontend/lib/scene-palette.mjs frontend/package.json frontend/scene.css frontend/screens/Dashboard.mjs frontend/screens/Decisions.mjs frontend/screens/Districts.mjs frontend/screens/Home.mjs frontend/screens/Manage.mjs frontend/screens/Result.mjs frontend/screens/Welcome.mjs frontend/scripts/build-buildings.mjs frontend/scripts/build-map.mjs frontend/scripts/fetch-buildings.mjs frontend/scripts/fetch-map.mjs frontend/scripts/vendor-three.mjs frontend/services/api.mjs frontend/services/demo-api.mjs frontend/styles.css frontend/test/browser.mjs frontend/test/dashboard-browser.mjs frontend/test/journey.test.mjs frontend/test/map.test.mjs frontend/test/scenario.test.mjs frontend/test/scene-browser.mjs frontend/test/scene.test.mjs frontend/test/server.test.mjs mobile/README.md mobile/akim/README.md mobile/akim/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon.png mobile/akim/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json mobile/akim/Resources/Assets.xcassets/CityPark.imageset/Contents.json mobile/akim/Resources/Assets.xcassets/CityPark.imageset/park.png mobile/akim/Resources/Assets.xcassets/CityRoad.imageset/Contents.json mobile/akim/Resources/Assets.xcassets/CityRoad.imageset/road.png mobile/akim/Resources/Assets.xcassets/CivicHall.imageset/Contents.json mobile/akim/Resources/Assets.xcassets/CivicHall.imageset/hall.png mobile/akim/Resources/Assets.xcassets/Contents.json mobile/akim/Resources/Assets.xcassets/KazakhstanEmblem.imageset/Contents.json mobile/akim/Resources/Assets.xcassets/KazakhstanEmblem.imageset/emblem.png mobile/akim/Resources/demo-image-sources.md mobile/akim/Sources/AKIMApp.swift mobile/akim/Sources/DemoAssistantView.swift mobile/akim/Sources/DemoChatsView.swift mobile/akim/Sources/DemoFeedView.swift mobile/akim/Sources/DemoMapView.swift mobile/akim/Sources/DemoRootView.swift mobile/akim/Tests/DemoSmokeTests.swift mobile/akim/project.yml mobile/citizen/Core/CitizenModel.swift mobile/citizen/Core/DemoExamples.swift mobile/citizen/Package.swift mobile/citizen/README.md mobile/citizen/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon.png mobile/citizen/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json mobile/citizen/Resources/Assets.xcassets/CityPark.imageset/Contents.json mobile/citizen/Resources/Assets.xcassets/CityPark.imageset/park.png mobile/citizen/Resources/Assets.xcassets/CityRoad.imageset/Contents.json mobile/citizen/Resources/Assets.xcassets/CityRoad.imageset/road.png mobile/citizen/Resources/Assets.xcassets/Contents.json mobile/citizen/Resources/Assets.xcassets/KazakhstanEmblem.imageset/Contents.json mobile/citizen/Resources/Assets.xcassets/KazakhstanEmblem.imageset/emblem.png mobile/citizen/Sources/CitizenAI.swift mobile/citizen/Sources/CitizenApp.swift mobile/citizen/Sources/ComposeRequestView.swift mobile/citizen/Sources/MediaCapture.swift mobile/citizen/Sources/RequestDetailView.swift mobile/citizen/Tests/CitizenCoreTests.swift mobile/citizen/project.yml mobile/index.html mobile/preview/demo-feed.png mobile/preview/login-light.png mobile/preview/report-detail.png mobile/preview/report-saved.png scripts/jury-check.mjs start-demo.py task_plan.md tests/test_start_demo.py
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.