What I built
At Hacktoberfest Hack Day Indore, I worked on CivicAI, a prototype for helping city teams review public infrastructure reports. The idea is to turn a photo of a road or utility problem into a structured report, then make the repair queue easier to understand.
A citizen can submit an issue with a photo and location. The backend can send the image to Gemini for a suggested issue type, severity, confidence, responsible department, risk factors, and recommended action. If no API key is configured, or the Gemini request fails, the app falls back to a demo response so the flow can still be explored.
Project repository: CivicAI on GitHub
MLH event submission: Hacktoberfest Hack Day Indore
How it works
The frontend is built with React, TypeScript, and Vite. It communicates with a Node.js and Express API.
The API handles issue reports and image analysis. For image analysis, the Gemini integration asks for structured JSON with the defect category, severity, confidence, department, risks, and suggested next action. A fallback demo mode keeps the interface usable without a configured model key.
CivicAI also calculates a priority score from five factors: severity, number of reports, how long an issue has remained unresolved, location importance, and AI confidence. The resulting score maps to a priority level, with an explanation describing the factors that influenced it. The aim is to make triage more transparent than a queue that only reflects which report arrived first.
The dashboard brings together issue details, map views, and summary analytics. Some of those summary figures are seeded demo data, so they should be read as part of the prototype rather than live municipal statistics.
What I learned
The most useful design question was not just “Can AI classify this photo?” It was “How can a reviewer see why this report was prioritized?” A score is easier to question and improve when the factors behind it are visible.
I also learned how easily a polished dashboard can suggest that every workflow is production-ready. In this prototype, repair verification is represented with a fixed demo result; it does not yet compare before-and-after photos. Calling out that boundary is part of building a trustworthy demo.
With more time, I’d validate model outputs more carefully, implement real before-and-after verification, and replace seeded dashboard metrics with data from a persistent store. I’d also test the scoring model with people who actually handle field repairs, since their feedback should shape which factors matter most.
CivicAI is an experiment in making civic issue triage more structured and explainable. It is a prototype, not a deployed municipal service.
Related work
- FLINT: Turning Buses into City's Eyes by TenET explores using vehicle routes to spot road issues.
- Building a Community Issue Detection System Using Vehicle Video Feeds by Adit describes detecting infrastructure issues from vehicle video.
Top comments (1)
Prioritization for civic reports should make its criteria visible: safety risk, affected population, recurrence, cost, and uncertainty. A transparent queue lets residents challenge an input or weight instead of assuming the model made a neutral decision.