AAYMA
RU
Войти

Akim Lab

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

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

О проекте

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

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

Суть

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

Как устроено

shared/simulation.js точно по формулам кейса считает эффекты, задержки, синергии и несовместимости проектов. Итоговый балл учитывает среднее по городу, худший район и показатели ниже 40. Оптимизатор перебирает все допустимые замены одного проекта с учётом зафиксированных карточек. Сервер на Node.js валидирует план и передаёт проверенные результаты советнику на OpenAI Responses API (gpt-5.4-mini), озвучка через gpt-4o-mini-tts. Фронтенд на Three.js рисует изометрическую Астану по данным геопортала и OSM с анимацией строительства.

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

  • детерминированная симуляция по формулам кейса
  • перебор замен одного проекта
  • независимый Python-оракул для приёмки
  • grounded AI-советник
  • TTS-озвучка
  • Three.js изометрическая карта

Особенности

Эталонные результаты сверяются с независимой реализацией на Python (oracle.py). Советник получает только проверенные результаты симуляции и обязан раскрывать негативные эффекты. Настоящая геометрия Астаны: шестой реальный район показан на карте без выдуманного балла. Один участник координировал несколько AI-агентов (Codex-A, Codex-B, Claude) с разделением зон ответственности.

Стек

Node.js · JavaScript · Three.js · HTML/CSS · Python (оракул) · OpenAI Responses API

Модели

gpt-5.4-mini · gpt-4o-mini-tts


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

README

README.md

Akim Lab

A small city simulator for people who care about their city.

HackAlem AI · Track 12: “Akim for 5 Hours” · Built by Nartay Aikyn

Choose five projects. Spend a budget of 100. Watch a miniature Astana change, compare the results, and try a different plan.

Akim Lab: miniature Astana with illustrated project cards and a simple budget display

Why we built it

People care about their neighborhoods: the school nearby, the road to work, the park where their children play. We wanted to give ordinary citizens an easy way to explore what they would improve in a city they love.

The design is intentionally simple. You choose illustrated cards, place projects on the map, and see what changes. A small set of numbers shows the result; details are there when you want them. Familiar buildings, moving people and small reactions make the city feel alive and make it inviting to try another idea.

Our aim is to make participation feel approachable. You can experiment, see the trade-offs of a limited budget, and think about how a choice helps one neighborhood or the wider city. The current app is a simulation for learning and discussion; it does not submit proposals to the government.

See it in action

Example plan replay: projects are built over eight quarters, followed by the calculated result

Recorded from the app. Construction and reactions illustrate the projects; the official score is calculated at the end of quarter 8.

Run locally

Requires Git and Node.js 22+. Clone the team repository, then start the server. No package install or build step is needed.

git clone https://github.com/BAITC-Hacks/hack-9760174d-quasaruins.git
cd hack-9760174d-quasaruins
node server/main.mjs

Open http://localhost:3000. npm start also works. To use another port, run PORT=3001 node server/main.mjs. There is no hosted demo URL; this version runs locally.

The simulation and map work offline. For the live AI adviser, copy .env.example to .env and add your OPENAI_API_KEY. The default model is gpt-5.4-mini with low reasoning effort. Keep the key out of Git and browser code. Without an available AI service, the app shows a clearly labeled explanation based on the same calculations.

How to play

  1. Choose projects. Drag cards onto a district. City-wide projects apply across the five modeled districts.
  2. Adjust your plan. Drag a placed card back to the hand to remove it. Invalid choices return to the hand with a reason.
  3. Build your city. Choose exactly five projects within the budget, then press Start. Watch construction or use the speed controls.
  4. Compare the result. Check the score and weakest district. Pin a result as Plan A, change your choices, and compare.
  5. Explore an improvement. Ask for a verified project swap or an AI explanation of the benefits and trade-offs.

For a quick test, click Example → Start. Expect cost 95, an Astana Quality of Life Score of 56.54, and zero critical indicators. Choose Find one improvement → Apply verified change to reproduce cost 100 and score 57.21. Try adding a sixth project to see a rejected choice with an explanation.

Drag the map to pan, right-drag to rotate, and scroll to zoom. Fit city resets the view. Click and keyboard controls are also available. The language button cycles Kazakh, Russian and English; AI briefings and narration are English in this version.

What is included

