Myron Lai

Lead project

EvacuationHub: one map for a disaster, and a way out

When a wildfire or earthquake hits, the warnings are spread across a dozen government websites. I built EvacuationHub, a free website that pulls them onto one map, warns you when danger is close, and plans a driving route to an open shelter that avoids the hazard.

553registered users
13live government and public data feeds
~56,000shelters it can route you to
2ndCongressional App Challenge, California's 26th District
Role
Sole developer (full stack)
When
Aug 2025 to present
Live
pa.myrondomain.com
Also
Native iPhone app

The problem

I started this after the Woolsey and Palisades fires. During a fire near Los Angeles, the facts a family needs are scattered. Fire locations come from NASA, weather warnings from the National Weather Service, evacuation zones from the state, and shelter lists from the Federal Emergency Management Agency (FEMA). None of those sites tells you which road out is safe.

Neighbors post what they see, but nobody can tell which of those posts to believe.

Who it's for

Residents facing a wildfire, earthquake, flood, tsunami or severe storm who need one picture they can trust and a route to safety. It works on a phone browser, and there is a separate iPhone app.

What I built

The map shows every active alert from 13 official and public sources, sorted by type. Set your location and it watches a 50-mile circle around you, grading each threat by distance (within 5, 15, 30 or 50 miles).

EvacuationHub map of the San Francisco Bay Area with a sidebar listing 863 active alerts: 398 wildfires, 49 earthquakes, 317 weather alerts, 90 floods. Evacuate and Report Disaster buttons sit at the bottom.
The live map. The sidebar counts active alerts by type; the Evacuate button starts a route to the nearest open shelter.

Pressing Evacuate finds the nearest open shelter from a database of about 56,000 and plans a drive there. Before asking for directions, the site draws a no-go zone around each fire or hazard, sized by how severe it is, so the route bends around the danger instead of taking the shortest road through it.

Evacuation route panel listing the nearest shelter, four route options with distance, time and a safety score, and a turn-by-turn directions panel on Market Street, San Francisco.
An evacuation route from a test location in San Francisco: the nearest shelter, route options with a safety score, and turn-by-turn directions.

Anyone can report a disaster they see. Each report gets a credibility score from 0 to 100. The site checks where the report came from, how recent it is, whether the location makes sense, whether it is filled out, and whether the disaster type is valid. Then it looks for official alerts within 50 miles that match. A reported fire next to a fire NASA's satellites already detected scores higher than one with nothing official nearby. An AI model can add a second opinion, and photos are checked for signs that they were generated by AI.

When you open an alert, an AI-written briefing explains it in plain words. The briefing keeps the official instructions word for word, so the AI cannot soften or reword what an agency told people to do.

Alert detail panel for a National Weather Service small craft advisory, showing a short AI briefing, a What You Should Do list, and the full official alert text.
An alert opened from the map: a short AI briefing on top, the official National Weather Service text underneath, and nearby shelters below.

The site is built to fail loudly. If a data feed is down or a request times out, the site reports an error. It never quietly shows an empty map, because an empty map during a fire reads as "all clear" and could keep someone from leaving.

I also built a native iPhone app for it in Swift, with the alerts map, push notifications for new alerts, disaster reports and safe routes. It has not been released on the App Store.

The project has had several names. It began as FirePath prototypes in summer 2025, competed in fall 2025 as DisasterScope, was rebuilt in December 2025 under the names PathAlert, SafeWay and EmergencyPath, and has been EvacuationHub since June 2026.

What happened

553 people have registered accounts on the site. The 2025 awards below were won by the fall 2025 version, entered as DisasterScope / EvacuationHub.

After the competitions I rebuilt the back end on FastAPI and Supabase to make the site respond faster. In September 2026 I went back through the code and fixed the remaining places where a failed fetch could still look like "no danger."

The credibility score is a set of hand-weighted checks. It is useful for sorting reports, but it is not a calibrated probability, and I say so in the project's documentation.

Under the hood

Data

Thirteen feeds, each with its own adapter and cache lifetime: NASA FIRMS (Fire Information for Resource Management System) satellite fire detections, National Weather Service alerts, U.S. Geological Survey (USGS) earthquakes and river gauges, National Interagency Fire Center (NIFC) incidents and fire perimeters, NOAA (National Oceanic and Atmospheric Administration) tsunami warnings, California Office of Emergency Services (Cal OES) evacuation zones and news, Cal Fire, GDACS (Global Disaster Alert and Coordination System), FEMA disaster declarations, and a mass-shooting tracker. Shelters come from FEMA and HIFLD (Homeland Infrastructure Foundation-Level Data) with an OpenStreetMap fallback.

Fail loudly

A failed upstream fetch returns an HTTP 503 error instead of a successful empty list. Many of the 40 backend test files pin specific past incidents and failure cases (for example, tracing where a tsunami warning came from, or what the API returns when a hazard source fails).

Credibility score

Five weighted checks: source (40%), recency (20%), location plausibility (20%), completeness (10%) and disaster-type validity (10%). Spatial corroboration against official events within 50 miles adds up to 35 points. When an LLM (large language model) review runs, the final score blends 70% checks and 30% model. Photos go through the Sightengine AI-image detector. The submitter's track record scales the result.

Routing

Shelters live in Postgres with PostGIS, so the nearest-shelter lookup takes under 100 ms. The router builds avoidance polygons from 1 to 5 miles wide depending on hazard severity and sends them to OpenRouteService. If that service fails, it falls back to OSRM (Open Source Routing Machine) and shows a warning.

Stack

FastAPI on Python 3.11, Supabase (Postgres, PostGIS, auth, storage), React 19 with Leaflet and Tailwind, Docker on my own self-hosted Dokploy server for the API, Vercel for the front end. Playwright tests check mobile accessibility. The iPhone app is SwiftUI and MapKit, about 7,700 lines of Swift. I wrote 855 of the repository's 941 commits; the rest are automated dependency updates and AI coding-agent sessions I ran.

← All projects