Los Angeles at night from the International Space Station, wildfires burning around the city
January 2025 · Los Angeles

The night Altadena burned.

Altadena. January 8, 2025.

Anthony Mitchell Sr., 67, couldn't walk on his own. His son Justin had cerebral palsy.

They called for an ambulance. They waited.

It never came.

NPR, January 13, 2025 ↗
The problem is two-fold

They couldn't get out.
Then they couldn't get help.

01

Evacuation

3:25 AMThe order came lastSatellites saw fire at the homes at 1:02 AM.
One-wayAlerts can't listenNobody learned who couldn't leave.
16 of 19Couldn't leave aloneElderly, disabled, or limited mobility.
0List of who needs a rideLA is only now building one.
1Language on most alertsAltadena speaks many.
02

Relief money

Where everyone else stops

Getting out is half of it.

EvacuAid stays with them until the aid is in their hands, and the donor can see it.

1
Warned
A two-way text, hours early
2
Out
A van for whoever can't drive
3
Covered
Sized aid, fraud-checked, tonight
4
Spent right
A card that only buys the way out
5
Seen
Every donor sees who they helped

People give when they can see where it goes. Every donor gets a receipt naming the families their gift reached.

See a receipt →
The solution

One app for both.

Shown on a wildfire. Built for any evacuation.

1 · NESSIE pays the family in seconds, from the county's fund.
2 · SOLANA donors pay the county back, by rules no one can change.
3 · TIGER remembers every step, so anyone can follow the dollar.
Get everyone out
  1. 1Alert, two-way, hours early
  2. 2Reply in any language
  3. 3A case: ride, aid, or door knock
  4. 4Operator dispatches; they track the van live
  5. 5Checked in at the shelter
Get them the money
  1. 1Two questions size the aid
  2. 2Five bank checks on Nessie
  3. 3Donor pool releases on Solana
  4. 4A card that only evacuates
  5. 5Every dollar traceable
365 NASA satellite detections · the real fire
On the real fire · 200 paired runs
+176people reached before the firethe same gain in all 200 paired runs
With EvacuAid · two-way, 6:49 PM179 / 179
Alert at first satellite sighting · one-way, 1:02 AM97 / 179
That night · one-way, 3:25 AM3 / 179

Same 114 homes, 22 vehicles, NASA fire timing. The baseline even knows who needs a ride.

Fire is the proof. Not the limit.

Roll call, triage, priority, vans, aid and donor receipts don't care what the disaster is. Only the feed that says when it reaches each home changes.

WildfireDEMO
NASA satellite detections
Proven on the Eaton fire
Flood
River gauges, flood forecasts
When water reaches each home
Hurricane
Storm-surge and wind forecasts
Days of warning, same roll call
Earthquake
Damage and aftershock reports
No warning: find who's trapped, house them tonight
Chemical spill
Plume models
Minutes to clear a zone
EvacuAid
296 Lincoln Ave
🚨 EVACUATION WARNING · EATON FIRE 🚨 This is EvacuAid for LA County. The fire is moving toward your area. LEAVE NOW if you can! Reply with a number: 1 = I'M OUT / SAFE 2 = LEAVING NOW 3 = I NEED HELP Or tell us what you need, in any language. Responda en español si prefiere. Already safe and don't need updates? Reply STOP.
7:26 PM
How it works

One night, end to end.

