Busabase
Busabase is an open-source (MIT) database and workspace for AI agents — data, docs, skills, and apps in one place. Run it locally, self-host it inside your network, or use Busabase Cloud, and turn age
Which airfields can likely still take relief flights after an earthquake, and what an airlift through them could move. Public data, planning model.
Translation pending
DataPython · Jupyter NotebookGitHub @sachabidermannOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Estimates which airfields can take relief flights after an earthquake and what an airlift could move. Public data, planning model.
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Airlift Planner estimates, for any earthquake in the USGS catalog, which nearby airfields can still take relief flights, how much cargo the hardest-hit population needs each day, and how much of that an airlift could move. It uses only public data: USGS ShakeMap and PAGER, US Census population files, and the OurAirports airport table.
It is a student project and a planning model, not an operational tool.Read the full README ↗Airlift Planner estimates, for any earthquake in the USGS catalog, which nearby airfields can still take relief flights, how much cargo the hardest-hit population needs each day, and how much of that an airlift could move. It uses only public data: USGS ShakeMap and PAGER, US Census population files, and the OurAirports airport table.
It is a student project and a planning model, not an operational tool.
Dashboard: https://sachabidermann.github.io/airlift-planner/
USGS HayWired scenario, a simulated M7.0 on the Hayward Fault. Red rings: airfields the model flags as likely knocked out. Blue square: the recommended gateway, San Francisco International. Shading: USGS ShakeMap intensity. Base map © OpenStreetMap contributors.
Requires uv. The first run downloads about 30 MB of public data into data/; the full check brings it to about 100 MB.
git clone https://github.com/sachabidermann/airlift-planner
cd airlift-planner
uv sync
uv run main.py --quake gllegacyhaywiredm7p05_se # any USGS event or scenario id
uv run main.py --list # M5.5 and above in the past week
uv run main.py --latest # plan for the newest one
Abridged output for the HayWired scenario (... marks lines left out; terms are defined below):
M 7.0 Haywired M7.05 Scenario (USGS scenario, simulated)
shaking: USGS ShakeMap v33, 2017-01-11
...
people at MMI VIII+ 5.4M (airbridge priority)
cargo needed 6,103 t/day at 1.13 kg per person per day
nearest airfield KLVK Livermore Municipal Airport 15 km MMI X usable 19%
likely knocked out:
KLVK Livermore Municipal Airport 15 km MMI X usable 19%
KHWD Hayward Executive Airport 17 km MMI IX usable 37%
KSJC Mineta San Jose International Airpo 26 km MMI IX usable 24%
KOAK Oakland San Francisco Bay Airport 28 km MMI IX usable 27%
...
GATEWAY KSFO San Francisco International Airport 38 km MMI VII usable 92%
747-8F x 6 spots, 11,870 ft inflow 3,160 t/day
...
AIRLIFT CAPACITY INTO ZONE 3,160 t/day (ceiling for the assumed parking spots; t = metric tons)
people it could supply 2.8M
share of need 51% the rest must come by road, sea or local supply
scripts/check.sh --offline # unit tests and the browser-model test; no network, a few seconds
scripts/check.sh # also reruns the backtests, the verification and the dashboard build
VERIFY.md says what each step proves and what output to expect. The browser-model test needs Node.js. GitHub runs the offline checks on every push.
Formulas and the source of every constant are in METHOD.md.
| module | job |
|---|---|
airlift/usgs.py | Earthquake records, ShakeMap grids, PAGER exposure; real events and scenarios |
airlift/population.py | Census exposure where PAGER was not run |
airlift/airports.py | Airports and runways |
airlift/survivability.py | Intensity to usability |
airlift/demand.py | Exposure to metric tons per day |
airlift/aircraft.py | Aircraft payloads, runway needs, ground times |
airlift/airbridge.py | Damage center, gateway choice, shuttle allocation, capacity |
airlift/report.py, main.py | Terminal report and command line |
backtests/ | Event definitions with sources, the backtest runner, the verification script, and their generated reports |
dashboard/ | Exports dashboard data and tests the browser port of the model |
docs/ | The static dashboard served by GitHub Pages |
tests/ | Unit tests |
Nine real earthquakes, compared with what happened. Generated detail, including the model's values at each airport that mattered and sources for every historical statement, is in backtests/RESULTS.md.
| event | model flags as likely knocked out | what happened to airports | model gateway | relief gateway used | match |
|---|---|---|---|---|---|
| Loma Prieta 1989, M6.9 | none | Oakland lost 3,000 ft of runway to liquefaction | San Jose | none; mostly road | n/a |
| Anchorage 2018, M7.1 | none | none; reopened the same day | Anchorage | none | n/a |
| Ridgecrest 2019, M7.1 | none | China Lake not mission capable | Mojave | none | n/a |
| Puerto Rico 2020, M6.4 | none | none | San Juan | none | n/a |
| Haiti 2010, M7.0 | none | tower unusable, field saturated | Port-au-Prince | Port-au-Prince | yes |
| Nepal 2015, M7.8 | none | runway later damaged by heavy jets | Kathmandu | Kathmandu | yes |
| Turkey 2023, M7.8 | Kahramanmaras (48%), Hatay (34%) | Hatay closed six days | Gaziantep | Adana and Incirlik | no |
| Morocco 2023, M6.8 | none | none | Marrakech | Marrakech | yes |
| Myanmar 2025, M7.7 | Mandalay, Nay Pyi Taw, 3 other fields | Mandalay and Nay Pyi Taw closed to commercial flights for a week; relief flights from day 2 and day 4 | Heho | Yangon | no |
Gateway matches in 3 of the 5 events where a relief gateway was used. The other four earthquakes had no sustained relief airlift, so they only test the flags.
This is weak evidence. The usability curve was set by hand while looking at the five international earthquakes, so for those this is a consistency check, not an out-of-sample test. The US events were added later without changing the curve. In the three matches the airport used was the obvious one: the capital's international airport in Haiti and Nepal, and the city airport beside the damage in Morocco. Nine earthquakes is a small sample either way.
Flags. Three airports closed after the shaking and the model flagged all three: Hatay for six days, and Mandalay and Nay Pyi Taw for a week to commercial flights, though military relief flights reached Nay Pyi Taw two days after the earthquake and Mandalay after four. Judged strictly on relief flights in the first three days, Hatay and Mandalay are hits, Nay Pyi Taw is a miss, and Kahramanmaras at 48% is a false alarm: it stayed open to relief flights. Three other Myanmar fields were flagged and I could not find what happened to them.
Misses. Oakland in 1989 lost 3,000 ft of runway to liquefaction at MMI 6.7, where the curve gives 92%; intensity does not capture soft ground. China Lake in 2019 was declared not mission capable, and the model gave it 64%.
In Turkey and Myanmar the model picks an intact airport close to the damage. Responders used a larger airport farther away. The model cannot explain that choice because it does not see customs, fuel or cargo handling. Gaziantep did take relief flights in 2023.
Scenario earthquakes from the USGS scenario catalog, run through the planner unchanged.
| scenario | people at MMI VIII+ | gateway | flagged as likely knocked out | airlift capacity | share of need |
|---|---|---|---|---|---|
| HayWired M7.0, San Francisco Bay Area | 5.4M | San Francisco | 9, including Oakland, San Jose, Hayward and Livermore | 3,160 t/day | 51% |
| ShakeOut M7.8, Los Angeles | 8.5M | Long Beach | 16, including Ontario, San Bernardino, Chino and Fullerton | 3,168 t/day | 32% |
| Cascadia M9.0, Pacific Northwest | 136k | Portland | none; tsunami is not modeled | 3,070 t/day | exceeds need |
| Seattle Fault M7.5 | 2.4M | Paine Field | 4: Sea-Tac, Boeing Field, Renton, Bremerton | 1,252 t/day | 46% |
| New Madrid M7.7, Memphis | 306k | Memphis | 10 airfields in Arkansas, Missouri and Tennessee | 3,138 t/day | exceeds need |
| Puerto Rico Trench M8.5 | 2.1M | San Juan | none | 2,110 t/day | 88% |
Seattle and New Madrid use USGS PAGER exposure. The other four use the Census reconstruction, which counts US residents only.
In all six scenarios the gateway is within 50 km of the damage center, so all of its cargo counts as delivered and capacity equals what the gateway can receive. The shuttle fleet only decides how much of that cargo is flown forward. The share of need therefore rests on the assumed parking spots.
uv run backtests/verify_shaking.py writes backtests/VERIFICATION.md:
grid.xml format agrees with the current format at 500 random points: mean difference 0.004, largest 0.39.The browser port of the model is checked against the Python planner on 135 cases (node dashboard/test_model.js).
RESULTS.md records the input hashes and ShakeMap versions.ShakeMap is revised repeatedly, sometimes years later. The tool caches the version it first downloads and prints the version and date. During a response, re-run with --refresh to fetch the latest. Before USGS publishes a ShakeMap, the tool falls back to a distance formula and says so in the output.
docs/ runs the same model in the browser. Pick an event and change the assumptions (shuttle fleet, operating hours, forward radius, minimum usability, domestic only). The plan, map, charts and tables update.
uv run dashboard/build.py # refresh docs/data.json and dashboard/expected.json
node dashboard/test_model.js # the browser model must reproduce the Python planner
python3 -m http.server 8766 --directory docs # http://localhost:8766
?theme=light or ?theme=dark forces a theme. The URL hash selects an event, for example #wa22sfz01_se.
Earthquakes, ShakeMap and PAGER: U.S. Geological Survey (public domain). Population: U.S. Census Bureau, vintage 2023 population estimates and 2023 Gazetteer files (public domain). Airports: OurAirports (public domain). Base map: © OpenStreetMap contributors, ODbL. Map library: Leaflet (BSD 2-Clause). This project is not affiliated with or endorsed by any of them.
USGS ShakeCast sends facility-level shaking alerts from ShakeMap to operators such as Caltrans. FEMA's Hazus has airport fragility curves and reads ShakeMaps. A 2021 CISA and Washington State study rated the runways of 20 airports against the USGS Cascadia M9.0 scenario. Air Force Pamphlet 10-1403 gives the airfield throughput formula used here. I have not found a public tool that goes from a ShakeMap to an airfield ranking, a relief need and an airbridge plan.
Palantir's disaster work with Direct Relief, Team Rubicon and the World Food Programme integrates an organization's own data into one operating picture. A model like this could run on top of that.
Replace the hand-set curve with the Hazus fragility curves, then add liquefaction susceptibility for runways on fill. After that: tsunami inundation for coastal strips, road travel time in place of straight-line credit, a helicopter tier for areas without a strip, and fuel and handling limits on gateway choice.
Sacha Bidermann, 2026.