CivicSathy
A complaint and infrastructure tracking system designed for Itahari Sub-Metropolitan City.
A broken road or an overflowing drain is reported by phone, forgotten, and reported again. CivicSathy gives every complaint a tracking ID, a location on a map and an AI severity estimate, so a municipality can see where problems cluster and act on the worst first.

The problem
Ward offices in a growing city like Itahari receive complaints about roads, sanitation, water, electricity, flooding and safety through calls and visits. The same problem gets reported many times, and nobody has a clear picture of which wards need attention.
What I built
Citizens register with their ward, report a problem with a category, location, map pin and optional photo, and follow it with a tracking ID such as CS-W5-A3B7. Others can mark that they are affected or comment. Administrators triage tickets, assign teams and vehicles, broadcast announcements, and publish resolution reports.
This was a team project with five developers. I wrote 52 of the 182 commits.

What it does
For citizens
- Complaints with category, ward, location, map pin, photo and an anonymous option
- Tracking IDs per ward
- A public feed with "I'm affected" votes and comments
- Duplicate warning for similar reports within about 200 metres
For the municipality
- AI triage of severity, team, equipment, hours and vehicles
- Task assignment with teams and vehicles
- Escalation list for tickets pending more than 48 hours
- Ward heatmap and PDF reports

How it's built
| Language | Java 17 |
|---|---|
| Web | Jakarta Servlet 6, JSP, Apache Tomcat 11, Maven |
| Data | MySQL, 14 tables with foreign keys |
| AI | Google Gemini 2.5 Flash over REST, with the complaint photo sent as image input |
| Maps and reports | Leaflet with a heat layer on OpenStreetMap; OpenPDF |
| Structure | MVC with a DAO layer: 22 servlets, 11 DAOs, 11 models |
CivicSathy follows a classic MVC structure on Jakarta Servlets with a DAO layer over MySQL. Every query is a prepared statement, and authentication filters protect citizen and admin areas with 30-minute sessions.
Engineering highlights
AI that looks at the photo
When an administrator runs the analysis, the complaint text and photo go to Gemini together. It returns a severity from low to critical, a suggested team, equipment, estimated hours, team size and a vehicle, which are stored with the ticket.
Fewer duplicate reports
Before a complaint is submitted, the system looks for similar titles within roughly 200 metres using a Haversine distance query, and shows them to the citizen first.
A map of where problems are
A Leaflet heatmap shows complaints by location across the city's wards, so administrators can see clusters at a glance.
Screens


Where it stands
CivicSathy was built as a university team project and is not in production use. The source code is on GitHub, and the screens on this page come from a local run with demo data.
If I took it further, I would replace the SHA-256 password hashing with argon2id and add CSRF tokens before any real deployment. Knowing what a project still needs is part of the job.
Planning a product like CivicSathy? I design, build and launch web apps for businesses in Nepal and abroad.