01Before the fire→
02The alert→
03They reply→
04Operator decides→
05Money moves→
06After
Solana
donate()
Donors fill the pool. Rules fixed in code.
publish_order()
Only the ordered zone unlocks.
release()
Pool pays the county back. ≤ $770 a home.
receipt
Donors see which families they reached.
iMessage + Gemini
Photon
A two-way text, hours early.
JSON case
Any words, any language → needs, stage, summary.
summary
One line on every case card.
status texts
“Van is 6 min away.” A live link to watch it come.
EvacuAid + operator
NASA FIRMS
The real fire, forecast house by house.
who's at risk
Zones ordered, homes texted.
case
Ride, aid, or a door knock. Best free van suggested.
approve
A person approves every van and every dollar.
dispatch
Van picks them up. They track it live, like a ride-share.
check-in
Safe at the shelter. Nobody lost track of.
Nessie
accounts
$120k relief fund, $250k rescue ops, a card per home.
GET /transactions
5 bank checks: was this card really here?
POST /decision
Approve, hold or decline, with a reason.
POST /transfers
$150 · $315 · $770 on the relief card, in seconds. Trip billed.
POST /purchases
Gas and rooms only. FEMA export.
Tiger Data
evac_events · Every cell above writes a row to one hypertable, by the minute: live charts tonight, the after-action report tomorrow.
Who goes first
P = Φ( (ln T − ln A) / σ )chance the fire wins the race
V = 1 − Π (1 − wᵢ)harm if they're trapped
priority = P × V
Highest first → the nearest free vehicle that can carry them (wheelchair-capable when needed). The operator approves.
  • Awhen the hazard reaches the home (for fire: satellite spread rate)
  • Thow long they need to leave alone: no car ≥ 240 min, asked for help 360
  • σ0.35, the fire's timing uncertainty
  • wᵢmedical 0.6 · can't walk 0.5 · someone left at home 0.4 · 75+ 0.3 · silent 0.3 · kids 0.15 · not English 0.1
0.82
Wheelchair + oxygen, fire 90 min out
0.05
Family with a car, same street

Why two money rails?

SOLANATrust between strangers

Holds donor money. Rules in code: only ordered zones, $770 a home, county only.

Alone it can't see a card swiped in Las Vegas.

NESSIEThe bank families actually use

Pays families in seconds, checks card history for fraud, limits what the card buys.

Alone it can't prove to a stranger the rules never changed.

Why this can't wait for a claim.

People stay because leaving costs money. Aid after the fire gets no one out.

Relief todayWeeks to months
Disaster declared→Claim filed→Inspection→Denied or delayed→Check, maybe
EvacuAidSeconds
Replies to the text→Bank checks pass→Money on the card

Pick a track.

Not just a ledger: a bank, a fraud engine, a budget simulator, and the rescue's accounting.

10
Nessie endpoints
4
wallet types
5
fraud checks
6,000
nights simulated per refresh
WHY IT'S IRREPLACEABLE · 1
Only a bank knows where a card was used an hour ago. That's how EvacuAid catches the Vegas claim.
WHY IT'S IRREPLACEABLE · 2
Money is a rescue tool: people stay because leaving costs money. The bank moves it during the fire.
WHY IT'S IRREPLACEABLE · 3
Every dollar is a real ledger entry, so the county gets FEMA's 75% back without paperwork.
Bank
4 kinds of wallets
County relief account · County Emergency Operations · Solana bridge · a checking + Relief Card per household.
WHY Rescue spending, donor money and family aid never mix, so each can be audited on its own.
Sized aid
$150 gas · $315 gas + a night · $770 full. Top-ups, and a red confirm before any operator override.
WHY A gas tank isn't a hotel week. Smaller asks stretch the fund further.
Card that only evacuates
Purchases at 12 geocoded merchants. Gas, rooms, food, pharmacy: approved. Electronics: declined.
WHY Aid buys the way out, not a TV.
Settlement, live
Pending → completed on Nessie's sweep, streamed to the Live transactions feed.
WHY The operator sees money land, not just get promised.
Fraud engine
5 bank checks
Residency (ZIP) · whereabouts (card geodistance) · account history · $770 household cap · story vs. spending.
WHY Fraud follows every disaster. Card history proves who was really there.
Decisions API
Approve, hold, or decline every dollar with a reason. Held claims move no money until a person says yes.
WHY A person, not a model, has the last word on money.
Operations
Rescue billing
Every dispatch is a purchase on County Emergency Operations: $95 paratransit, $70 van, $25 volunteer fuel.
WHY The county knows what saving each person cost, while it happens.
FEMA Category B export
One click: every approved dollar, itemized with its Nessie transaction, 75% share computed.
WHY Every dollar comes back 75% from FEMA because it's already itemized.
Runs + history
Each drill is a run; reset archives it. Nothing is ever lost.
WHY Drills and real nights never overwrite each other.
Simulator
Monte Carlo budget
2,000 simulated nights per plan, re-run every 15 replay minutes: chance the money lasts, likely vs. bad night.
WHY Running out at 2 AM is the real risk. This sees it at 9 PM.
Best-plan optimizer
Searches up to 98 policies; found $770 + shelter-first lasts 90% (from 58%) and saves $9,240.
WHY The operator picks a plan with numbers, not a guess.
Budget sandbox
Change aid, shelter share, room nights, fire speed, Solana pool: watch the odds move.
WHY Ask 'what if the fire doubles?' before it does.

