InfraAlert has two sides. Citizens drop a pin on the map, describe the problem in their own words and add photos, with no account needed. City staff get a control room: a queue of incidents on a map, and the tools to triage them and dispatch a repair crew.
Who decides what
The model reads each report and pulls out the issue type, any hazards, and how confident it is. It decides nothing. Priority comes from a fixed formula that weighs the hazard, the issue type, nearby sensitive places such as hospitals and clinics, and how many people reported the problem. Any life-safety hazard lifts the score to critical, whatever the sum. Staff see exactly how each score was built.
A dispatcher picks the team, and the system suggests the nearest one with the right skills. When the model can't read a report, it goes to a person to classify. The citizen's status page follows each step, without the staff-only detail.
Built with FastAPI, React, Postgres and PostGIS, Gemini on Vertex AI, Cloud Tasks and Cloud Run.