12Case study · Municipal complaint system

CivicSathy: A Municipal Complaint System with AI Triage

CivicSathy is a complaint and infrastructure tracking system designed for Itahari Sub-Metropolitan City. Citizens report a problem with a photo and a map pin, and the municipality triages it with Gemini. I built it in Java as a university project in April and May 2026, and the source code is on GitHub.

  • A tracking ID for every complaint, such as CS-W5-A3B7
  • Gemini reads the photo and suggests severity, crew and vehicle
  • Duplicate warnings for reports within about 200 metres
CivicSathy municipal complaint system shown on desktop and mobile

01The problem

The Problem with Municipal Complaints in Itahari

A broken road or an overflowing drain is reported by phone, forgotten, and reported again.

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.

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.

02The solution

What I Built: Report, Track and Triage in One System

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 crews and vehicles, broadcast announcements and publish resolution reports. It is the kind of management system an organisation runs every day.

The CivicSathy citizen app on three phones: report, track and follow up, with demo data
The citizen app: report, track and follow up. Local run with demo data.

03Features

What CivicSathy Does for Citizens and the City

Two sides of one ticket: the citizen who reports it and the municipality that has to fix it.

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
  • A duplicate warning for similar reports within about 200 metres

For the Municipality

  • AI triage of severity, crew, equipment, hours and vehicles
  • Task assignment with crews and vehicles
  • An escalation list for tickets pending more than 48 hours
  • Ward heatmap and PDF reports
The CivicSathy ward heatmap across Itahari, with demo complaints
The ward heatmap across Itahari, with demo complaints.

04Architecture

CivicSathy Architecture and Tech Stack

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 the citizen and admin areas with 30-minute sessions.

  1. Citizen and adminJSP viewsLeaflet maps and OpenPDF reports
  2. WebJakarta Servlet 622 servlets on Apache Tomcat 11
  3. DataMySQL14 tables, reached through 11 DAOs
  4. AIGemini 2.5 FlashComplaint text and photo sent together

The CivicSathy Tech Stack

The AI step runs when an administrator asks for it, and its suggestions are stored with the ticket, so every triage decision can be reviewed later, much like the audit log in Eutaa.

Language
Java 17
Web
Jakarta Servlet 6JSPApache Tomcat 11Maven
Data
MySQL14 tables with foreign keys
AI
Google Gemini 2.5 Flash over RESTThe complaint photo as image input
Maps and reports
Leaflet with a heat layerOpenStreetMapOpenPDF
Structure
MVC with a DAO layer22 servlets11 DAOs11 models

05Engineering

Engineering Decisions Behind CivicSathy

The three decisions that shaped CivicSathy, and why I made them. Each one solves a problem a real user would hit.

01

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 crew, equipment, estimated hours, crew size and a vehicle, which are stored with the ticket. RecruitFlow uses Gemini with the same care.

02

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. The data model behind it is plain database design done carefully.

03

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, and tickets pending more than 48 hours move to an escalation list.

06Screens

Screens from a Local Run

A single ticket with Gemini’s recommendation, and the full ticket table administrators work from. Demo data only.

07Status

Where CivicSathy Stands Today

CivicSathy was built as a university 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.

CivicSathy

University project, source on GitHub

Before any real deployment, two security changes come first. Knowing what a project still needs is part of the job.

What I’d Do Next

  1. Replace the SHA-256 password hashing with argon2id.
  2. Add CSRF tokens to every form that changes data.
  3. Send citizens an SMS when their ticket changes status.

Related services

Need a System Like CivicSathy?

These are the services behind this case study. Each page lists prices, timelines and how I work, and every starting price is on my services page.

Every project, with its stack and status side by side, are in my web development portfolio, and the person behind them is on my about page.

FAQ: CivicSathy Complaint System

What CivicSathy does, how it uses AI and whether Itahari uses it.

Ask me on WhatsApp

What is CivicSathy?

CivicSathy is a complaint and infrastructure tracking system designed for Itahari Sub-Metropolitan City. Citizens report problems such as broken roads, sanitation, water, electricity, flooding and safety with a map pin and photo, and administrators triage, assign and resolve them ward by ward.

How Does CivicSathy Use AI?

When an administrator runs the analysis, the complaint text and photo go to Google Gemini 2.5 Flash together. Gemini returns a severity from low to critical, a suggested crew, equipment, estimated hours, crew size and a vehicle, and those suggestions are stored with the ticket for review.

How Does CivicSathy Detect Duplicate Complaints?

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. The citizen can then mark that they are affected by an existing report instead of filing a new one.

Which Technologies is CivicSathy Built With?

CivicSathy is written in Java 17 on Jakarta Servlet 6 and JSP, running on Apache Tomcat 11 and built with Maven. It uses MySQL with 14 tables, Leaflet with a heat layer on OpenStreetMap for maps, OpenPDF for reports and Gemini 2.5 Flash over REST.

Is CivicSathy Used by Itahari Sub-Metropolitan City?

No. CivicSathy was designed for Itahari Sub-Metropolitan City as a university project, and it 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.

Can You Build a Complaint or Ticketing System for My Organisation?

Yes. I build custom management systems, including ticketing, complaints, tasks and reports, that fit how an organisation already works. For real use they ship with argon2id passwords, CSRF protection and role-based access from day one, and they are quoted per module. See management systems for details.

Planning a System Like CivicSathy?
I’ll Send a Fixed Quote.

Send a short note about your project and budget. I reply within one working day with questions or a first estimate.

Ujjwal RupakhetiReplies within one working day

What are you planning?

Opens WhatsApp with your message started.