PartWhat you can do
Miniature AstanaExplore mapped districts, landmarks, parks and roads.
14 project cardsChoose transport, ecology, social, safety and utility projects.
Visible changesSee construction, upgraded buildings, trees, road treatments and rail.
Clear resultsCompare plans, inspect district scores, export JSON or print a report.
Verified adviceReview a fully calculated improvement before applying it.
Grounded AIGet an explanation based on the simulation's verified results.

How the results work

The app follows the challenge's fixed dataset and formulas: five unique projects, a 100-unit budget, and at most two projects per category. Project delays, negative effects, synergies and incompatibilities all count. The score considers the city average, the weakest district and indicators below 40.

The simulation calculates every number. AI helps explain the results. The improvement search checks all valid single-project replacements and preserves any projects you lock; it does not claim to find the best possible five-project plan.

Astana's real geography is the backdrop. The challenge supplies five synthetic districts, while the real city has six. Sarayshyk appears on the map without an invented score. Buildings, construction and resident reactions are illustrative. This is a learning tool, not a forecast of real policy outcomes.

Technical details

Built with Node.js, JavaScript, HTML/CSS and Three.js, with the OpenAI Responses API for the optional adviser. Optional narration uses OpenAI's gpt-4o-mini-tts model, with browser speech as a fallback. Map data and Three.js are included locally.

The main components are:

  • public/: cards, controls, translations and the 3D city.
  • shared/: the dataset, scoring rules and single-project improvement search.
  • server/: HTTP endpoints, validation, AI evidence and narration.
  • data/: cached map geometry; tests/ and test/acceptance/: automated checks.

The browser sends a plan to the server. The shared model validates and scores it. The adviser receives those verified results, and the browser shows the city changes and final report.

node --test
python3 test/acceptance/oracle.py

The automated checks cover the official calculation, invalid plans, recommendations, HTTP endpoints and AI boundaries. An independent Python implementation checks the reference results.

Data and limitations

The scoring data comes from the organizer's Track 12 “Датасет районов” and is stored in shared/city-data.js. Map geometry comes from Astana's public geoportal and OpenStreetMap, with source links in data/README.md. The only live external service is OpenAI for optional advice and narration; maps do not require a live map API.

Plans are saved in the current browser. Shared accounts, cross-team leaderboards, unexpected city events and automatic slide generation are not implemented. The map is illustrative, the scoring data is synthetic, and AI explanations and narration are currently English-only.

Possible next steps are community proposal comparison, uncertainty ranges for project effects, and testing the interface with residents. These are future ideas, not current features.

More detail

Participant and AI tools

Nartay Aikyn is the sole human participant and project lead. Codex-A supported planning, backend, simulation and integration. Codex-B supported the frontend and city interaction. Claude supported landmarks, scenery, translations, tests and review. Image generation produced the project card artwork. These are AI tools used by one participant.

The app itself uses AI for the optional grounded adviser and narration. The simulation and scoring remain deterministic.

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

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

Nartay Aikyn 81

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

  • 2026-09-23 17:50docs: refresh screenshots and replay after the final city polishNartay Aikyn
  • 2026-09-23 17:49fix: refresh city assets after the final visual polishNartay Aikyn
  • 2026-09-23 17:48Merge commit '8fffed42a99b60757d71ea86d7b5c9b5010511dd'Nartay Aikyn
  • 2026-09-23 17:46feat: use GPT-5.4 mini with low reasoning and complete README requirementsNartay Aikyn
  • 2026-09-23 17:38docs: normalize technical guide formattingNartay Aikyn
  • 2026-09-23 17:38docs: explain citizen-first design and show the city in actionNartay Aikyn
  • 2026-09-23 17:32fix: refresh the final language module in browser cachesNartay Aikyn
  • 2026-09-23 17:24fix: preserve startup framing and refresh integrated app assetsNartay Aikyn
