AAYMA
RU
Войти

Аким на 5 часов

Локальный городской симулятор: пользователь выбирает пять мер по транспорту, озеленению, соцсфере, безопасности и сервисам (или получает автоподбор…

Рабочий MVP
Команда «Rizz Agents» 3💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: Rizz Agents
Кейс HackAlem.ai: Спецтрек — Astana Innovations
Стадия: Рабочий MVP

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

Суть

Локальный городской симулятор: пользователь выбирает пять мер по транспорту, озеленению, соцсфере, безопасности и сервисам (или получает автоподбор сбалансированного плана), видит общий Score и изменения по районам. AI-аналитик объясняет пользу, риски и следующий шаг, а «AI-штаб» проверяет план на пять кризисных сценариев.

Как устроено

Данные районов и мер лежат в src/data.mjs. src/simulator.mjs проверяет бюджет, лимиты по категориям и несовместимость, применяет эффекты с задержкой в горизонте 8 кварталов и считает Score (70% среднего с учётом населения + 30% слабейшего района − штраф за показатели ниже 40). Рекомендации перебирают допустимые комбинации пяти мер и максимизируют балл города или района. server.mjs вызывает OpenAI только для текстовых пояснений, без ключа работает локальный fallback, числа AI не меняет. Модуль stress-test сопоставляет план с кризисами (воздух, пробки, школы, пожары, теплосети).

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

  • exhaustive combination search
  • weighted QoL score
  • weakest-district penalty
  • stress-test scenarios
  • LLM explanation with local fallback

Особенности

Автоподбор оптимального плана полным перебором допустимых комбинаций, отдельно для города и для района. Добровольная проверка плана на пять городских стресс-сценариев не влияет на Score. Решение без зависимостей: запуск одной командой npm start.

Стек

Node.js · JavaScript (ESM) · HTML/CSS · Render

Модели

OpenAI API (model not specified)


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

README

README.md

Аким на 5 часов

Локальный симулятор для задачи Astana Innovations. Команда распределяет одинаковый виртуальный бюджет по городским направлениям, выбирает пять мер и видит, как они могут повлиять на Astana Quality of Life Score и каждый из пяти районов.

Возможности

  • Каталог мер сгруппирован по направлениям: транспорт, озеленение, соцсфера, безопасность и городские сервисы.
  • Можно собрать собственный набор или автоматически подобрать сбалансированный план для города либо отдельного района.
  • Перед расчётом проверяются бюджет, число мер по категориям, обязательный выбор района и несовместимые решения.
  • Результаты показывают общий балл города и изменение балла каждого района.
  • AI-аналитик объясняет пользу, риски и следующий шаг. Если API недоступно, используется локальное пояснение. AI не рассчитывает и не меняет числа.
  • Дополнительный AI-штаб сопоставляет план с пятью городскими стресс-сценариями: воздух, пробки, школы, пожары в жилом секторе и теплосети. Проверка добровольная и не меняет Score, бюджет или выбранные меры.

Все показатели и эффекты мер синтетические и служат демонстрацией модели. Городские проблемы показываются как контекст из датированных источников, а не как оперативные данные. Районные баллы нельзя трактовать как реальные оценки районов.

Запуск в VS Code на Windows

  1. Установите Node.js версии 20 или новее.

  2. Откройте в VS Code папку проекта hack-414276c9-rizz-agents.

  3. Откройте Terminal → New Terminal и выполните:

    npm start
    
  4. Перейдите в браузере на http://localhost:3000.

  5. Остановка: нажмите Ctrl+C в терминале, где запущен сервер.

Устанавливать дополнительные пакеты не нужно.

Деплой на Render

Проект — Node.js веб-сервер: он отдаёт сайт из public/, а серверные API-маршруты выполняет в server.mjs. Поэтому нужен Web Service, а не Static Site. Конфигурация Render находится в render.yaml; сборка устанавливает зависимости командой npm ci, запуск выполняется через npm start. Отдельной команды сборки фронтенда нет. Версия Node.js закреплена в .node-version.

Первая публикация

  1. Убедитесь, что нужная версия проекта отправлена в GitHub.
  2. Войдите в Render и выберите New → Blueprint.
  3. Подключите GitHub, выберите репозиторий и ветку с проектом (например, main), затем примените Blueprint из render.yaml.
  4. При желании включить AI-пояснения добавьте OPENAI_API_KEY как секрет в настройках сервиса Render. Вставляйте ключ только в поле переменной окружения Render — не в GitHub, render.yaml или браузерный код. Без ключа сайт работает с локальным автоматическим пояснением. Сервер читает ключ только на своей стороне.
  5. Дождитесь успешного деплоя и откройте адрес *.onrender.com, который покажет Render.

Render Free подходит для демо и тестирования. После 15 минут без запросов бесплатный сервис засыпает; первый следующий запрос может ждать около минуты. На бесплатном тарифе файловая система временная, поэтому не храните в ней пользовательские данные. Настроенный health check обращается к /api/data.

Обновление сайта

Отправьте изменения в выбранную ветку GitHub. Render автоматически соберёт и опубликует новый коммит. Если автоматический деплой отключён, запустите Manual Deploy → Deploy latest commit в панели Render. После изменения API-ключа или других переменных окружения сохраните настройки и перезапустите или повторно разверните сервис.

Как пользоваться

  1. Нажмите Подобрать план и выберите город или нужный район либо соберите свой набор вручную.
  2. При ручном выборе отфильтруйте каталог по направлениям, выберите меры и укажите район для районных проектов.
  3. Убедитесь, что выбрано ровно пять мер и расходы не превышают 100 условных единиц.
  4. Нажмите Рассчитать сценарий и сравните общий балл с результатами районов.
  5. Нажмите Объяснить результат, чтобы получить краткий разбор пользы, рисков и следующего шага.
  6. При желании нажмите Проверить план на кризисы. Откройте карточки, чтобы увидеть, какие меры связаны с каждым риском, их эффекты и задержки в симуляции, ограничения модели и варианты для сравнения.

AI-пояснение

Без API-ключа симулятор использует автоматическое локальное пояснение. Чтобы включить AI, скопируйте .env.example в .env и добавьте ключ после OPENAI_API_KEY=:

Copy-Item .env.example .env
notepad .env
npm start

Если сервер уже работает, остановите его через Ctrl+C и запустите снова. Сервер сообщает, найден ли ключ, но не печатает его. Файл .env исключён из Git; не добавляйте секрет в браузерный код или опубликованные файлы. Запросы к OpenAI API могут тарифицироваться отдельно.

Расчёт и ограничения

  • Меры изменяют синтетические показатели районов. Для задержки запуска применяется доля эффекта в горизонте восьми условных кварталов.
  • Городские меры влияют на все районы; районные — только на выбранный район.
  • Astana Quality of Life Score складывается из 70% среднего результата с учётом населения, 30% результата самого слабого района и штрафа за каждый показатель ниже 40. Промежуточные значения не округляются; итог отображается с двумя знаками.
  • Рекомендации перебирают допустимые комбинации пяти мер по встроенному набору данных. Городской вариант максимизирует общий балл, районный — улучшение выбранного района с учётом общего результата города.
  • Расходы являются условными, а оценки не являются прогнозом фактических последствий или финансовой сметой.

Структура

  • server.mjs — локальный сервер и вызов OpenAI API.
  • src/data.mjs — районы, исходные показатели и меры.
  • src/simulator.mjs — проверка сценариев, расчёт баллов и подбор рекомендаций.
  • public/ — интерфейс и браузерная логика.

,

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

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

yaru-gyaru 13Dana 5

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

  • 2026-09-23 17:45Add plan defense and alternative comparisonyaru-gyaru
  • 2026-09-23 17:25Prepare Render deployment configurationyaru-gyaru
  • 2026-09-23 17:10Remove secret from env template and ignore local env filesyaru-gyaru
  • 2026-09-23 16:58Merge branch 'main' of https://github.com/BAITC-Hacks/hack-414276c9-rizz-agents into feature/Backendyaru-gyaru
  • 2026-09-23 16:48Merge main and resolve feature conflictsyaru-gyaru
  • 2026-09-23 17:47Merge pull request #9 from BAITC-Hacks/feature/Backendyaru-gyaru
  • 2026-09-23 17:46Prepare public Render deploymentDana
  • 2026-09-23 16:31added crsyaru-gyaru
Все коммиты (18)
  • 2026-09-23 16:46Merge pull request #8 from BAITC-Hacks/feature/Frontendyaru-gyaru
  • 2026-09-23 16:39исправление отступовDana
  • 2026-09-23 15:16bug fixesyaru-gyaru
  • 2026-09-23 14:48apiyaru-gyaru
  • 2026-09-23 15:14Merge pull request #5 from BAITC-Hacks/feature/Frontendyaru-gyaru
  • 2026-09-23 15:10Обновление дизайнаDana
  • 2026-09-23 13:41dovablenieyaru-gyaru
  • 2026-09-23 13:52Merge pull request #2 from BAITC-Hacks/feature/FrontendDanana527
  • 2026-09-23 13:48добавление визуальных измененийDana
  • 2026-09-23 13:44Merge pull request #1 from BAITC-Hacks/feature/Backendyaru-gyaru
Структура репозитория (14 файлов)
.env.example
.gitignore
.node-version
README.md
package-lock.json
package.json
public/app.js
public/index.html
public/styles.css
render.yaml
server.mjs
src/data.mjs
src/simulator.mjs
src/stress-test.mjs
Ветки (3)

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

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

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