Every dollar is a real Nessie transaction.

  • POST /customers
    A customer per home: the ZIP is the residency check.
  • POST /customers/{id}/accounts
    Relief fund, rescue ops, Solana bridge, a card per family.
  • POST /merchants
    Real gas stations, hotels and pharmacies on the routes.
  • GET /accounts/{id}/transactions
    Where was this card an hour ago? Fraud check.
  • POST /accounts/{id}/transfers
    Aid to the family's relief card, only after approval.
  • POST /transactions/{id}/decision
    Approve, hold or decline, always with a reason.
  • POST /accounts/{id}/purchases
    Card swipes and every van trip, billed live.
  • POST /transactions/{id}/settle
    Watch the money actually land.
  • GET /transactions/{id}
    Pending → paid, on the live feed.
  • GET /accounts/{id}
    Live balances for the fund, cards and pool.

How it's different.

The disasterBuilt around one hazardAny evacuation: fire, flood, hurricane, earthquake, chemical spill
The proofA modeled disaster on a mapThe real Eaton fire: 365 NASA detections, the real 3:25 AM order
The peopleSynthetic householdsReal phones. Text EVAC right now and an operator answers
Reaching themA browser call or a one-way alertTwo-way iMessage, any language, on the phone they already have
Who decidesAn algorithm assignsAI suggests; a person approves every van and every dollar
After the pickupThe story ends at the vanSized aid the same night, on a card that only buys the way out
FraudNot consideredFive bank checks on real card history; a blocked claim moves $0
DonorsNot consideredOn-chain rules, public releases, a receipt naming who they reached
The budgetNot considered6,000 simulated nights per refresh: will the money last till morning?
The countyNot consideredEvery rescue billed, every dollar itemized for FEMA's 75% back
Running itA demo that dies with the laptopLive at evacuid.us on Vultr: HTTPS, backups, a standby server
ProofA simulated town200 paired runs on the real night: +176 people in every one

Built solo, built like software.

~10k
lines of TypeScript
297
lines of Rust on-chain
34
automated tests
19
conversation types, EN + ES
3
Monte Carlo engines
5
sponsor platforms, all live

Every technology.

20 of 20
Next.js 16Web
App router, server routes
React 19Web
Console, relief, donate, pitch
TypeScriptWeb
Everything
Tailwind 4Web
Design system
MapLibre + MapTilerMaps
Live fire map
NASA FIRMSData
365 real satellite fire detections
Gemini 3.5 Flash-LiteAI
Triage in any language
Photon iMessageMessaging
Two-way texts on real phones
Capital One Nessie v2Money
Accounts, checks, transfers, purchases
Solana devnetMoney
Donor pool with on-chain rules
Anchor 1.2.2Money
relief_pool program
SPL TokenMoney
Test dollar (USDC stand-in)
Tiger DataData
Hypertable + continuous aggregates
PostgreSQL 18Data
TimescaleDB 2.32
joseSecurity
Signed operator sessions
scryptSecurity
Operator password hashing
VultrInfra
Public HTTPS edge, firewall, standby server
CaddyInfra
Automatic HTTPS certificates
VitestQuality
34 automated tests
BunQuality
Runtime and scripts

Out safe.
Aid tonight.

EvacuAid · built solo at HackUMass XIV · Shown on the Eaton fire; built for any evacuation. Residents simulated; the fire and the streets are real.