Все коммиты (81)
  • 2026-09-23 17:19fix: keep city roads clear and fit zoom limits to each viewportNartay Aikyn
  • 2026-09-23 17:19Merge drag-and-drop project cards and compact resultsNartay Aikyn
  • 2026-09-23 17:17fix: attach badge artwork load listener onceNartay Aikyn
  • 2026-09-23 17:16feat: drag project cards onto city and compact planning UINartay Aikyn
  • 2026-09-23 17:15Merge dense city, university, project effects and map controlsNartay Aikyn
  • 2026-09-23 17:09docs: explain visual project effects and university provenanceNartay Aikyn
  • 2026-09-23 17:07fix: show completed project effects in pinned plan comparisonsNartay Aikyn
  • 2026-09-23 17:05Merge map placement APIs for card draggingNartay Aikyn
  • 2026-09-23 17:05feat: visualize project effects on mapped roads and district buildingsNartay Aikyn
  • 2026-09-23 17:00feat: locate Nazarbayev University from official city footprintNartay Aikyn
  • 2026-09-23 16:53feat: strengthen landmark materials and reserve full model footprintsNartay Aikyn
  • 2026-09-23 16:51Merge expanded Astana landmarks and mapped LRTNartay Aikyn
  • 2026-09-23 16:51Merge Kazakh Russian and English interface switchNartay Aikyn
  • 2026-09-23 16:38fix: refresh city assets together and document expanded sceneNartay Aikyn
  • 2026-09-23 16:37Merge expanded city spacing and architectural paletteNartay Aikyn
  • 2026-09-23 16:35feat: expand city spacing and add contrasting neighborhood architectureNartay Aikyn
  • 2026-09-23 16:30perf: reuse loaded artwork when project cards rerenderNartay Aikyn
  • 2026-09-23 16:24docs: record current map assets and visual integration contractNartay Aikyn
  • 2026-09-23 16:24Merge illustrated project cards and map previewsNartay Aikyn
  • 2026-09-23 16:22feat: add illustrated project card arc and map hover previewsNartay Aikyn
  • 2026-09-23 16:20feat: add distinctive project card illustrationsNartay Aikyn
  • 2026-09-23 16:14Merge baseline city services and project hover highlightingNartay Aikyn
  • 2026-09-23 16:11feat: add persistent district services and project-linked upgradesNartay Aikyn
  • 2026-09-23 16:08feat: map fourteen landmarks and the existing LRT routeNartay Aikyn
  • 2026-09-23 15:54Merge mapped park tree placement correctionNartay Aikyn
  • 2026-09-23 15:50docs: update walkthrough for the fullscreen construction demoNartay Aikyn
  • 2026-09-23 15:48fix: refresh map layers after live demo updatesNartay Aikyn
  • 2026-09-23 15:47feat: integrate mapped landmarks and parks into the city sceneNartay Aikyn
  • 2026-09-23 15:47Merge commit '984d306d7ce6e3dceb43b6a95c36cae2d1ad4010'Nartay Aikyn
  • 2026-09-23 15:45feat: add fullscreen city HUD and quarter replay workflowNartay Aikyn
  • 2026-09-23 15:42Merge commit '667a5aec2563e390d4e0261eac0ae6195cc9e2ee'Nartay Aikyn
  • 2026-09-23 15:41feat: render construction replay and district hover feedbackNartay Aikyn
  • 2026-09-23 15:36Merge commit 'e1802e2dd9950921558ddae1c6c62ee176aea9b9'Nartay Aikyn
  • 2026-09-23 15:36feat: add lightweight city motion and visible project comparisonsNartay Aikyn
  • 2026-09-23 15:35docs: define immediate three-agent build handoffsNartay Aikyn
  • 2026-09-23 15:31feat: add shared construction replay and optional AI narrationNartay Aikyn
  • 2026-09-23 15:29feat: add mapped Astana landmarks and park boundariesNartay Aikyn
  • 2026-09-23 15:09feat: integrate playable isometric Astana frontendNartay Aikyn
  • 2026-09-23 15:09docs: document the playable integrated demoNartay Aikyn
  • 2026-09-23 15:07feat: add light city planning frontend and isometric geographyNartay Aikyn
  • 2026-09-23 15:04fix: require adverse effect disclosures in AI briefingsNartay Aikyn
  • 2026-09-23 14:58fix: preserve tiny water polygons when compacting geographyNartay Aikyn
  • 2026-09-23 14:57feat: serve city API, offline Astana map and verified AI briefingsNartay Aikyn
  • 2026-09-23 14:52test: integrate independent acceptance oracle and review suiteNartay Aikyn
  • 2026-09-23 14:43feat: implement exact city simulation and one-change optimizerNartay Aikyn
  • 2026-09-23 14:36docs: freeze implementation interfaces and agent ownershipNartay Aikyn
  • 2026-09-23 13:52docs: announce Track 12 city budget simulatorNartay Aikyn
  • 2026-09-23 12:58chore: verify repository access and commit identityNartay Aikyn
  • 2026-09-23 17:43feat: pack downtown blocks more tightly with moderate heightsNartay Aikyn
  • 2026-09-23 17:41feat: taller, denser downtown around Bayterek; turn Khan Shatyr 180°Nartay Aikyn
  • 2026-09-23 17:30feat: translate the new drag hand, compact results and camera helpNartay Aikyn
  • 2026-09-23 17:11feat: wire project effects, drag-to-pan with capped zoom-out, compact HUD marginsNartay Aikyn
  • 2026-09-23 17:09Merge remote-tracking branch 'origin/main' into claude/r13Nartay Aikyn
  • 2026-09-23 17:09feat: denser plain city, smaller services, varied construction and completion burstsNartay Aikyn
  • 2026-09-23 16:58feat: city APIs for dragging project cards onto districtsNartay Aikyn
  • 2026-09-23 16:49feat: note that the AI briefing and voice stay English in KZ/RUNartay Aikyn
  • 2026-09-23 16:44feat: translate map tooltips, timeline rows and reaction bubblesNartay Aikyn
  • 2026-09-23 16:39feat: load the language switch on the pageNartay Aikyn
  • 2026-09-23 16:39feat: add KZ/RU/EN language switchNartay Aikyn
  • 2026-09-23 16:18Merge remote-tracking branch 'origin/main' into claude/landmarks-v2Nartay Aikyn
  • 2026-09-23 16:14fix: minaret balconies on each minaret; skip unknown landmark modelsNartay Aikyn
  • 2026-09-23 16:14Merge remote-tracking branch 'origin/main' into claude/landmarks-v2Nartay Aikyn
  • 2026-09-23 16:11feat: landmark shapes closer to the real buildingsNartay Aikyn
  • 2026-09-23 16:04fix: landmark heights follow real proportionsNartay Aikyn
  • 2026-09-23 16:00feat: add scene-clock update hook for the LRT trainNartay Aikyn
  • 2026-09-23 16:00feat: larger detailed landmarks, ten new landmark models and LRT viaductNartay Aikyn
  • 2026-09-23 15:54fix: keep park trees out of water and clear of landmarksNartay Aikyn
  • 2026-09-23 15:40feat: add mapped landmark and park details moduleNartay Aikyn
  • 2026-09-23 15:34Merge branch 'main' into agents/claude-reviewNartay Aikyn
  • 2026-09-23 15:31docs: record review of integrated main 4ad4a07Nartay Aikyn
  • 2026-09-23 14:43test: add contract acceptance suite and review checklistNartay Aikyn
  • 2026-09-23 14:39Merge commit 'bfa1e7fc01f05e36c9a6876f6761cfdb0a547ea5' into agents/claude-reviewNartay Aikyn
  • 2026-09-23 13:53test: add independent acceptance oracle and expected cases for Track 12Nartay Aikyn
