CivicPatch — Make Every Fix Accountable.
💡 Inspiration
Campus maintenance problems are part of everyday institutional life. A broken water tap, damaged electrical switch, malfunctioning elevator, or inaccessible facility can affect dozens of students.
Yet reporting a problem does not always mean it gets fixed. Complaints can disappear into informal communication channels, maintenance requests can remain unanswered, and issues can be marked as resolved without confirmation from the people who originally reported them.
We identified an important gap in traditional maintenance ticketing systems: the person responsible for resolving an issue often has the final say in whether it is considered complete.
But what if the repair was unsuccessful?
That question inspired us to build CivicPatch, a campus maintenance accountability platform that makes every reported issue traceable, every resolution transparent, and every repair open to verification.
Our guiding principle is simple:
A repair should not be considered complete just because someone marks it as resolved. It should be verified by the person who reported the problem.
🚀 What it does
CivicPatch creates an end-to-end maintenance accountability workflow.
1. Public Issue Board
Students and campus members can browse reported maintenance problems, search issues, apply filters, inspect details, and view their activity history.
2. Structured Issue Reporting
Users can report problems with descriptions, categories, building locations, and priority levels. A deterministic duplicate suggestion engine identifies potentially similar reports without automatically merging or discarding submissions.
3. Maintainer Operations Queue
Maintenance teams get a dedicated interface to review reports, acknowledge issues, start work, and submit resolution notes.
4. Reporter Verification — Our Core Innovation
When a maintainer submits a resolution, the issue enters Resolved — Unconfirmed status.
The original reporter can then:
- Confirm Resolution: Verify that the reported problem has actually been fixed.
- Dispute Resolution: Explain why the issue remains unresolved and return it to the maintenance workflow.
This separates a maintenance team's resolution claim from the reporter's confirmation of the actual outcome.
5. Accountability Intelligence Dashboard
The /accountability dashboard provides deterministic operational insights, including:
- Median first-response time.
- Median resolution time.
- Reporter confirmation and dispute rates.
- Overdue issue monitoring.
- Building-level maintenance hotspots.
- Maintenance category distributions.
- A public verification ledger of important issue milestones.
These insights help make maintenance performance easier to understand and recurring problems easier to identify.
🛠️ How we built it
CivicPatch was developed as a full-stack web application with a focus on reliable workflows, clear user experiences, and data integrity.
Frontend
- React 18
- TypeScript with strict type checking
- Vite 5
- Tailwind CSS
- Radix UI accessible primitives
- Google Material Symbols Outlined
Backend and database
- Supabase
- PostgreSQL
- Row-Level Security (RLS)
- Database triggers
- PostgreSQL RPC functions
- Append-only issue event history
Testing and quality
- Vitest
- React Testing Library
- Playwright
- ESLint
- TypeScript type checking
We organized development into incremental phases, beginning with the public issue board and application foundation, followed by authentication, reporting, maintainer workflows, security-oriented lifecycle validation, and finally accountability analytics.
The database architecture uses role-aware access policies and controlled state transitions to protect important operations. Issue milestones are recorded in an event history so that changes can be inspected rather than relying only on the current status.
🧠 Challenges we faced
One of the biggest challenges was designing an issue lifecycle that accurately represents the real-world maintenance process.
A conventional ticketing system might move an issue directly from in_progress to resolved. However, that would not tell us whether the repair was actually successful.
We introduced a separate resolved_unconfirmed state and reporter-only confirmation and dispute actions. This required careful consideration of role permissions, valid status transitions, database triggers, and audit history.
Another challenge was ensuring that users could not manipulate accountability records. We implemented database-level restrictions, append-only event history, and role-based access controls.
We also had to make the analytics meaningful. Instead of relying on arbitrary scores or AI-generated estimates, we implemented deterministic calculations using issue and event timestamps. This makes the reported metrics explainable and reproducible.
Finally, we focused on making a relatively complex workflow understandable through a clean, responsive interface.
📚 What we learned
Building CivicPatch strengthened our understanding of full-stack application development, relational database design, authentication, and authorization.
Some of our most important takeaways were:
- Why database-level security is essential beyond frontend validation.
- How to design reliable state machines for real-world workflows.
- Why audit trails matter for transparency and accountability.
- How deterministic analytics can turn operational records into useful insights.
- How to build interfaces that communicate complex workflows without overwhelming users.
- Why testing complete user journeys is as important as testing individual components.
Most importantly, we learned that a good maintenance platform should measure more than how many tickets are closed. It should help establish whether the underlying problems have actually been resolved.
🌱 What's next for CivicPatch?
CivicPatch is currently presented as a demonstration-ready platform with synthetic sample data.
Our next steps include:
- Connecting and validating a live Supabase deployment.
- Conducting real-world pilot testing with campus maintenance teams.
- Introducing evidence attachments for reported issues and proposed repairs.
- Adding configurable maintenance service-level agreements.
- Expanding facility reliability and recurring-incident analytics.
- Exploring integrations with institutional maintenance workflows.
These improvements would help take CivicPatch from a demonstration platform toward a practical campus maintenance accountability solution.
❤️ Final Thought
CivicPatch is not just another complaint-reporting application.
It is an attempt to close the gap between reporting a problem and ensuring that it is genuinely fixed.
A report deserves a response. A repair deserves verification. Every fix deserves accountability.
Thank you for taking the time to explore CivicPatch.
CivicPatch — Make Every Fix Accountable.
Built With
- civic
- data-analytics
- database
- full-stack-development
- playwright
- postgresql
- radix-ui
- react
- row-level-security
- supabase
- tailwind-css
- typescript
- vite
- vitest
- web-application
Log in or sign up for Devpost to join the conversation.