Inspiration

One of us remarked on how during his National Service days as a Ground Response Force under Singapore Police Force that it was hectic to send in reports to government agencies that do not fall under his organisation's jurisdiction as he had to write detailed reports for his duty. He noticed that similar to his organisation, there might be a lot of reports for the OneService app to handle manually.

Thus, we wanted to introduce a platform that makes it easier for both citizens and government agencies to handle civic issues through an AI-assisted layer. CivicLens is not designed to replace existing platforms such as OneService. Instead, it explores an AI-assisted layer for civic reporting: helping citizens submit simpler reports while helping agencies convert those reports into structured, prioritised maintenance cases.

What it does

CivicLens is an AI-powered civic infrastructure reporting platform that allows citizens to report public issues quickly and clearly.

A citizen can:

  • Upload photo or video evidence of a civic issue
  • Enter or select the location
  • Add a short description
  • Submit the report

After submission, CivicLens uses AI to analyse the report and generate structured information for agencies. The system can identify the likely issue type, estimate severity, score authenticity, recommend the responsible agency, and generate a professional maintenance-style report.

For agencies, CivicLens provides a dashboard where submitted reports can be viewed, filtered, prioritised, and managed. Instead of reading every citizen report from scratch, agencies can see structured data such as issue category, severity, priority score, authenticity score, location, and report status.

We also use a simple priority scoring idea:

$$ Priority = Severity + DuplicateReports + LocationImpact + Authenticity $$

This helps urgent, repeated, or high-impact issues appear higher in the agency dashboard.

How we built it

We built CivicLens as a full-stack web application.

For the frontend, we used Next.js, TypeScript, and Tailwind CSS to create a clean civic-tech interface for both citizens and agencies. The citizen side focuses on a simple report submission flow, while the agency side focuses on clarity, filtering, and report management.

For the backend and database, we used Supabase to store user profiles, reports, uploaded media, report statuses, and activity logs. Supabase Storage is used to handle uploaded images or videos, while the database stores the structured report data.

For AI analysis, we integrated Reka to process the submitted media and description. Reka helps analyse the visual evidence and generate useful structured outputs such as issue type, severity level, authenticity score, and a professional report summary.

We also designed the system architecture around a simple flow:

Citizen submission → Backend API → AI analysis → Supabase database → Agency dashboard

This allowed us to separate the citizen reporting experience from the agency review experience while still keeping the full report lifecycle connected.

Challenges we ran into

One challenge was deciding the right scope for the project. Civic reporting can become very large very quickly, with maps, agencies, routing, duplicate detection, authentication, AI analysis, dashboards, and admin tools. We had to focus on building a working MVP instead of trying to build a full national-scale system.

Another challenge was making the AI output useful and structured. A normal AI response is not enough for an agency dashboard. We needed the analysis to return consistent fields such as issue type, severity, authenticity, recommended action, and priority score so that the data could actually be stored and displayed properly.

We also faced challenges connecting the different parts of the stack together. The citizen report form, file upload, Supabase database, Reka analysis, and agency dashboard all had to work as one flow. Small issues in authentication, database policies, uploaded files, or API responses could break the user experience.

The map and location system was another challenge. Civic reports are location-based, so we needed to think about how to store and display locations properly, especially when users enter location text instead of exact coordinates.

Accomplishments that we're proud of

We are proud that CivicLens is more than just a landing page. It has a real product flow where citizens can submit reports and agencies can review structured cases.

We are also proud of the AI-assisted reporting layer. Instead of asking citizens to write long and detailed reports, CivicLens can take a short description and visual evidence, then generate a clearer maintenance report for agency use.

Another accomplishment is the agency dashboard. It shows how AI can help turn unstructured citizen complaints into organised cases that can be filtered, prioritised, and acted on.

Most importantly, we are proud that our project addresses a real civic problem. Even small public issues, such as cracked pavements, broken lights, flooding, or obstructions, can affect safety and daily life. CivicLens shows how AI can reduce friction for citizens while helping agencies respond more efficiently.

What we learned

From the technical side, we learned how to connect a modern full-stack application using Next.js, Supabase, file storage, authentication, API routes, and AI integration. We also learned how important it is to keep the user experience simple, especially for civic reporting, because citizens are less likely to report issues if the process feels too long.

As a team, we learned how to divide work across frontend, backend, AI integration, and product documentation while still keeping one shared product vision.

What's next for Civic Lens

Next, we want to improve the location and map system by adding better geocoding, accurate coordinates, and map-based report clustering. This would help agencies see issue hotspots more clearly.

We also want to improve duplicate detection by comparing reports based on location, category, time, and image similarity. This would reduce repeated manual review and help agencies understand how many people are affected by the same issue.

Another future improvement is agency routing. CivicLens could recommend which agency or town council should handle a report based on issue type and location.

In the long term, CivicLens could become an AI-assisted civic reporting layer that works alongside existing public service platforms, making reporting easier for citizens and maintenance prioritisation clearer for agencies.

Built With

Share this project:

Updates