← All work

Case study · Loblaw · 2026

A freight allocation tracker that shows what's left

The contract said one thing, the weekly forecast said another, and nothing put them side by side. I built a single-file browser tool: drop in the forecast workbook and every lane shows allocation, booked, forecast and available, week by week.

4
Rows per lane: allocation, booked, forecast, available
2
Contract shapes: per lane and per service
1
Upload to refresh every lane
0
Servers. The workbook stays in the browser

The problem

Ocean contracts award space by carrier and by lane. Those numbers sat on a cheat sheet where the master grid was a pasted image, not cells, so nothing could read it. Booked and forecast volume sat in a separate weekly workbook. The question was simple: on this lane, in this week, how much contracted space is still open? Answering it meant reading a picture and cross-checking a workbook.

Why it mattered

Available space is the number people act on, and a total hides it, because a quiet week can net out a heavy one. The first run against real data made that plain: several lanes were already over-booked against allocation, and now they showed up in red instead of staying buried in two files.

What I built

Screens below use demo data. Carriers, lanes and volumes are fictional.

The allocation board: region switch and totals across the top, then a card per lane showing allocation, booked, forecast and available by week
The board. Region at the top, totals for the carrier holding the allocation, then one card per lane with four rows across every week in the file. Available is allocation minus booked minus forecast, so the last row is the one that matters.
A single lane card with 34 TEU available in total but minus 4 in week 41, shown in red
A lane that goes negative. This lane has 34 TEU left in total and is still four over in week 41. Over-booking shows in the week it happens, not averaged away.
A separate carrier tab flagged as off-allocation volume, with zero allocation and a lane marked off allocation
Volume outside the contract. A carrier moving boxes on a lane with no allocation gets its own tab, flagged off allocation, and stays out of the total of what's available.
A carrier tab where allocation is a weekly pool per ocean service, shared across the ports that service calls
Service pools. Some allocation isn't per lane at all. It's a weekly pool shared across the ports a service calls. Same four rows, same reading, different contract underneath.

Decisions I'd defend

01

Week by week, not a total

An early version compared the whole period against allocation. It moved to week columns because a lane can be fine across five weeks and over-booked in one of them, and that one week is the problem someone has to solve.

02

Volume fills the lane, whoever moved the box

Allocation belongs to the carrier holding the contract, so booked and forecast volume on an allocated lane counts against it no matter which carrier physically carried it. The question is how much of the lane is used, not who used it.

03

Off allocation is shown, not absorbed

Volume with no allocation row could have been dropped or rolled into a total. Instead it stays visible on its own tab and never reduces what's available, so nothing goes missing and nothing flatters the number.

04

Contract numbers live apart from the logic

Allocation sits in one plain data file, so updating a number doesn't mean touching the tool. The source grid is an image, so those numbers are transcribed deliberately rather than parsed and hoped for.

05

One HTML file, no server

The workbook is parsed in the browser and the Excel export is built there too. Nothing to host, nothing to install, and forecast data stays on the machine it was opened on.

06

Assume the file will be messy

Sheets are found by name, weeks come from a week column or get derived from a date, and port names are matched across files. A May to April file still sorts in order across the year boundary.

Where it stands

Built for the offshore transportation team and extended region by region. It covers two regions and both contract shapes today, with an Excel export of summary, lane totals and weekly detail across all of them.

A companion tool turns the same forecast workbook into one Excel report per carrier, with total, secured and forecast tabs and a bulk zip download. What I would build next is the remaining regions, each with its own allocation holder.

Stack: JavaScript · SheetJS · one HTML file