Inspiration
A city budget is more than numbers on a spreadsheet. It can mean a shorter commute, a more affordable place to live, or power that stays on when you need it. But the same decision can affect people in completely different ways.
We built State of Us to make those tradeoffs feel real.
The name represents us, the people—the state of you, your community, and everyone whose daily life is shaped by public decisions.
What it does
State of Us is a city-budget simulation set in Pittsburgh. You step into the role of the city’s budget planner and make policy decisions while balancing limited funds, public happiness, and the needs of different neighborhoods and communities.
Most days, you’re given five policy choices inspired by local reporting, city initiatives, and public surveys. You can expand each option to learn more about where the idea came from and view the sources behind it.
Not every day goes according to plan. Emergency events force you to react to situations like an AI-policy protest or a power outage that disproportionately impacts lower-income households.
Throughout the game, a voiced mayor and assistant help guide you. A news reporter also interviews residents from different backgrounds so you can hear how your decisions affect people across the city.
Your choices don’t just change numbers—they change the city itself. Housing policies can trigger demolition and construction, while transit investments can bring new buses onto the roads alongside existing traffic.
After six days, you receive a report card showing your city’s overall performance, which demographic groups benefited or struggled, and what residents thought about your decisions.
From there, you can continue running the same city in sandbox mode.
How we built it
We built State of Us using Next.js, React, TypeScript, and Zustand.
The city itself is rendered using a canvas-based isometric map that handles buildings, traffic, weather, animations, and policy-related events.
PostgreSQL, hosted through Neon, stores simulation data, player decisions, and daily outcomes. The application is deployed using Vercel.
We also built a source pipeline that collects information from local news and official civic sources. Google Gemini helps turn that information into possible policy proposals, which are then validated and mapped to actions the simulation can actually execute.
NVIDIA Nemotron powers resident reactions and social responses, allowing characters to respond to policies based on their individual circumstances and backgrounds.
ElevenLabs gives the mayor, assistant, and news reporter distinct voices and personalities.
One important design choice was separating AI dialogue from the actual simulation. The simulation engine decides what happens to the city, while the AI characters focus on explaining, reacting to, and giving perspective on those changes.
Challenges we faced
One of our biggest challenges was making residents feel like actual individuals.
At first, responses could sound generic, which made different residents feel too similar. We improved this by giving characters more personal context, tracking how specific policies affected them, and creating rules for choosing who gets interviewed after each decision.
Another major challenge was coordinating everything happening in the game.
Interviews, construction animations, day-to-night transitions, results screens, and new policy choices all needed to happen in the right order. When too many things happened at once, the experience became confusing.
Reliability was another big focus. AI requests can sometimes be slow or fail entirely, so we added retry logic and validated fallback choices to make sure the game could keep moving.
Moving from a local database to a fully hosted deployment also created some challenges around database connections and initialization.
What we learned
One of the biggest things we learned is that a citywide average can hide a lot.
Overall happiness might increase while one neighborhood or demographic group is actually doing worse. Showing those differences makes each decision feel much more meaningful than simply displaying one positive or negative number.
We also learned that AI works best in this kind of experience when it has a clearly defined role.
Instead of letting AI control everything, we use it to interpret information and express different perspectives, while a consistent simulation engine handles the actual consequences.
Most importantly, we learned how much presentation matters.
Seeing a neighborhood physically change after your decision—and then hearing a resident explain what that change means for their life—makes a city budget feel much more personal.
What’s next
Next, we want to make the simulation even deeper.
We want to expand neighborhood-specific effects, add more visible outcomes for different policies, and create an even stronger connection between current civic issues and the decisions players face each day.
Ultimately, we want State of Us to be a place where people can explore one difficult question:
When you spend for a city, who actually benefits?
What's next for StateOfUs
Built With
- cheerio
- elevenlabs
- gemini
- nemotron
- neon
- next.js
- node.js
- nvidia
- postgresql
- react
- tailwind
- typescript
- vercel
- zustand
Log in or sign up for Devpost to join the conversation.