Projects / agentic-app · software
Wildfire Incident Response: a decision-support pipeline on live public feeds.
A tested wildfire decision-support pipeline. It ingests live public fire and weather feeds, tracks how fresh each input is and where it came from, ties every briefing to the exact inputs it used, and records human approvals in a log that can be replayed. A portfolio demo, not an operational tool.
The question behind this build is a narrow one: if software is going to put a fire picture in front of an Incident Commander, can it show exactly what that picture was built from, how old each piece is, and who signed off on it?
The pipeline reads sixteen public feeds, among them NIFC WFIGS incidents and perimeters, NASA FIRMS satellite detections, NWS alerts, observations and forecasts, the NOAA HRRR forecast, SPC fire weather outlooks, NOAA HMS smoke, and EPA AirNow. Every fetch is kept with its time and a hash of what came back. Each source has a freshness limit, and inputs that are stale, missing, or in conflict (two weather sources that disagree, heat outside a perimeter mapped weeks ago) are flagged on the page, not smoothed over.
The inputs become one snapshot per incident with a revision id. Briefings are written from that revision, and every statement cites the inputs behind it. Signed in, Claude can write the briefing, through the same citation check plus a check on every number. The IC approves, edits, or rejects. The decision signs the briefing it saw, by hash, and the server refuses it if the inputs have moved on since, unless the person records an override and says why. The log cannot be edited, and the replay page steps back through it.
Eight specialist seats, from Fire Behavior to the Safety Officer, are defined in plain prompt files that the site renders as written. A signed-in IC can run them on the same cited inputs, with the cost shown before anything is spent.
Fire behavior at the incident point is the Rothermel surface model with Scott and Reinhardt crown fire, ported from the USFS behave library and checked against it. It was backtested on more than 5,000 twelve-hour steps from 567 western fires, 2018 to 2021. The model card publishes the results as they are: daytime spread runs about 30% slow, 42.5% of steps land within a factor of two, and a simple persistence baseline still ranks fast and slow days better. It is shown as an estimate, with its inputs and a confidence level, and it never decides anything.
Resource positions are simulated, because there is no free public AVL feed, and every page that shows them says so. A bar under the header says whether a page is live, recorded practice data, or a replay.
Stack: Next.js on Vercel, Postgres on Neon, a scheduled ingest on a Cloudflare Worker, Zod at every boundary, Python for the backtest, Anthropic for the briefings. Unit and end-to-end tests run against recorded feeds, never the network.

Gallery
