Alwyn van Vuuren · Built and deployed inside A.P. Møller-Maersk · 2026
In active use · EU hosted
← All work
Case study · Logistics · Vite · Vercel Functions · Supabase · Live AIS

Inland container planning lives in twelve tabs. We put it on one canvas.

Built for my own role at A.P. Møller-Maersk, coordinating inland container transport across the Rotterdam → Germany corridor. Vessel cutoffs, customs windows, Rhine water levels, truck capacity, barge slots and rolled-container risk used to live in separate tools, every tab switch a chance to roll a container and break a promised date. I built eight planning surfaces on one canvas, fed by real port AIS and inland waterway gauges, with CO₂ logged natively for CSRD scope-3. In active use on the BENELUX + DE inland desk.

Inland barge operatorsFreight forwardersTerminal operators Shippers / BCOs3PL control towersCSRD scope-3 reportingEU inland waterways
~5×Faster planning per booking
32Inland terminals covered
12Live data feeds
8Planning surfaces, one canvas
The rolled-container math

Every container that misses its slot becomes storage, demurrage and a phone call.

A mid-size inland operator plans hundreds of container moves a week. When a cutoff is missed or a barge slot is mis-read, the container rolls to the next sailing, and the operator absorbs quay rent, demurrage, detention and the re-plan. Industry figures put combined demurrage and detention at €150–€400 per container per day.

Per rolled box
€150–400
demurrage + detention / day
Planning time
~5×
faster per booking on one canvas
Coordination
12 → 1
live feeds, one operating board
Emissions
Native
CO₂ + modal split per decision
01 · Who it helps

Built for the people who carry the cost of every rolled container.

If your team coordinates inland moves across terminals, carriers and waterways, the math works. Four operator profiles where one operating canvas replaces a dozen tabs.

01

Inland barge operators

Waterway levels, lock windows and barge slots change hourly. One board that reads them live keeps a rotation profitable instead of reactive.

02

Freight forwarders

Paid on promised delivery dates, exposed to every roll. Triage at the planning layer means fewer broken promises and fewer goodwill credits.

03

Terminal operators

Gate congestion and CY/CY moves are a coordination problem. A shared live picture smooths the peaks the yard pays for.

04

Shippers & BCOs

Need on-time delivery and now a defensible CO₂ figure. Both fall out of the same planning decision, logged automatically.

02 · Why it matters

From 2025, the emissions number stops being optional. It has to be auditable.

Under the EU Corporate Sustainability Reporting Directive (CSRD), in-scope companies must report scope-3 transport emissions on a defensible, auditable basis. A planning board that logs modal split and CO₂ at the moment of the routing decision turns a year-end scramble into a by-product of normal work.

✕ Without the canvas

  • Cutoffs, gauges and slots live in 12 tools, re-keyed by hand
  • Rolled containers surface as an invoice, not a warning
  • CO₂ reconstructed at year-end from spreadsheets
  • No record of why a routing decision was made

✓ With the canvas

  • All 12 feeds on one operating board, refreshed live
  • Rolled-container risk flagged before the cutoff, not after
  • CO₂ and modal split logged the moment a route is chosen
  • Every decision is a record, audit trail by default
03 · The build

Live feeds in, one canvas out, EU-hosted by default.

Real port AIS and inland waterway gauges stream into a Postgres core; planning surfaces render on a Vite front end behind Vercel Functions; Firecrawl keeps terminal rules and schedules current. Every routing decision writes its modal split and CO₂ score back to the same store.

→ 01
Live ingestPort AIS + inland waterway gauges
→ 02
Terminal rulesFirecrawl keeps schedules current
→ 03
Postgres coreSupabase · 32 terminals, 12 feeds
→ 04
Planning canvasVite UI on Vercel Functions
→ 05
CO₂ ledgerModal split logged per decision
Planning flow: feeds refresh live → planner reads cutoffs, gauges and slots on one board → assigns mode and routing → rolled-container risk flags before the cutoff → CO₂ + modal split written with the decision.   🚢 32 terminals · 12 live feeds · ~5× faster per booking.
04 · The operator view

The same canvas a planner works in, eight surfaces, one board.

Three views of the live system: the planning board where every container move is read and triaged; the live feeds that keep it true; and the CO₂ ledger that logs the emissions of every routing decision. A planner never leaves the canvas.

maersk inland · BENELUX + DE · this week
Live · EU hosted
Export23
Import31
CY / CY14
Terminals32
Live surfaces
Port activity8
Schedules46
Waterway5
Vessel19
ContainerLane / terminalCutoffModeStatus
CTR-4471 Terminal A → Inland hub 3 Tue 14:00 Barge ✓ on time
CTR-4488 Terminal C → Inland hub 1 Tue 17:30 Rail ✓ on time
CTR-4502 Terminal A → Inland hub 2 Wed 09:15 Barge ● at risk
CTR-4517 Terminal B → Inland hub 4 Wed 11:00 Road ✓ on time
CTR-4523 Terminal D → Inland hub 1 Wed 16:45 Rail ● at risk
CTR-4540 Terminal C → Inland hub 3 Thu 08:00 Barge ✕ rolled
CTR-4556 Terminal A → Inland hub 2 Thu 13:20 Road ✓ on time
CTR-4571 Terminal B → Inland hub 4 Fri 10:30 Rail ✓ on time
One canvas, not twelve tabs. Cutoffs, terminals, mode and rolled-container risk for every booking sit on a single board. The eight planning surfaces on the left are the same live database, each viewed for one job. A planner triages the week without ever switching tools.
Live feeds · 12 streams
Streaming
Port AIS · vessels
Vessels tracked37
in coverage zone12:04:11
MV-tracked 08151.9°N 4.1°E
berthing · Terminal A12:04:09
MV-tracked 11451.8°N 4.4°E
inbound · ETA 14:2012:04:02
Waterway gauges
Gauge · Reach 1▲ +0.12 m
3.84 m · navigable12:00:00
Gauge · Reach 2▼ −0.27 m
2.91 m · watch12:00:00
Gauge · Reach 3▲ +0.05 m
4.12 m · navigable12:00:00
Terminal schedules
Terminal A14:00
next export cutoffrefreshed 11:58
Terminal C17:30
rail departurerefreshed 11:58
Terminal Dclosed
gate window 06:00–22:00refreshed 11:57
12 live feeds · port AIS + inland gauges + terminal schedules · refreshed continuously · EU hosted
Real signals, not stale tables. Port AIS positions, inland waterway gauge levels and terminal cutoff schedules stream into the same store that drives the board, so a route is planned against where the vessels and water actually are, right now.
CO₂ ledger · per routing decision
Append-only
TimeMoveModeDistanceCO₂ (kg)Logged
09:12CTR-4471Barge142 km68.4✓ logged
09:31CTR-4488Rail208 km91.5✓ logged
10:04CTR-4502Barge96 km46.1✓ logged
10:22CTR-4517Road61 km52.7✓ logged
10:48CTR-4523Rail177 km77.9✓ logged
11:09CTR-4540Barge134 km64.3✓ logged
11:33CTR-4556Road48 km41.5✓ logged
11:57CTR-4571Rail221 km97.2✓ logged
8 of 312 decisions today · modal split barge / rail / road · exportable for CSRD scope-3
Emissions logged at the decision, not the year-end. Every routing choice writes its mode, distance and CO₂ figure to an append-only ledger; modal split and scope-3 emissions fall out of normal planning, ready to export for CSRD without a reconstruction.