Inspiration

In August 2017, Hurricane Harvey flooded Houston. In the 17 hours after landfall, Houston's 911 system received more than 56,000 calls. On a normal day it gets 8,000 to 9,000. One volunteer waited 45 minutes on hold just to reach an operator. Thousands of stranded people turned to Facebook, Twitter and Nextdoor instead, hoping a neighbor with a boat would see their post.

We're students in Houston, and floods here keep coming back. So we asked: when every 911 operator is busy, what if the caller wasn't left on hold?

What it does

LifeLineAI is an overflow rescue line for flood disasters. It only steps in when human operators can't.

  • An AI voice agent answers the call. It asks one question at a time: is anyone in danger, where are you, how many people, how high is the water, is anyone elderly, disabled or a baby, does anyone need medicine or oxygen, and how much phone battery is left. It reads the address back to confirm.
  • The case shows up while the caller is still talking. The agent sends details to our backend during the call, and a pin drops on the dispatcher's map in real time.
  • Life threats are flagged right away. If someone isn't breathing, is unconscious, or is in deep water, the agent flags it mid-call and the case goes red.
  • Priority comes from plain rules, not AI. Water depth, rising water, medical needs, vulnerable people, someone who can't evacuate alone, low battery, time waiting. Every point is listed on the case, so a dispatcher can see exactly why it ranks where it does.
  • A live dispatcher dashboard has a map of Houston with color-coded pins (Immediate, Urgent, Delayed), a queue sorted by priority, and the call transcript with an English translation.
  • Social media posts become cases. Paste a post, even in Spanish, and Gemini pulls out the address, people and danger, then creates a scored case.
  • Repeat callers are matched to their open case instead of creating a new one, and the dispatcher sees how many times they've called.
  • Harvey surge mode simulates 300 calls in 60 seconds, so you can watch the queue sort itself and see the gap between incoming calls and what human operators could answer.

Humans make every decision. LifeLineAI doesn't dispatch anyone and doesn't promise rescue times.

How we built it

  • ElevenLabs Agents: the voice intake agent, with three server tools (lookup_caller, flag_critical, submit_rescue_request) that call our backend live during the conversation. A signed post-call webhook sends us the transcript.
  • Gemini API: after a call, Gemini translates the transcript to English, writes a summary, and fills in details the agent missed. If a call drops early, Gemini rebuilds the request from the transcript. It also turns social posts into structured cases using JSON-schema output. We rotate between several API keys to stay under free-tier limits.
  • FastAPI backend: rule-based priority scoring, geocoding to Houston neighborhoods, and WebSockets for live dashboard updates.
  • Tiger Data (TimescaleDB): a call_events hypertable and a continuous aggregate (calls_per_minute) that powers the live surge chart.
  • React + Leaflet: the dispatcher dashboard.
  • Vultr: production server, with Caddy for HTTPS on our domain, lifeline-ai.us.

Challenges we ran into

  • The AI made things up. In testing, Gemini added "woman not breathing" to a case where nobody said that. That's dangerous in an emergency tool, so we kept AI out of scoring entirely.
  • Scoring edge cases. An elderly wheelchair user, alone in knee-deep water, first scored "Delayed" because our rules mostly weighed water depth. We added a "can't evacuate alone" rule, and the case now scores Urgent. We also found a prank call claiming 100 people, and "none reported" being counted as an injury.
  • Free-tier limits. Gemini's free tier only allowed about 20 requests a day per model, so we rotate between keys, and live calls never wait on Gemini.
  • Deploying overnight. Moving from a laptop tunnel to a real server with HTTPS at 1 AM, then pointing a domain at it.

Accomplishments that we're proud of

  • A caller talks to the agent, and their case appears on the map before they hang up.
  • Scoring a dispatcher can actually check. No black box.
  • Surge mode makes the problem visible in 60 seconds.
  • It's live at lifeline-ai.us, not just running on a laptop.

What we learned

  • In safety-critical software, AI should collect and translate. Rules and humans should decide.
  • Voice design matters: one question at a time, short turns, read addresses back.
  • Plan for failure: dropped calls, dying phone batteries, API limits, bad Wi-Fi.

What's next for LifeLineAI

  • Callbacks: when a dispatcher assigns a team, call the person back in their language with the ETA.
  • Merging duplicate reports of the same address from different callers or posts.
  • SMS intake for people who can't talk safely.

Try it out yourself! DISPATCH KEY: Q43fKww3fuBL4KVwVU_jmOAp Dispatch Number: +1 (346) - 268 - 5216

Built With

Share this project:

Updates

Submission history