Case study · Internship work
Dispatch dashboard for CMI
A production dashboard that watches container weights across a metals recycler's customer sites and tells dispatch when to send a truck. Used daily.
- Role
- Software Developer Intern, Invision Custom Solutions
- Client
- Combined Metal Industries, Richmond Hill, ON
- Timeline
- Apr – Sep 2026
- Stack
- React, TypeScript, Node.js, Fastify, SQL Server, CSV reporting
Client work under NDA. The board below is a recreation with synthetic data: site names, weights, and trucks are invented. The workflows are the real ones.
- 61
- bins monitored
- 20+
- customer sites
- ~90K
- readings a day
- 43
- automated tests
Problem
Too early wastes a truck. Too late overflows a container.
CMI places containers at customer sites and collects them by truck when they are full. Send the truck too early and the trip is wasted. Send it too late and the container overflows and the customer calls. Dispatchers were making that call from phone calls and spreadsheets.
The scales already existed. What was missing was a system that watched them and said, clearly, which containers needed a truck and by when.
What I built
From a scale reading to a truck on the road.
Live fill levels for 61 bins across 20+ sites.
The dashboard ingests CMI's 60-second scale feed, about 90K readings a day, and shows each container's weight and fill level grouped by customer site, updating as the scales do.
Alerts that drive dispatch.
Crossing a fill threshold raises an alert and starts a pickup SLA clock, one of four tiers from 2 to 12 hours. Alerts escalate as the window closes, and an emergency tier catches bins nobody acknowledged.
Workflows dispatchers actually use.
Acknowledge, escalate, dispatch a truck, leave a comment for the team, export a CSV. Three roles, every action attributable, every change written to an audit log.
A pipeline that survives restarts.
The ingestion worker replayed 304K production readings in about 27 seconds, resumes exactly where it stopped after a crash, and quarantines five classes of bad sensor data so a broken scale can never dispatch a truck. 43 automated tests pin the rules.
Recreation
Try the board.
Dispatch board · recreation
- Containers tracked
- 6
- Over threshold
- 2
- SLA at risk
- 1
- Trucks dispatched
- 0
Northline Recycling · Bay 2
C-114 · 9,120 / 12,000 kg
76% · threshold 80%
Filling
Harbourview Metals · Yard
C-072 · 8,410 / 10,000 kg
84% · threshold 80%
Threshold
pickup due in 3h 0m
Kingsway Fabrication · Dock 3
C-031 · 6,120 / 12,000 kg
51% · threshold 80%
Filling
Eastgate Auto Parts · Rear lot
C-205 · 2,340 / 8,000 kg
29% · threshold 80%
Filling
Northline Recycling · Bay 5
C-118 · 7,905 / 12,000 kg
66% · threshold 80%
Filling
Lakeshore Scrap · Gate
C-149 · 9,650 / 10,000 kg
97% · threshold 80%
SLA breached
overdue by 1h 0m
Audit log
- Day 1 · 07:48System · Alert raised: C-072 at 84% (Harbourview Metals · Yard)
- Day 1 · 07:00System · SLA breached: C-149 (Lakeshore Scrap · Gate), no pickup in 4h
The feed ticks every couple of seconds. Switch roles to see what changes. Synthetic data.
Data flow
One feed in, four outputs out.
Feed
Scales at customer sites
live container weight feed · fill = weight ÷ capacity
Engine
Threshold + SLA engine
threshold crossed? · pickup SLA clock running
Alerts
Threshold, at risk, breached
per site, per container
Dispatcher dashboard
Acknowledge · escalate · dispatch · team comments
role-based access for dispatchers and supervisors · used daily by CMI dispatch
Outputs
Truck dispatch
dispatcher decides · truck assigned, logged
Audit log
CSV reports
Power Apps + SharePoint
QR asset tracker · shipped alongside the dashboard
Also at CMI
Two more tools for the same operation.
Shipped · Power Apps + SharePoint
QR asset tracker
An internal app that lets staff scan a QR code on any asset, validate its serial number, and log where it moved, in real time. Built in Microsoft Power Apps on top of SharePoint so it fit the tools CMI already ran.
In progress when my term ended · with the engineering team
Trader pricing modernization
CMI’s trader pricing ran on Excel VBA macros. With the engineering team, I worked on redesigning the data model, automating the core pricing workflows, and replacing the macros with a web application.
Outcome
In production, and judged on the worst day.
The dashboard is live, wired to CMI’s scale-weight feed, and used daily by the dispatch team.
Operations software is judged on its worst day, not its average one. Every alert had to be unmissable, every action had to be attributable, and every state had to make sense to a dispatcher at six in the morning. That shaped more of the design than any framework choice.