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
Who loses supply when a chokepoint closes or a pipeline is cut? An open, inspectable model of oil and gas dependency: pick a disruption and see which importers, exporters, refineries and LNG terminals
DataTypeScript · PythonGitHub @narendranagOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
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
An interactive map of the world's oil and gas system: reserves, extraction, pipelines, refineries, LNG terminals and voyages, storage and ports, 1990–2024. It includes disruption scenarios that show who is exposed when a chokepoint or pipeline is cut. It was built for energy-policy researchers and IR/economics scholars.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Who loses supply when a chokepoint closes or a pipeline is cut? An open, inspectable model of oil and gas dependency: pick a disruption and see which importers, exporters, refineries and LNG terminals are exposed, by how much, and from which source — over a map of the infrastructure and trade it is computed from (reserves, extraction, pipelines, refineries, LNG terminals and voyages, storage and ports). It was built for energy-policy researchers and IR/economics scholars who think in systems, and every number on it traces to a cited public source.Read the full README ↗Who loses supply when a chokepoint closes or a pipeline is cut? An open, inspectable model of oil and gas dependency: pick a disruption and see which importers, exporters, refineries and LNG terminals are exposed, by how much, and from which source — over a map of the infrastructure and trade it is computed from (reserves, extraction, pipelines, refineries, LNG terminals and voyages, storage and ports). It was built for energy-policy researchers and IR/economics scholars who think in systems, and every number on it traces to a cited public source.
Live: https://energymap.marain.space
Built and maintained by Narendra Nag as a project of Marain. Terms of use · Privacy
?year= link shows the numbers as of that year with an "as of" chip./methodology explains each layer, /data lists every file with its licence and checksum, and /query is a SQL console over the same files for anyone who wants to ask their own question.What it deliberately doesn't do: price responses, rerouting, strategic stocks, or daily flows. Scenario results are exposure accounting, not a market model.
| You are… | Read |
|---|---|
| An energy researcher using the map | docs/researchers/: tour, worked examples with links, the scenario method in plain language, coverage and caveats, citing and reuse, FAQ |
| Building with AI agents, or pointing an agent or LLM at this data | docs/ai/: how this was built with coding agents, the reusable playbook, and the machine interface (URL grammar, schemas, recipes) · /llms.txt |
| Contributing code or data | CLAUDE.md (stack, schema, commands, conventions) · docs/refresh.md (data refresh runbook) · docs/superpowers/ (specs and plans) |
| Layer | Count | Source (licence) |
|---|---|---|
| Proved reserves, oil and gas, by country | 1990–2020 (frozen after); production through 2025 | Energy Institute Statistical Review (view only) |
| Oil and gas extraction sites | 7,055 | Global Energy Monitor (CC BY 4.0) |
| Oil, NGL and gas pipelines | 3,957 (build year known for 64 % oil, 74 % gas) | Global Energy Monitor (CC BY 4.0) |
| Refineries | 1,164 (capacity known for 350) | NETL GOGI (public domain) + OpenStreetMap (ODbL) |
| LNG terminals | 314 | LNG-T3, Zhou, C. 2026 (CC BY 4.0) + GEM |
| LNG voyages, 2020–2024 | 17,592 | LNG-T3 (CC BY 4.0) |
| Petroleum basins · storage hubs · ports | 1,046 · 7,733 · 3,694 | NETL GOGI (public domain) |
| US shale-region production (Permian, Bakken, Eagle Ford, Haynesville, Appalachia), 2009–2025 | 170 country/region-years | EIA Short-Term Energy Outlook (public domain) |
| EU gas storage + LNG send-out, daily, 2020– | 188,767 rows, 22 countries | GIE AGSI / ALSI (view only) |
| Recent monthly crude + LNG imports, 2025–2026 | 8,839 rows | UN Comtrade (view only) |
| Daily chokepoint transits (Hormuz, Malacca, Suez, Bab el-Mandeb, Bosporus), 2019– | 14,205 rows | IMF PortWatch; vessel data Kpler, UN Global Platform (view only) |
| Bilateral crude (HS 2709) and LNG (HS 271111) trade, 1995–2024 | 53,727 country-pair-years | CEPII BACI (Etalab Open Licence 2.0) |
| Scenario route shares, 12 scenarios (16 oil/gas route-share sets) | 527 rows, each with a citation (plus 54 intra-Gulf Hormuz pairs and 3 Turkish-Straits pairs set to 0) | EIA / IEA and operator reports |
Known limits that matter:
See data and coverage.
/data and from the map's Share menu. The Energy Institute series and the mixed-licence asset table are view-only; assets_open.parquet is the downloadable asset table without the OpenStreetMap rows. Per-source terms and the attribution lines to keep are in LICENSE-DATA.md (plain language, not legal advice).CITATION.cff or GitHub's "Cite this repository". To cite a specific view with its source dates, use Share → Cite this view.LICENSE)./terms (not advice, no warranty, attribution and acceptable use) and /privacy (no accounts or cookies; cookieless Vercel analytics; OpenFreeMap tiles). Sources: docs/legal/.pnpm install
pnpm dev # http://localhost:3000 (predev copies the self-hosted DuckDB files)
# Data pipeline (Python via uv; sources pinned in scripts/common/sources.py)
uv sync
uv run python -m scripts.build_all --ingest # first time: download pinned sources, then build
uv run python -m scripts.build_all # rebuild public/data/ from data/raw/ — byte-identical reruns
# Tests
pnpm lint && pnpm typecheck && pnpm test # ESLint, tsc, Vitest
uv run python -m pytest tests/python # transforms, schemas, data integrity
pnpm build && CI=1 pnpm test:e2e # Playwright against a production build (~15 min)
Stack: Next.js 16, React 19, TypeScript strict; deck.gl 9 inside MapLibre (OpenFreeMap basemap); Parquet read in the browser by hyparquet. DuckDB-WASM is self-hosted and loaded only on /query (a SQL console over the same catalog), never on the map's load path. There is no backend: data files are served as static assets with immutable, content-versioned caching. The build-time pipeline is Python (pandas, pyarrow, geopandas, duckdb). CI runs lint, typecheck, unit, Python and e2e tests (including an axe accessibility scan), plus a post-deploy smoke test.
The site runs on Cloudflare Workers through OpenNext (@opennextjs/cloudflare); it moved from Vercel in October 2026. wrangler.jsonc points at cloudflare/worker.mjs, a thin wrapper that handles /data/* and /duckdb/* itself (year-long caching for ?v= URLs, byte ranges, and the two DuckDB wasm modules streamed from the R2 bucket global-energy-map-assets, because they are over Workers' 25 MiB per-file limit) and passes everything else to Next. Every page is prerendered and served from the asset store.
pnpm run preview # OpenNext build → wasm into the local R2 → wrangler dev on :8787
E2E_PORT=8787 pnpm test:e2e # the e2e suite against that local Worker
pnpm run deploy # OpenNext build → wasm into R2 → wrangler deploy
scripts/smoke/run.sh <url> # pages, catalog sizes + sha256, Range reads, one browser check
pnpm exec wrangler tail global-energy-map --format json # live request log
.github/workflows/deploy.yml does the same deploy and then runs the smoke workflow. It needs the repo secrets CLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID. The app reads no secrets at runtime.
Phases 1–10 are complete: layers, scenarios, a correctness pass, consolidation, the product redesign, and launch hardening. Since then: a data-freshness upgrade added live EU gas storage, UN Comtrade recent imports and US shale-region production, and refreshed EI/GOGET/OSM/NETL/BACI to their latest releases; a post-launch UX pass added the /query SQL console, country-click profile panel, header search, trade-flow arcs, embed mode, and five more disruption scenarios (Malacca, Suez + SUMED, Bab el-Mandeb, Turkish Straits, Keystone/Enbridge/ESPO), plus partial-severity closures, two scenarios combined at once, and an exporter-side view of any scenario. Since 2026-10-15 every chokepoint scenario also shows observed traffic: IMF PortWatch's AIS-observed tanker transits over the latest 30 days against a year earlier (view-only; a lower bound when ships run with transponders off). Earlier post-launch work (2026-09-11): intra-Gulf Hormuz trade is no longer counted as exposed, LNG attribution uses only terminals in service that year, the map reads Parquet directly in the page (cold load ≈ 1.2 s at 40 Mb/s, down from ≈ 4.9 s), the storage layer drops EPA records that are not bulk storage, and the scenario panel flags BACI gaps for Iran (2019+) and Russia → Belarus (2022+). Most recently (2026-09-21): the year slider is gone from the UI (every layer shows its latest data by default; ?year= still pins an older view behind an "as of" chip), the copy throughout leads with the scenario question rather than the asset inventory, and every information surface — scenario headline, layer badges, country panel, tooltips — now states the vintage of the data behind it. The history is in docs/history.md, and the roadmap and review in docs/superpowers/specs/. Candidate next steps (coal, tanker AIS, per-basin production, pipelines as vector tiles) are in docs/data-sources.md.
Found an error in the data or the method? Open an issue. The map's error panel pre-fills one.