Inspiration Municipal decisions are public, but hard to find and harder to understand. Residents should not need to dig through agendas to learn what is happening near them. We wanted a map that makes civic information feel local, clear, and trustworthy.
What it does CivicSync is a map-first explorer for municipal proposals. You search a place, see nearby notices, and open a clear proposal brief. You can leave feedback when intake is open. An explorer assistant answers questions using only municipal records and official sources.
How we built it We built a React + TypeScript + Vite app with MapLibre and OpenFreeMap. Proposals and feedback live in Supabase with Auth and RLS. The explorer assistant runs through a Supabase Edge Function and OpenRouter, with keys kept server-side. We grounded answers in allowlisted official documents and validated structured responses.
Challenges we ran into Keeping AI answers evidence-only, without inventing impacts or deadlines. Merging static curated data with live published records safely. Making Edge Function auth and OpenRouter deployment reliable. Designing panels that stay usable on a busy 3D map.
Accomplishments that we're proud of A working 3D map with search, wards, nearby proposals, and proposal stages. Private resident feedback with admin review. An explorer assistant that cites official sources instead of guessing. A polished UI that stays honest about uncertainty and proximity.
What we learned Civic tech needs clear data boundaries more than flashy features. Map UX has to explain what a point is not, as well as what it is. Grounded AI needs retrieval limits, validation, and empty states. Shipping a full stack demo means treating auth, secrets, and RLS as first-class work.
What's next for CivicSync More cities and fresher open-data pipelines. Stronger consultation timelines and notification options. Better multilingual coverage and accessibility. Deeper admin tools for publishing, feedback triage, and source verification.