Inspiration
A route to a structure is only useful if the crew can still get back after the work is done. In a wildfire, the road home can burn while people are still on site. That is a navigation problem and a coordination problem at the same time: someone has to decide what is worth attempting, and the people in the field have to judge whether they can actually carry it out.
We built Ember Line so that decision is something you can practice. A human coordinator sets objectives the way an incident desk would, in plain language over a radio. Autonomous crews then check the approach, the work, and the return against what they know and against forecasts of how the fire might move. The goal is to teach how fire coordination works when information is incomplete and the map keeps changing.
What it does
Ember Line is a five-minute wildfire coordination simulation. You sit at a Three.js incident desk with three protection crews, sites to defend, and refuges to fall back to. You talk to the crews by text or push-to-talk. Each crew evaluates the order against its own observations, a set of plausible fire futures, and whether the roads it needs are free. It can accept the mission, or explain why it cannot.
While a crew works, the fire keeps spreading. Protection and containment change what happens on the ground. The run records decisions, work, losses, and how the incident ends, so you can replay what happened and see the consequence of each call. It is a simulation for learning coordination, built so the choices and their limits stay visible.
Built with Grok Voice
You talk to the crews the way a dispatcher would. Hold the radio button, give an order, and hear the crew answer back. Grok is the radio. The crew still decides whether the mission is possible. Speech becomes an order. "Crew 2, protect Ridge Cabins" is heard, addressed to that crew, and turned into a real objective: protect a site, come home, hold, or move. If the order is unclear, the crew asks you to say it again, and stays on its last plan. A crew can accept or refuse out loud. The reply is the decision it actually made, spoken back over the radio. Agreeing to a site, turning one down, or pulling out early all come through as voice, so you hear the call while you watch the map. The fire keeps moving while you talk. Crews travel, work, and withdraw on their own. The radio catches up with what already happened, including a lost crew or the end of the incident.
How we built it
The project is a TypeScript monorepo. Domain contracts, the simulation, per-crew knowledge, forecasting, navigation, agents, communication, and replay each live in their own package, with a Node server and a React frontend on top.
The simulation is the authority: it alone advances the world. Crews plan with a timed mission search. A candidate mission is one concrete trip out, a work interval, and a return to refuge, and that same plan has to hold across every fire future the crew still considers plausible. Language never authorizes a route by itself. xAI speech recognition turns a push-to-talk turn into text, optional Grok chat turns that text into a schema-checked intent, and xAI speech synthesis speaks the crew’s report. The crew’s accept-or-refuse decision stays deterministic, so a run can be replayed from the actions that were actually applied.
Challenges we ran into
The hard part was making a crew able to handle the fire, not just walk toward it. A crew that only follows a path never protects anything, never changes the spread, and never has to leave early. We had to give each crew a full job: reach the site, do useful work, keep checking whether the return is still open, and withdraw when it is not. Forecasts, road reservations, and the crew’s own limited knowledge all had to agree before a mission was allowed to start.
The navigation algorithm was the other long fight. A shortest path looks fine at the moment you draw it and fails as soon as the crew spends time working. Hazards are time-dependent, other crews occupy roads, and the escape margin shrinks while the work is still unfinished. We ended up searching a timed mission — approach, work, and return together — and rejecting any plan that could not get the crew back inside the forecast window. Tuning that search so crews would take on real work, without walking into a fire they could not leave, took most of the iteration.
Accomplishments that we're proud of
We are most proud of putting algorithms, agents, and an interface in one product that teaches fire coordination.
The algorithms certify a whole mission against uncertain fire, instead of drawing a line on a static map. The agents are crews with their own knowledge and their own authority: they can accept an objective, refuse it, or leave work behind when the return stops being viable. The interface is an incident desk you operate by voice and by map, where you watch routes, work windows, and radio traffic as the fire moves. None of those pieces teaches the lesson alone. Together they let someone feel why coordinating a fire is harder than sending people to a pin.
What we learned
A natural way to give orders still needs a hard boundary on who is allowed to act. A clear sentence can ask for a mission the crew cannot finish. An understandable refusal is part of the product, because it shows the limiting condition: the return, the forecast, the occupied road. We also learned that handling the fire and staying alive pull in different directions. Planning the way out makes crews more cautious. In a 20-seed synthetic benchmark of this build, forecast-based crews lost fewer people and delivered less work than crews dispatched more aggressively. Both results belong in the lesson. Conservative navigation has a cost, and that cost is worth showing.
What's next for Ember Line
The next version should let people build the incident they want to study. Customizable maps, different terrain, and changing weather would turn one scenario into a set of lessons: a steep canyon, a wind shift, a neighborhood with one road out. From there we want more crew roles, richer radio interaction, and time with people who actually train coordinators, so the simulation teaches the decisions that matter in the field.
Built With
- fastify
- grok
- node.js
- pnpm
- react
- react-three-fiber
- three.js
- typescript
- vite
- vitest
- websocket
- xai-speech-to-text-and-text-to-speech
- zod
Log in or sign up for Devpost to join the conversation.