Структура репозитория (61 файлов)
.env.example
.gitignore
README.md
data/README.md
data/astana.json
data/city-details.json
docs/ACCEPTANCE.md
docs/CITY-DETAILS.md
docs/CONTRACT.md
docs/DEMO.md
docs/FRONTEND.md
docs/I18N.md
docs/PROJECT-ART.md
docs/PROJECT-EFFECTS.md
docs/README-CHECKLIST.md
docs/REVIEW.md
docs/TECHNICAL.md
docs/media/README.md
docs/media/city-overview.jpg
docs/media/construction-replay.gif
package.json
public/app.js
public/assets/projects/M1.png
public/assets/projects/M10.png
public/assets/projects/M11.png
public/assets/projects/M12.png
public/assets/projects/M13.png
public/assets/projects/M14.png
public/assets/projects/M2.png
public/assets/projects/M3.png
public/assets/projects/M4.png
public/assets/projects/M5.png
public/assets/projects/M6.png
public/assets/projects/M7.png
public/assets/projects/M8.png
public/assets/projects/M9.png
public/city-details.js
public/city-motion.js
public/city-project-effects.js
public/city.js
public/i18n.js
public/index.html
public/styles.css
scripts/prepare-city-details.py
scripts/prepare-geography.py
scripts/start.sh
server/adviser.mjs
server/app.mjs
server/main.mjs
server/speech.mjs
server/verified-facts.mjs
shared/city-data.js
shared/optimizer.js
shared/simulation.js
test/acceptance/cases.json
test/acceptance/dataset.json
test/acceptance/oracle.py
tests/acceptance.test.mjs
tests/city-project-effects.test.mjs
tests/engine.test.mjs
tests/server.test.mjs

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

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

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