Inspiration
A pothole, broken streetlight, overflowing trash can, or damaged sidewalk may seem like a small problem, but reporting it can be surprisingly difficult. Reports can be incomplete, sent to the wrong department, or duplicated by multiple residents.
I wanted to build something that makes reporting a community problem simple for residents while turning that report into information that is immediately useful to the people responsible for resolving it.
That idea became CivicFix.
What it does
CivicFix transforms a community issue into a structured, actionable report.
A resident can submit a photo, location, and description of a problem. CivicFix analyzes the report and identifies:
- Issue category
- Severity
- Severity score
- Recommended city department
- Recommended action
- Short summary
- Confidence
CivicFix also detects potentially duplicate reports using text similarity and geographic proximity.
Every report receives a unique tracking code, allowing residents to follow its progress through:
Submitted → Under Review → In Progress → Resolved
Administrators have a separate dashboard where they can search and filter reports, assign departments, update statuses, add notes, review potential duplicates, and view reporting analytics.
How I built it
CivicFix is a full-stack web application built with:
- Python
- FastAPI
- Jinja2
- SQLite
- HTML/CSS/JavaScript
The AI analysis system uses a provider fallback architecture:
Groq → Gemini → OpenRouter → deterministic rule-based analysis
Instead of making the entire application dependent on one AI provider, CivicFix automatically falls back to another provider when an AI service fails. If all AI providers are unavailable, the deterministic heuristic engine keeps the core analysis functionality working.
All providers return the same normalized analysis structure, allowing the rest of the application to work independently of which provider handled the request.
I also separated the resident experience from the administrative dashboard and implemented server-side authentication for administrator functionality.
Challenges I ran into
One of my biggest challenges was designing a reliable AI analysis pipeline that could handle different kinds of community reports and still produce consistent, structured results.
Different AI providers can return information in different formats, so I had to normalize their responses into the same structure for category, severity, department, summary, recommended action, and confidence.
Duplicate detection was another challenge. Two residents can describe the same problem very differently, so comparing text alone isn't sufficient. CivicFix combines description similarity with geographic proximity to identify potential duplicates while leaving the final decision to an administrator.
I also had to decide what to prioritize under a hackathon deadline. Instead of building many disconnected features, I focused on making the complete workflow function from report submission → analysis → administrative review → resolution tracking.
Accomplishments I'm proud of
CivicFix combines several systems into one complete workflow:
- AI-assisted issue classification
- Severity assessment
- Department routing
- Multi-provider AI fallback
- Deterministic analysis fallback
- Duplicate detection
- Photo and location evidence
- Unique report tracking codes
- Resident status tracking
- Administrative workflows
- Authentication and authorization
- Reporting analytics
- Responsive user interface
The part I'm most proud of is that these aren't isolated features. They work together as a complete reporting and resolution workflow.
What I learned
I learned that building a useful application requires thinking beyond individual features.
I had to consider the entire lifecycle of a report: what information a resident provides, how that information is analyzed, how administrators act on it, and how the resident knows what happened afterward.
I also learned the importance of designing for failure. APIs can become unavailable, uploads can fail, users can submit unexpected information, and systems can behave unpredictably. Reliable software needs fallback mechanisms and error handling, not just a successful "happy path."
What's next for CivicFix
CivicFix could eventually integrate directly with municipal systems so reports could be routed to real city departments.
Potential future improvements include:
- Integration with existing 311 systems
- Real-time municipal status updates
- Advanced geographic analysis
- Improved image-based issue detection
- City-specific department routing
- More sophisticated duplicate clustering
- Community issue heat maps
- Community verification
- Mobile applications
My long-term goal is to make CivicFix a bridge between residents who identify problems and the organizations responsible for solving them.
Log in or sign up for Devpost to join the conversation.