Inspiration
Every hurricane season follows the same pattern. Forecasters see a storm coming days ahead, the news counts down to landfall, and the donations only pour in after the damage is done. But the moment money matters most is before landfall, when local groups need fuel, water, buses and shelter space for the families they're about to evacuate.
Humanitarian groups call this anticipatory action: act on the forecast, not the disaster. Big agencies already run it with pre-agreed triggers. We wanted ordinary donors to be able to do the same thing: promise a gift once, and have it reach vetted local responders automatically, before the storm, without anyone having to trust an AI with their money.
What it does
LEVee pays local responders through PayPal up to 72 hours before a hurricane lands.
- Pledge once, in plain words. "$10 per hurricane on the Gulf Coast, max $60 a year." The Concierge agent turns it into a pledge card, and the donor saves their PayPal account with PayPal Vault. Nothing is charged.
- A storm meets the published rules. Sentinel reads every GDACS advisory, National Hurricane Center forecast, GloFAS river forecast and news item, and scores how likely the storm is to hit. Tranche 1 fires only if the alert is Orange or Red, landfall is within 72 hours, and Sentinel's confidence is 70 or more.
- A notice before every charge, with a one-tap Skip this storm. Then PayPal Orders charges 40% of the pledge from the saved account.
- Paid before landfall. The Allocator proposes a split between vetted partners, the Policy Engine checks it, and PayPal Payouts sends each partner its share. A corporate sponsor's match is billed through PayPal Invoicing.
- Proof, then the rest. After landfall, partners upload receipts and photos. The Verifier checks them, and the remaining 60% goes only to partners whose proof passed. Anything doubtful waits for a person.
- The donor sees what their money did, with a PayPal reference for every step, and can ask the Narrator "Where did my $10 go?"
In our Hurricane Helene replay, a $10 pledge works out like this:
$$\text{Tranche 1} = 0.4 \times \$10 = \$4.00 \qquad \$4.00 - \underbrace{\$0.63}_{\text{PayPal's fee}} = \$3.37 \text{ to responders}$$
That $3.37 reached responders 53 hours before Helene made landfall. A shared Reserve, fed by one-time gifts and monthly PayPal subscriptions, adds to each storm's first tranche, taking \( \min(0.5R,\ \$500) \) from a balance \( R \) so the pool outlasts any one storm.
The one rule that matters: AI proposes, rules decide. No agent can move money. Only the Policy Engine calls PayPal, and only when its fixed rules pass.
How we built it
- Payments: eight PayPal products, each doing a job the idea can't do without. Vault (v3 setup and payment tokens with JS SDK v6) lets us charge later without the donor present. Orders handles charges and one-time gifts, Payouts pays partners, Invoicing bills sponsor matches, Subscriptions funds the monthly Reserve, Refunds keeps a 48-hour refund window, Webhooks (signature-verified) keeps our ledger true to PayPal, and the PayPal Agent Toolkit gives our agents read-only PayPal tools. Everything runs in the sandbox, and the code refuses live keys.
- AI: five Claude agents on
claude-haiku-5-5(Sentinel, Allocator, Verifier, Concierge and Narrator), called through the Anthropic SDK with azodschema for every output. Each has one narrow job and a safe fallback: if the Allocator fails, the engine splits equally; if Sentinel fails, nothing fires. - Rules: a pure TypeScript Policy Engine reading one published playbook. It's the only code allowed to charge or pay, with no AI inside.
- Website: Next.js 15, React 19 and Tailwind 4, with accounts for donors, responders and ops on Supabase (Postgres and Auth). It includes a live demo of the full Helene storm with real sandbox charges and payouts, a live storm map, a rules simulator you can try to break, and a public audit log.
- Replays that can't cheat: Sentinel gets a snapshot of exactly what was known at each advisory, so a replayed storm is judged as it was at the time.
- 423 tests across payments, policy, agents and the website, none needing keys or a network.
Challenges we ran into
- Keeping AI away from the money. It's tempting to give an agent a "pay" tool. We didn't: every AI output is a proposal the engine checks, and agents only get PayPal tools that read. The simulator lets anyone feed the engine a bad split and watch it get refused.
- Numbers written by a language model. The Narrator explains charges and fees, so we built a checker that compares every figure it writes against the ledger before a donor sees it. Code works out every number that matters.
- Charging someone who isn't there. Vault, notices, a skip window, yearly caps, and a 6-hour limit on PayPal retry keys all had to work together so a donor can never be charged twice, or charged without warning.
- PayPal SDK changes mid-build. Saving an account suddenly failed with "no setup token provided." We traced it in the browser: JS SDK v6 now expects the setup token wrapped as
{ vaultSetupToken }. - Tooling mismatches. The Agent Toolkit targets a version of the Vercel AI SDK that always sends
temperature, which Claude rejects, so we drove the toolkit's tools from our own Anthropic SDK tool loop. - Sandbox surprises. Sandbox payouts near $620 were refused with
INSUFFICIENT_FUNDSfor a day, then worked again, so we learned to test every demo path before trusting it.
Accomplishments that we're proud of
- A complete loop on real PayPal sandbox money, from a sentence of plain English to a partner's payout 53 hours before landfall, then proof-checked follow-up funding.
- AI that's useful and safe at once: five agents doing real judgment work, none of them able to move a cent.
- Cheap by design: a whole Hurricane Helene run costs about \$0.035 of Claude, and a live storm brief costs under a tenth of a cent.
- Radical transparency: every decision, AI or rule or person, is in a public audit log with its PayPal reference.
What we learned
- PayPal is more than a checkout button. Vault, Payouts, Invoicing and Subscriptions together make "promise now, pay automatically later" possible for donors, small charities and sponsors on accounts they already have.
- Treat a language model as an advisor. The design got simpler and safer once we treated every AI output as a proposal with a fallback.
- Trust comes from being able to check. Donors care less about clever AI than about being able to see, and verify in their own PayPal account, where every dollar went.
What's next for LEVee
- Onboard real responder organisations, collecting through a registered charitable intermediary.
- Publish playbooks for more regions, such as the Bay of Bengal (whose playbook is already in the code), the Caribbean and the Philippines.
- Run Sentinel every hour against live storms, and send notices by email and SMS.
- Pilot one storm season in the sandbox with partner groups, then move to live payments.
Built With
- claude-haiku
- gdacs
- glofas
- motion
- national-hurricane-center
- next.js
- node.js
- paypal
- paypal-agent-toolkit
- paypal-js-sdk
- paypal-vault
- paypal-webhooks
- postgresql
- react
- sharp
- supabase
- tailwindcss
- zod