City of Choices: exploring policy through play
A world-model game about moving through a city, listening to its residents, and choosing which projects to fund. Built around the connection between a local conversation and its consequences for the wider city.
Reactor × Google world-model hackathon · October 2026
The aim
We wanted to put civic decisions into a world you could explore. A broken boiler or a delayed bus becomes a conversation with a fictional resident, then a choice about where limited funding should go. Walking, biking, and subway travel connect those encounters across the city's neighborhoods.
The challenge was to connect an open-ended visual world with a consistent simulation. A resident's dialogue can change, while the budget and the effects of a policy still need to follow clear rules.
The setup
The visual layer and the policy engine have separate responsibilities. Reactor streams the city, Google's models generate scenes and dialogue, and the TypeScript engine validates each commitment. Decisions are recorded as events so the journal can be rebuilt from the same history.
- World model
- Reactor LingBot World 2 — navigable video from generated neighborhood starting frames
- Generation
- Gemini dialogue + Google image models for neighborhood seeds and encounter scenes
- Game interface
- Next.js + React, with a local Three.js scene for exploration when streaming is unavailable
- Simulation
- TypeScript policies with fixed costs, budget constraints, and delayed effects
- Persistence
- SQLite event log — reconstruct the budget, decisions, and project journal
From a choice to a consequence
The full game pairs neighborhood exploration with resident encounters. This smaller demo isolates one part of that loop: fund a repair, see what remains for a bus project, and advance the day until the work is delivered.

City journal · Day 1
Capital left
$30m
Annual headroom
$7m
Protected reserve
$3m
Tenant organizer · Astoria
The cold apartment
Start by meeting the tenant organizer in Astoria.
Browser simulation of two encounters from the game. Costs and effects follow the original engine; days stand in for game turns. All budgets and metrics are fictional. The full game adds free roaming and live world-model video.
The design choices
- 1
Use generation for the encounter.
The world model supplies a place to explore, and Gemini gives residents a voice. Free-form replies map to listed policies whose costs and effects are defined in the game.
- 2
Let consequences take time.
Funding is committed when a policy is chosen. Its effect reaches the city later, after the project is delivered. That delay makes the journal useful and gives each decision a longer life.
- 3
Build for interruptions in the stream.
A starting image and a local Three.js view keep the city available while a world-model session connects or retries. The simulation can continue while the visual layer catches up.