← All projects
World ModelsGeminiThree.jsTypeScriptSQLite

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 of Choices gameplay in Astoria, with the mayor walking through a generated street and the budget displayed above.
Exploring Astoria in the full game. The street is a fictional, model-generated scene.

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.

housing43
mobility42
wellbeing45
trust52

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. 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. 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. 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.

← Back to all projects