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.
- 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).

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.

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.

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.
- 2nd Place, Congressional App Challenge, California's 26th DistrictNov 2025
- 5th Place globally, World Artificial Intelligence Competition for Youth (WAICY), AI ShowcaseNov 2025
- 4th Place, MetroCode competitive coding contestNov 2025
- Honor Award, AI Youth Elite Summit, App-development TrackFeb 2026
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.