Learn the language of emergencies.

Inspiration

911 dispatchers are incredibly important to our society, yet the systems in place to support them are so outdated.

It takes 1.5 years to hire, recruit, and train a single dispatcher, since emergency services must hold lengthy practice roleplays and even longer on-the-job situation training. This friction leads to a chronically understaffed dispatcher force. In fact, in peak hours around 5:00pm, people need to wait up to 11 minutes just to have their call answered. These are 11 critical minutes where a victim could be suffering from injuries, and a suspect could be fleeing.

What it does

We built Duolingo for dispatchers. Learning the language that saves lives.

dispatchlingo aids dispatcher training by providing a variety of real-time AI training situations. The trainee receives a call from a low-latency ElevenAgent tuned to a panicked attitude to mimic real human reactions to emergency situations like robberies and house fires. As the trainee responds to the call and fills in crucial situation information, Presage is used to monitor vitals such as heart rate, breathing rate, and facial expression. Combining the three, dispatchlingo uses a complex formula to calculate a composure score that decreases as the dispatcher trainee becomes more nervous. As the trainee's composure score decreases, the ElevenAgent is prompted to become more distressed, similar to a human caller's reaction to a nervous dispatcher.

After the call, the trainee is evaluated based on 3 factors:

  1. Their average composure score
  2. Text response analysis with Google Gemini
  3. Their accuracy when taking down Incident Details

Upon passing a scenario, the dispatcher is directed to a more difficult and complex situation, ensuring a thorough education.

How we built it

Presage

Predicts heart rate and breathing rate, and this information is not only displayed on screen; it is crucial to the course: Composure tracking Call evaluation Caller reaction to stress

ElevenLabs

Each situation is a separate ElevenAgent To create the most realistic and panicked tone, each agent is trained on a nervous voice, and the following settings are applied:

  • Model = Eleven Flash v2.5
  • LLM temperature = 1
  • Eagerness = Eager
  • Take turn after silence = 1 second

Gemini

Grades the call once the trainee hangs up. The transcript, the trainee's incident notes, and a vitals summary go to Gemini with a fixed JSON schema. It scores their responses, covering what they did well and what to improve, and it scores incident accuracy by comparing their answers against the scenario's ground truth.

Auth0

Handles sign-in through Universal Login, Google, SSO, and passwordless. It is enforced on every route, and it always keeps a "Try the demo, no login" guest path.

Next.js + React

The frontend plus a thin Node backend. Webcam frames stream at about 30 fps to a long-lived Node process that holds a per-session Presoll back at 1 Hz. Voice runs between the browser and ElevenLabs over WebRTC, and the server only mints the token and never touches the audio.

Composure engine

Ties Presage and ElevenLabs together.g, and facial tension collapses into one composure score of red, amber, or green. A director state machine sends silent [DIRECTOR] cues to the caller during the call. When the trairades and panics are harder. When the trainee stays calm, the caller stabilizes. The trainee's own body sets the difficulty in real time, and this loop is the product.

Challenges we ran into

  • Implementing Presage on the web
  • Engineering realistic, panicked, and low-latency ElevenAgent tones

Built With

Share this project:

Updates