О проекте
Команда: 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
-
Установите Node.js версии 20 или новее.
-
Откройте в VS Code папку проекта
hack-414276c9-rizz-agents. -
Откройте Terminal → New Terminal и выполните:
npm start -
Перейдите в браузере на http://localhost:3000.
-
Остановка: нажмите
Ctrl+Cв терминале, где запущен сервер.
Устанавливать дополнительные пакеты не нужно.
Деплой на Render
Проект — Node.js веб-сервер: он отдаёт сайт из public/, а серверные API-маршруты выполняет в server.mjs. Поэтому нужен Web Service, а не Static Site. Конфигурация Render находится в render.yaml; сборка устанавливает зависимости командой npm ci, запуск выполняется через npm start. Отдельной команды сборки фронтенда нет. Версия Node.js закреплена в .node-version.
Первая публикация
- Убедитесь, что нужная версия проекта отправлена в GitHub.
- Войдите в Render и выберите New → Blueprint.
- Подключите GitHub, выберите репозиторий и ветку с проектом (например,
main), затем примените Blueprint изrender.yaml. - При желании включить AI-пояснения добавьте
OPENAI_API_KEYкак секрет в настройках сервиса Render. Вставляйте ключ только в поле переменной окружения Render — не в GitHub,render.yamlили браузерный код. Без ключа сайт работает с локальным автоматическим пояснением. Сервер читает ключ только на своей стороне. - Дождитесь успешного деплоя и откройте адрес
*.onrender.com, который покажет Render.
Render Free подходит для демо и тестирования. После 15 минут без запросов бесплатный сервис засыпает; первый следующий запрос может ждать около минуты. На бесплатном тарифе файловая система временная, поэтому не храните в ней пользовательские данные. Настроенный health check обращается к /api/data.
Обновление сайта
Отправьте изменения в выбранную ветку GitHub. Render автоматически соберёт и опубликует новый коммит. Если автоматический деплой отключён, запустите Manual Deploy → Deploy latest commit в панели Render. После изменения API-ключа или других переменных окружения сохраните настройки и перезапустите или повторно разверните сервис.
Как пользоваться
- Нажмите Подобрать план и выберите город или нужный район либо соберите свой набор вручную.
- При ручном выборе отфильтруйте каталог по направлениям, выберите меры и укажите район для районных проектов.
- Убедитесь, что выбрано ровно пять мер и расходы не превышают 100 условных единиц.
- Нажмите Рассчитать сценарий и сравните общий балл с результатами районов.
- Нажмите Объяснить результат, чтобы получить краткий разбор пользы, рисков и следующего шага.
- При желании нажмите Проверить план на кризисы. Откройте карточки, чтобы увидеть, какие меры связаны с каждым риском, их эффекты и задержки в симуляции, ограничения модели и варианты для сравнения.
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/— интерфейс и браузерная логика.
,
Авторы коммитов
История коммитов
- 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 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.