Inspiration

We researched a lot of different ideas for all 4 verticals. We were hoping for an idea with a lot of oomph, something new that no one had thought of, but were quickly dissuaded of those notions. It's hard to think of something that no one else has thought of, especially in a time-limit.

We pivoted instead to looking for niche problems, with a smaller presence. Something that is a thorn in the side of many people -- large enough that solving it would make systems run more smoothly, but small enough that people hadn't bothered to target it yet and whose implementation would be financially feasible at scale.

Our research led us back to the communications track. Despite voice agents becoming common all over the world, the public consensus is still unfavorable from a customer point of view. A majority of customers are worried that their calls don't actually get to a real human and that

The scenario we chose to tackle was based on real events from a couple of years ago. After the January 2023 storms, a Los Angeles City Council motion described MyLA311 tickets that were closed or cancelled while the problem was still there, and residents who weren't sure their request had reached the right department. In March 2026, a council committee was still asking for reports on MyLA311 completion rates and backlogs.

What struck us was that the calls were being answered. The failure happened later, at the handoff. A report gets sent to a department, it shows as "assigned," and everyone assumes someone else has it. Nobody failed to answer. Nobody accepted.

The usual fix for a dropped case is a bang: escalate everything, page everyone. That works, but it buries supervisors in noise. We wanted the gentlest response that still works.

What it does

HandoffProof tracks the one state most systems skip: who has actually accepted responsibility for a case. Sent, assigned, acknowledged, accepted and resolved are five different things, and we keep them separate.

  • Links duplicate reports. Three calls about a blocked drain, water across the road and a stalled car become one emerging flood incident, with every caller's original words kept.
  • Escalates gently, one step at a time. If no one accepts a case, the department gets a reminder, then the on-call owner is proposed. Proposed is not accepted: it's only owned when someone taps Accept.
  • Asks the person who's actually there. If still no one has accepted, it calls back a resident, but only one who agreed to a callback during their original call.
  • Escalates on evidence, not timers. If the resident says it's getting worse, the case is pinned in a Critical lane for the supervisor with the resident's own words, and it stays there until a named person closes it.
  • Treats silence honestly. A callback nobody answers means "status unknown." It flags the case for review but never raises the risk score.
  • Flags quiet departments, not just tickets. During a surge, 50 calls collapse into four incidents, and a department that has accepted nothing gets one alert instead of fifty.

Dual use: on a Tuesday morning, it's the tool for a 311 service-request manager whose pothole and drain tickets bounce between departments. On a storm night, it's the same screen for the overnight supervisor. The engine fits any handoff a person has to accept, such as a shipping container passing between carrier and terminal, or an outage passing between utility crews, or residents calling their leasing office to report maintenance issues. The strongest aspect about this idea is the ability to plug it into virtually any vertical, in any country. It promotes transparency and holds people accountable to their duties.

How we built it

  • Backend: Python with FastAPI, served by uvicorn. It handles linking reports, the escalation ladder, risk scoring and an audit trail that records every acknowledge and accept with a name and a timestamp.
  • Frontend: a React web dashboard with incident lanes, the accountability chain for each case, a follow-up card for callbacks, and alerts for quiet departments.
  • Voice: Retell turns messy intake calls and callbacks into structured facts. Linking, risk and escalation are transparent rules a person can audit, not model decisions.
  • Demo tooling: a sped-up timing profile (seconds stand in for minutes), a simulated call mode labelled on screen, and a twist menu for call surges, a silent department and phones going down.
  • [Data: a fictional seed dataset with 555 numbers; no real resident data.]

Challenges we ran into

  • Telling assigned apart from accepted. Most ticket models stop at "assigned." Adding acknowledge and accept as separate, recorded actions meant rethinking the state model and the UI.
  • Deciding what silence means. It's tempting to treat an unanswered callback as "it got worse." We decided it means "unknown," because guessing wrong in either direction is dangerous.
  • Avoiding alert fatigue. A naive version flooded the supervisor. Linking duplicates, capping the top of the queue and rolling a quiet department up into one alert kept the dangerous case visible.
  • Consent and privacy. Calling residents back is powerful but intrusive, so consent is captured on the first call and checked before any outbound call.
  • Retell Integration It was a little tricky getting the voice agent to send out follow up calls. That took a lot of time for us to implement

Accomplishments that we're proud of

  • The whole storm-night scenario runs end to end on our own backend: linking reports, escalating, calling back with consent, and pinning the critical case on evidence.
  • A clear line between what AI does (pulls facts out of calls) and what people decide (escalation and closing a case).
  • Every decision in the audit trail has a name and a reason on it.
  • The same engine handles ordinary weekday tickets and a storm-night surge without a separate "emergency mode."
  • We got ghosted by a teammate, so tasks that were originally divided between 3 people had to be done by 2. A complete submission is a success for us

What we learned

  • The hard part of incident response often isn't detection or dispatch. It's ownership.
  • A gentle, staged escalation is easier for agencies to adopt than a loud one, because it doesn't punish them with noise on ordinary days.
  • In civic tech, the guardrails are the product: consent, honest handling of unknowns, and people making the final call.

What's next for HandoffProof

  • Explore a permissioned pilot with an agency partner through a storm season.
  • Measure what we haven't yet: time to accept, how often cases bounce, and whether callbacks surface worsening conditions sooner.
  • Look into recording calls so that they can be saved along with each ticket.
  • A security and procurement review of the voice layer, which is designed to be swappable.
  • Pursue potential federal research and procurement pathways, subject to eligibility.
  • Test the engine on a second handoff, such as utility outages or freight.

Built With

Share this project:

Updates

Submission history