← Projects

CityVoice

Author · Civic tech · Voice · 2026

Report a problem in your street to your city just by talking to Alexa.

  • TypeScript
  • Cloudflare Workers
  • MCP
  • Open311
CityVoice: report by voice, fewer duplicates, safety first, follow up
Report a problem in your street to your city, just by talking to Alexa
A pothole report: the conversation with Alexa next to the Open311 record the city would receive
Filed after a clear yes, in the format cities read

Problem

Reporting a pothole or a broken streetlight sounds easy until you try it. You have to find the right form, pick the right city service and give an exact address. Many people give up halfway, and the problems that do get reported often arrive more than once.

Solution

CityVoice lets a resident simply say it. "There's a huge pothole at 14th and U." It works out where that is, asks the one question the city still needs answered, reads the report back, and files it only once the resident says yes.

It also behaves like a good neighbour. If someone nearby has already reported the same pothole, it offers to add your support instead of filing a duplicate. If what you describe sounds dangerous, like a smell of gas, it tells you to call 911 and files nothing. And when you later ask what is happening with your reports, it answers in plain words, with a map if your device has a screen.

I built it for the Alexa+ track of the Amazon Developer Hackathon 2026. A browser simulator with demo residents means anyone can try it without an Echo.

Approach

CityVoice speaks Open311, the open standard many American cities already use for their 311 services. A city could read its reports without installing anything new.

Alexa+ does the understanding and CityVoice does the acting. The server has no language model of its own: its tools are plain code that answer in milliseconds, and each one returns a sentence ready to be spoken.

Speed shaped the design more than anything else. Every tool call costs the assistant a moment of thinking, and an early version needed four of them before it could ask its first question. I folded them into a single call that screens for emergencies, finds the service and the place, and checks the neighbours' reports all at once. The smaller tools are still there for corrections, like "no, it's on 15th Street".

Trade-offs & bottlenecks

No report reaches a real city. They go to a sandbox that behaves exactly like a city's 311 server, because filing for real takes an agreement and an access key from each city, and that means a partnership I did not have.

The places are real, and so are San Francisco's reports, which are copied from the city's public feed every ten minutes because the live feed is far too slow for a voice conversation. The Washington DC residents and their reports are made up for the demo.