AAYMA
RU
Войти

АКИМ / SAMGA AI

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

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

О проекте

Команда: 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[Сравните пользу и оставшиеся проблемы]
  1. Нажмите «Составить свой план» или «Новый план». Каталог откроется сразу.
  2. Выберите район мероприятия, затем «Добавить» на карточке. Для городской меры район не нужен.
  3. Добавьте следующие меры через «+ Мера». Недоступные сочетания объясняются под названием: повтор, превышение бюджета или конфликт.
  4. После пятой допустимой меры результат рассчитывается автоматически. До этого вместо итогового балла стоит —.
  5. В «Сравнение районов» выберите нужные районы и переключите «Сейчас / После решений». В «Сравнение вариантов» сопоставьте свой план с примерами.

Чтобы заменить меру, нажмите её название в списке решений. Выбор готового примера сохраняет ваш план в текущей открытой странице — вернитесь через строку «Мой план». После перезагрузки начнётся новая сессия.

Повторите проверенный пример

Одна мера из каждого из пяти направлений:

МераКудаЦена
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), объединённая с результатами разбора датасета. Ниже описан целевой продукт; текущая реализация и её ограничения перечислены выше.

Цель

Показать, как распределение ограниченного городского бюджета между разными направлениями влияет на качество жизни горожан.

Сценарий пользователя

  1. Получить фиксированный виртуальный бюджет, одинаковый для всех участников.
  2. Принять пять решений о распределении бюджета по направлениям:
    • транспорт;
    • озеленение;
    • социальная сфера;
    • безопасность;
    • городские сервисы.
  3. Сразу увидеть последствия выбранного распределения.
  4. Получить итоговый 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 описано выше и не объявлено решённым.

Симулятор использует игровую модель: итоговый показатель не является официальной оценкой качества жизни в Астане.

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

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

kmakhutov93-ai 38merunyyaa 16gtaslan2201 15kmakhutov93-ai 2Меру 2

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

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

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

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

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