Civic complaint systems fail in three ways: fake or recycled photos, duplicate tickets that bury officers, and no accountability for who is fixing what. Elderly and non-tech-savvy citizens are also shut out by long forms. CivicLens fixes this end to end. Citizens report issues with a live camera photo (gallery uploads are disabled) and a GPS lock. Reports in the same category within 30 metres merge into one ticket and add a vote instead of creating clutter. One vote per citizen; at 10 votes a ticket becomes Community Verified. Voice is the accessibility layer. Citizens tap the mic and describe the problem in their own words. The audio is sent to AssemblyAI speech-to-text, and the transcript is turned into a title, category and emergency flag that auto-fill the form. Emergencies such as a live wire or fire skip voting and go straight to In Progress. Officers log in to a department-routed dashboard that shows only their categories plus every emergency. An officer claims a ticket so nobody duplicates work, then must capture a live after-photo to resolve it, closing the fraud gap on the municipal side too. Each ticket has a downloadable PDF docket with the proof photo and GPS pin. Officers are created only by a Super Admin. Built with Flask, SQLite, Leaflet, ReportLab and AssemblyAI. Classification is keyword-based today; an LLM upgrade is planned.
Category tags: