Inspiration
In Lagos, and in most fast-growing cities without a unified 911-equivalent, an emergency report doesn't reliably reach the right people fast. A bystander who sees an accident, a fire, or a medical emergency often has no single number that routes them to the nearest available help — they call around, post on social media, or wait for someone else to act. Every AI-powered emergency tool we looked at, from RapidSOS to Motorola's dispatch suite, is built to sit on top of a professional dispatch center that already exists. That assumption breaks in exactly the places that need help most. We wanted to build the coordination layer itself — an agent that doesn't wait for a human dispatcher to triage and forward a report, but plans and carries out the response on its own.
What it does
QuickAlert takes a citizen's report — text, photo, video, or GPS location — and autonomously coordinates the response from intake to resolution. The agent classifies the emergency type (accident, fire, medical, flood, or security), estimates severity, identifies the nearest available responders and hospitals, drafts and sends a structured alert with the report's key details, and then monitors for acknowledgment. If no responder confirms within the escalation window, the agent automatically re-routes the alert to the next-nearest responder and widens the search radius — without a human dispatcher managing that loop by hand. Reporters can submit anonymously, share live location during an active incident, and see status update in real time. Responders and hospitals get a dashboard showing incoming reports ranked by severity and proximity.
How we built it
The core is an autonomous agent built with Google's Agent Development Kit on Gemini 3.5, accessed through Vertex AI. The agent owns the full response loop as a sequence of planned steps rather than a single classification call: intake and normalize the report, classify emergency type and severity, query nearby responders and hospitals via the Google Maps API, draft and dispatch the alert, monitor for acknowledgment against a timer, and escalate or re-route if that timer lapses. That loop runs asynchronously on Cloud Run so it keeps executing in the background independent of whether the reporter's session is still open, with report and escalation state persisted in Firestore. Firebase handles auth and media storage for uploaded photos and videos. The frontend — the reporting flow, the anonymous-reporting toggle, live location sharing, and the responder/hospital dashboard — is built in Next.js, React, and TypeScript.
Challenges we ran into
The hardest problem wasn't classification — Gemini handles that reliably — it was designing the escalation logic so the agent could make a good autonomous decision about when to stop waiting and re-route, without either escalating too aggressively on ambiguous reports or sitting silent on a genuine emergency. We settled on a severity-weighted timer: high-severity classifications get a short acknowledgment window and escalate to multiple responders in parallel, while lower-severity reports get a longer single-responder window before widening. Keeping that state correctly synced through Firestore across an asynchronous, potentially multi-hour escalation chain — rather than a single request/response cycle — was the other real engineering problem, since the agent has to resume its plan correctly even if no one is watching.
Accomplishments that we're proud of
Getting a genuinely autonomous, multi-step escalation loop running end-to-end on Cloud Run — not a chatbot that describes what it would do, but an agent that classifies, contacts, waits, and re-routes on its own — is the piece we're most proud of. We can point directly to the Cloud Run execution logs showing the agent picking up a report, dispatching an alert, timing out, and escalating without any manual intervention, which is the proof this is acting autonomously rather than simulating it in a demo script.
What we learned
Most AI emergency tools are designed to make a human dispatcher faster — better transcripts, better summaries, better triage suggestions for a person who still holds the final decision. Removing that human from the loop changes the core design problem entirely: instead of "summarize this well for a person," it becomes "decide confidently enough to act, and know when your own decision needs to be revisited." Building the escalation logic taught us that autonomous emergency response isn't really an AI-classification problem, it's a state-management and timing problem wrapped around a classification.
What's next for QuickAlert — Autonomous First Response
Near-term, we want to add multi-language support for reporting, since a system meant to work where formal dispatch doesn't exist has to work across the languages people actually speak on the street. We also want to pilot integration with real community responder networks and local hospitals rather than simulated ones, and use real incident data to tune the escalation timers instead of the estimates we used for the demo.
Built With
- cloaudinary
- firebase
- firestore
- gemini
- nextjs
- tailwindcss
- typescript
Log in or sign up for Devpost to join the conversation.