Inspiration
A city-run dog park near us closed, and the people who used it every day found out after it was gone. Its Instagram comments filled up with heartbroken dog owners. Decisions like that are public, but they're buried in agenda PDFs nobody reads.
What it does
PCA reads City of Miami and Miami-Dade agendas, finds the residents each decision affects, and calls them before the vote, in English or Spanish. It explains what's changing, tells them when and where to speak up, and asks what they think. Each call becomes quotes and a suggested policy revision for the city.
How we built it
- Next.js frontend with MapLibre maps; FastAPI + SQLite backend
- Scrapers for the City of Miami Legislative Hub and Miami-Dade's agenda system
- Gemini turns agenda PDFs into structured items
- OpenAI runs the conversation, extracts quotes, drafts revisions, and powers search (BM25 + embeddings, merged with Reciprocal Rank Fusion)
- Twilio Voice places the calls with speech recognition and neural voices
Challenges we ran into
- We knew the problem right away but figuring out the architecture to solve it was tricky, most of our first day was spent just thinking of how exactly we were going to solve the pain point.
- Miami-Dade meeting logs weren't exactly the most organized, we had to tune the scrapers individually to gather reliable data.
- Twilio's free trial blocks live audio streaming, so our first calls just said "this is a test call from Twilio." We rebuilt calls as turn-based conversations that work on the trial.
- Every government publishes agendas differently, so each source needed its own scraper.
- Twilio reaches our laptop through a temporary tunnel that dies when the laptop sleeps, so PCA now checks it before dialing.
Accomplishments that we're proud of
- Real calls to real phones, with details of the actual Oct 8 City Commission meeting
- About 250 real Miami agenda items, searchable in plain English
- A finished call becomes quotes and a policy revision automatically
What we learned
- Public data isn't the same as accessible data.
- A phone call reaches people better than apps do.
- Voice agents are all about pacing: short sentences, handling silence, and knowing when to hang up.
What's next for Public City Announcements (PCA)
- Opt-in sign-up by neighborhood, topic, and language
- More Miami-Dade cities, like Miami Beach and Hialeah
- Haitian Creole calls and text reminders before meetings
- Sending residents' feedback straight to commissioners as public comment
Built With
- cloudflare-tunnel
- fastapi
- framer-motion
- maplibre
- next.js
- openai
- openfreemap
- pydantic
- python
- react
- shadcn/ui
- sqlite
- tailwindcss
- twilio
- typescript
- uvicorn
- websockets

Log in or sign up for Devpost to join the conversation.