Inspiration

Civic problems like broken streetlights, garbage, damaged roads, and water leakage are common, but reporting them is often only the first step. Complaints may lack important details, be difficult to prioritize, or be reported multiple times.

I wanted to build a system that could turn a simple citizen complaint into structured, actionable information for administrators. This idea became CivicFlow – AI Community Action Platform.

What I Built

CivicFlow is a web-based civic complaint management platform with two sides:

  • Citizen side: citizens can submit civic complaints and receive a generated case ID.
  • Admin side: administrators can view, search, filter, prioritize, route, and update civic cases.

The system analyzes each complaint and extracts information such as category, location, priority, evidence score, confidence, missing information, recommended action, and department routing.

It also compares new complaints with existing cases to identify possible duplicates.

Strands AI Integration

A major part of CivicFlow is its agent-based reasoning layer.

I integrated the Strands Agents SDK with a local Ollama model running Llama 3.2.

The backend first creates structured civic analysis using deterministic Python logic. This structured information is then passed to the Strands agent, which explains the analysis in a short, human-readable format.

This separation helped me keep the core civic classification predictable while still using an AI agent for reasoning and explanation.

How I Built It

I built CivicFlow using Python and Flask for the web application and backend logic. SQLite is used to persist complaint and status information.

The main workflow is:

  1. Citizen submits a complaint.
  2. CivicFlow classifies the issue.
  3. The system extracts the reported location.
  4. Priority and evidence score are calculated.
  5. Missing information is identified.
  6. The complaint is routed to a department.
  7. Existing cases are checked for possible duplicates.
  8. Strands Agent explains the structured analysis.
  9. The case is stored in SQLite.
  10. Administrators manage the case through the dashboard.

What I Learned

Building CivicFlow taught me how to combine traditional application logic with an AI agent instead of treating an LLM as the entire application.

I learned how to work with the Strands Agents SDK, connect an agent to a local model using Ollama, design tool-based agent workflows, work with Flask and SQLite, and build a complete citizen-to-admin workflow.

I also learned that making an AI application reliable requires clear boundaries around what the agent should and should not generate.

Challenges

One of the biggest challenges was getting the AI agent environment working.

Initially, I tried using the default Bedrock model, but the required model authorization was not available for my account. Instead of stopping there, I explored the provider-agnostic nature of Strands and moved to a local Ollama setup.

I installed Ollama, downloaded Llama 3.2, connected it with the Strands Agents SDK, and successfully integrated the agent into CivicFlow.

Another challenge was making the application useful rather than just demonstrating an AI response. I solved this by combining the agent with structured complaint analysis, duplicate detection, routing, evidence scoring, persistence, and an administrator dashboard.

Why CivicFlow

CivicFlow is designed around a simple idea:

A civic complaint should not just be reported — it should become actionable.

By combining structured analysis, AI agent reasoning, and case management, CivicFlow provides a practical workflow from citizen complaint to administrative action. Inspiration

What it does

How I built it

Challenges I ran into

Accomplishments that I'm proud of

What I learned

What's next for CivicFlow AI

Built With

Share this project:

Updates