A Smart Transparent Public Grievance System
CivicVoice
Overview
I built CivicVoice as a full-stack web application over a series of stages, starting with the backend before touching any UI. First I set up a Node.js and Express server with a database, defining tables for citizens, complaints, evidence, officer actions, and officers. I added secure authentication using email OTP verification and JWT tokens, and encrypted every citizen's name, phone, and Aadhaar with AES-256 so only a randomly generated pseudonymous Citizen ID is ever public. Next I built the complaint pipeline: a three-step filing flow that captures details with a live GPS map location, requires mandatory photo evidence, and passes everything through an AI proof gate. I integrated the Google Gemini vision API so the AI actually examines each uploaded image to confirm it genuinely shows the reported problem, automatically assigns the correct category and priority, and rejects fakes — plus a duplicate detector that compares new complaints against existing ones by text similarity and location proximity. Every accepted complaint is sealed with a SHA-256 hash to make it tamper-proof. Then I built the frontend in Next.js — the homepage, login/register, complaint filing form with a Leaflet map, public complaint listings, detail pages with action timelines and QR codes, an officer portal, an admin analytics dashboard, and a public complaint map. I added department auto-routing, automatic email notifications on every status change, an AI chatbot, and multilingual support in English, Hindi, and Tamil. Finally I migrated the database from local SQLite to Supabase PostgreSQL with Supabase Storage for evidence files, pushed everything to GitHub, and deployed the backend on Render and the frontend on Vercel — giving a fully live, publicly accessible application.