Abbas MerchantWinter 2027. Read what I’m looking for

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

Day 1 · 08:00
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

  1. Day 1 · 07:48System · Alert raised: C-072 at 84% (Harbourview Metals · Yard)
  2. 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.

  1. Feed

    • Scales at customer sites

      live container weight feed · fill = weight ÷ capacity

  2. Engine

    • Threshold + SLA engine

      threshold crossed? · pickup SLA clock running

  3. Alerts

    • Threshold, at risk, breached

      per site, per container

  4. Dispatcher dashboard

    • Acknowledge · escalate · dispatch · team comments

      role-based access for dispatchers and supervisors · used daily by CMI dispatch

  5. 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.