| Product family | Demand TEU/wk | Worst 4-week fill | Target | Overall fill | Lost TEU | Lost-sale cost | Air TEU | Service |
|---|
| DC | Demand TEU/wk | Buffer days | Served in plan | Time-to-survive | Time-to-recover | Lost TEU | Air TEU | Verdict |
|---|
Real disruptions don't come with a known end date. This samples each selected event's duration from its range and the freight-rate shock from ±40%, and re-costs the plan each time.
Select a scenario, then run.
Factories that look independent often share a supplier one or two tiers up. This counts how much of the network's weekly volume needs each supplier's parts, through every tier, and shows how each fares in the scenario on the map.
| Supplier | Tier | Makes | Your volume that depends on it | Sites fed | In this scenario |
|---|
Simulates every library event on its own and every pair together — 105 scenarios, each at its typical duration, with the levers you hold — and ranks what hurts this network most. Two disruptions together can be far worse than the sum when they knock out each other's alternatives.
Run to rank the scenarios.
The expected-loss figures and the optimiser weigh each event by its yearly likelihood. Choose where those come from, the climate, and whether related events cluster in the same year. Event likelihoods marked “stated” are assumptions; “data-informed” updates each one with the disruption episodes found in the PortWatch record (chokepoints since 2019, ports since 2022), counting the assumption as five years of experience.
| Event | Stated | Evidence in the record | Data-informed (80% range) | Used |
|---|
Caveat: the library's historical events were chosen because they happened, so counting them in a short record nudges likelihoods up. The 80% range shows how little a few years of data can say.
Every combination of the six levers, scored over the whole event library with the time-phased simulation: expected annual loss (each event's likelihood × its average cost over six duration quantiles) plus the annual cost of holding the options. The best portfolio minimises the sum — the real-options view of resilience.
Run to compare.
On/off combinations can't say how much stock, contract cover or standby capacity to buy. This searches over the amounts — stock days per product family, the share of freight under fixed-rate contract, standby second-source capacity, air capacity, extra gateway allotment, the control tower — and picks the portfolio with the lowest annual option cost plus expected loss, optionally weighting the worst 10% of years. It's a two-stage stochastic optimisation: buy the options now, then let the time-phased simulation play out every library event. Takes about a minute. For when to exercise or expand an option, see the Real Options app.
Choose a risk attitude and run the optimiser.
Container-ship transits and port calls per day from IMF PortWatch (AIS satellite data), compared with the 2019–Oct 2023 average. Chokepoints: below 35% the Atlas treats one as avoided by container lines; 35–85% as squeezed. Ports: below 35% near-shut, 35–60% reduced. Refreshed daily by a scheduled job. Click any row for its history.
| Chokepoint | Last 7 days | Normal | vs normal | Status | Your flow |
|---|
| Port | Last 14 days | Normal | vs normal | Status | Your TEU/wk |
|---|
| Date | Source | Alert | Event | Nearest network node |
|---|
The model's key assumptions, recomputed against the PortWatch record and cited figures every time the data refreshes. A flagged row means an assumption needs recalibrating — that's how the Panama drought figure was corrected in v2.1.
| Event | What the model assumes | Model | Observed | Result |
|---|
| Service | Trade | Route via | Normal days | Now days | Capacity TEU/wk | Rate $/TEU | Flow TEU/wk | Status |
|---|
Every analysis on this page can run from a JSON scenario spec — network (built-in, your own, CSV or shipment history), events, levers, assumptions and the analyses you want — and returns a versioned JSON result. The same engine runs from the command line for integrations: node atlas/cli/run.mjs spec.json --out result.json (see atlas/engine/api.js for the format and atlas/examples/ for samples).
Routing. Ships follow a hand-built graph of 87 sea-lane waypoints and 119 lane segments through the world's chokepoints (Dijkstra shortest path). Distances are within ~6% of published port-to-port figures. Closing a chokepoint reroutes every service that used it; ultra-large Asia–Europe ships are kept out of the Panama Canal.
Re-planning. Each week's flow from factories through ports and ocean services to DCs is solved as a min-cost flow: production premium + inland legs + ocean rate (40% of which scales with sailed distance) + disruption surcharge + the carrying cost of goods in transit. Unmet demand costs the lost-sale cost, so the solver only lets demand go unmet when every alternative is dearer. A longer voyage cuts a lane's weekly capacity in proportion (same ships, longer round trip).
Time-phased simulation (v3). Every scenario is simulated day by day. Each disruption ramps up, peaks and fades on a profile for its type, and freight rates rise and then decay with a half-life. Planners see conditions about a week late (the control-tower lever shortens this to two days), wait out disruptions they expect to end within a week, and re-plan weekly with the min-cost flow. Ships already at sea divert mid-voyage when their route is abandoned; at a closed canal they queue, and the queue clears at +120% of normal flow (calibrated to the Ever Given). Ports clear backlogs at +15% (calibrated to the 2024 East Coast strike). When supply moves onto a slower route, the old route keeps running until the new pipeline fills; after a shortfall, extra orders rebuild stock at up to 20% of daily demand. All of these are editable under Assumptions.
Product families (v3.1). Each DC holds stock per family; each family has its own value (which drives transit and holding cost), cost of a lost sale and fill-rate target, judged on its worst rolling four weeks. The weekly plan is solved family by family in order of lost-sale cost: each family's min-cost flow gets the factory, ship and port capacity the more valuable families left — a transparent approximation of a joint multi-commodity optimisation. Air freight carries only families allowed to fly, most valuable first. Extra safety stock can cover every family or only the critical ones. Networks imported without families run as one aggregate product.
Optimising the options (v4). Levers are amounts whose annual cost scales with size. The optimiser runs coordinate descent over a grid of amounts (from “nothing held” and from “everything at its standard amount”), scoring each candidate on every library event at three duration quantiles with the time-phased simulation. The annual-loss distribution comes from 4,000 sampled years in which each event occurs independently with its stated likelihood; CVaR 90% is the mean of the worst 10% of those years. The objective is option cost + (1−λ)·expected loss + λ·CVaR, with λ set by the risk attitude. Every candidate uses the same scenarios and random years, so differences are due to the levers, not noise. The grid is coarse and the search local, so treat the answer as a well-supported recommendation, not a global optimum.
Likelihood and correlation (v4.1). Each event can name evidence in the PortWatch record: a chokepoint or set of ports whose traffic stays below a threshold for long enough; runs separated by short recoveries count as one episode. The stated likelihood is a Gamma prior on the yearly rate worth five years of experience; the observed episodes update it (Poisson–Gamma), with an 80% interval by sampling. Shared drivers — geopolitical tension, El Niño, port-labour contract cycles, pandemic waves — make their events more likely in the same year while each event keeps its own yearly likelihood, which fattens the bad-year tail without changing the expected loss. Climate scenarios force a driver (an El Niño year) or scale weather events' likelihood and duration (2040, high warming); their multipliers are illustrative. Losses from events in the same sampled year are added up, which ignores their interactions; the worst-case search simulates pairs together to show where that matters.
Time-to-survive vs time-to-recover. After Simchi-Levi et al. (Harvard Business Review, 2014; Production and Operations Management, 2018). A day-by-day inventory simulation at each DC: cargo on lanes that stay open keeps arriving; rerouted lanes arrive late by the extra sailing time; newly used lanes deliver only after their full transit (plus ramp-up for a standby supplier). Time-to-survive is the first day demand goes unmet; time-to-recover is the disruption's duration.
Costs. Extra operating cost per TEU served × volume × duration, plus lost sales × the cost of a lost sale, plus any air freight used to plug gaps. Lever costs are annual premiums, shown separately.
Limits. One aggregate commodity (TEU); weekly steady-state flows; cargo already at sea on a cut lane is not delivered during the disruption; recovery is immediate when it ends; event effect sizes are calibrated to the public record but are assumptions. The sample company is fictional. Treat outputs as a structured way to compare options, not a forecast.
Data.
Live alerts. A hazard alert within reach of the network's ports or factories becomes a scenario using a per-type template (cyclone, earthquake by magnitude, flood, drought, volcano, wildfire) defined in data.js; PortWatch's own list of affected ports is used when it has one. Droughts affect the Panama Canal only when GDACS lists Panama.
Platform (v5). Networks can be built from a shipment-history export (column mapping with automatic detection; ports matched by UN/LOCODE or common name; capacities 25–30% above observed volume; distance-based rate and inland-time estimates). Workspaces save the full setup in the browser and travel as files. The steering-committee report is a self-contained page that prints to PDF. The API runs any of this from JSON, in the page or from the command line. There is no server: nothing leaves your browser unless you export it.
Suppliers, descriptions and the brief (v5.1). Tier-2/3 suppliers feed factories (or other suppliers) with a stated share of the site's output that needs their parts; independent dependencies multiply, and factories hold two weeks of components, so a supplier outage reaches output only after that. Described disruptions are parsed by deterministic phrase matching — ports, chokepoints, suppliers, factories, event kind, severity, duration, rate rises — and shown for review; nothing is sent anywhere. The daily brief compares today's snapshot with the one this browser saw last time and ranks changes by your exposure.
Version history. v5.1.1 (Oct 2026) — an About page for the Atlas with its author; contact links go to Estay Dynamics. v5.1.0 (Oct 2026) — tier-2/3 suppliers with cascading dependencies, component stock and hidden-dependency analysis; Hualien 2024, Thailand 2011 and a Taiwan fab-outage stress test; describe a disruption in words; daily brief; a 12th history check. v5.0.0 (Oct 2026) — platform: networks from shipment history, workspaces (saved and shareable as files), steering-committee report, JSON scenario API with command-line runner. v4.1.0 (Oct 2026) — data-informed likelihoods from PortWatch disruption episodes (Poisson–Gamma with intervals); correlated events through shared drivers; climate scenarios; worst-case search over all single events and pairs; an 11th history check (the episode detector finds the known disruptions). v4.0.0 (Oct 2026) — levers become amounts with scaled costs; optimiser over stock per family, contract coverage, standby capacity, air capacity, gateway allotment and the control tower, minimising option cost plus expected loss with an optional CVaR 90% weight; cost–risk frontier; one-click apply. v3.1.0 (Oct 2026) — product families with their own value, lost-sale cost and fill-rate target; priority allocation of scarce capacity; per-family stock, air eligibility and service results; critical-only safety stock; fill-rate-by-family chart and table; fixes: shortfalls merging across DCs, port surge capacity. v3.0.0 (Oct 2026) — time-phased simulation: event ramps and recovery, rate decay, planner reaction lag and wait-it-out rule, mid-voyage diversions, canal and port queues, pipeline overlap and stock rebuilding; service-over-time and backlog charts; measured recovery day and tail; early-warning control-tower lever (64 portfolio combinations); two more history checks (10). v2.2.0 (Oct 2026) — 97-port library (was 30) on a 173-waypoint sea graph with an automated land-crossing test (which found and fixed 9 coastal shortcuts); live container port calls for every library port, port-level live conditions and a “Your ports” monitor; hazard alerts near the network become one-click scenarios; Baltimore 2024 event and history check. v2.1.0 (Oct 2026) — checked against history (7 live-recomputed checks; Panama drought recalibrated from 60% to 90% container capacity after PortWatch showed container lines kept their slots), stale-data warning, light theme, table view and keyboard navigation for every chart, phone layout for the headline numbers, CSV import moved into a tested module, browser smoke test in CI. v2.0.0 (Oct 2026) — rebuilt as a decision lab: real PortWatch/GDACS/USGS snapshot, sea-lane routing, min-cost-flow re-planning, TTS/TTR, Monte Carlo, value of flexibility, CSV import of any network, four-level tutorial. v1 — illustrative globe with scripted scenarios.