Replacing spreadsheets, WhatsApp, and a depot kiosk with a single Power Platform dispatch surface for a UK chilled-distribution operator — and closing a long-standing audit gap on every in-shift driver and vehicle change.
Coldstream was running 80–120 dispatches a day across four depots on a stack of Excel workbooks, a depot kiosk, and a WhatsApp group for last-minute swaps. The system worked — until anything went wrong.
A Microsoft Power Platform dispatch surface that lives where the dispatcher already lives — Microsoft 365 — and writes every operational change straight into Dataverse.
LandingScreen · galDispatchList · Allocated Drivers tab. Demo data shown — real driver and route identifiers are not displayed.
Date · depot · dispatch list · driver / vehicle / mate swap on tap. The dispatcher never leaves this screen during a shift.
16 custom tables with role-based security. Every Patch from the canvas writes through native createdon / createdby — no shadow audit.
Three production flows fire Adaptive Cards into Teams when a delivery slips, a collection moves, or a loading violation lands.
Date-scoped dispatch gallery with Available Drivers, Allocated Drivers, Drivers Mates, and Driver Training pivots.
Every driver / vehicle / second-person swap captured to a Dispatch Change Logs entry with mandatory reason from a fixed enum.
Three Power Automate flows push structured cards into the relevant Operations channel within seconds of a Patch.
Single-tap re-assignment from the gallery row. Lookup-backed so swaps stay consistent with the rest of the schema.
Native createdon and createdby on every change-log row. Compliance can pull a clean report without calling a developer.
Admin, dispatcher, loader, debriefer, and driver each land on a screen tailored to their primary task.
The single feature that paid for the engagement. Before this shipped, ~10% of in-shift driver swaps had any documented reason. After, every change carries one — captured before the dispatcher can move on.
The Reason Capture overlay is the one piece of friction we deliberately introduced. It can’t be cancelled. Save stays disabled until the dispatcher selects a reason from the appropriate enum:
Native Dataverse createdon and Created By carry the audit metadata. No duplicate text columns, no drift between the audit log and the underlying record.
Any dispatcher or operations manager can open the Change History panel for any dispatch and see the full audit trail — every swap, every reason, every captured-by, sorted DESC by createdon.
Each flow triggers on a specific Dataverse field update and pushes a Teams Adaptive Card into the right Operations channel — within seconds of the Patch.
Fires when a driver flags a delivery exception (refused, partial, damaged). Operations sees the issue before the driver finishes the route.
Tracks supplier-side collections — late, missed, rescheduled — and routes the card to the procurement Teams channel automatically.
When a loader records a violation (overweight, mis-stacked, temperature out-of-range), this flow surfaces it to compliance with full context attached.
Outcomes from the first nine months in production
Indicative ranges based on industry benchmarks for a mid-sized UK chilled-distribution operator. Actual savings vary with fleet size and pre-engagement compliance posture.
14-screen canvas app driving the dispatch floor. Custom galleries, role-aware navigation, and a hand-tuned Power Fx state model for the in-shift change loop.
16 custom tables with relationship-driven lookups. Native createdon and createdby provide the audit metadata — no duplicate text columns to drift.
Three Dataverse-triggered flows pushing Adaptive Cards into the right Operations channel. Webhook-based, rate-limited, and idempotent.
The Reason Capture popup felt like friction the first week. By the second week it was the feature my team noticed they couldn’t live without. We finally have a defensible record of every swap — and Monday mornings stopped being an Excel job.
Three weeks shadowing dispatchers, an operations manager, and a route driver. Mapped the full lifecycle and inventoried every existing Excel sheet and Power Automate flow.
First playable build: dispatch gallery scoped to today, basic driver assignment, no audit yet. Shipped to one dispatcher for early feedback.
Migrated dispatch records from spreadsheets into 16 custom tables. Deduped 9 months of historical data. Application-user role rolled out to the full team.
Built and tested the three production flows. Targeted Teams channels for Operations, Procurement, and Compliance. Retry handling and idempotency covered.
Designed and shipped the Reason Capture popup, the change-log table, and the Change History panel. The audit gap closed.
Trained all four depots. Rolled out across the dispatcher pool over three days. Hand-off to the in-house Power Platform admin for ongoing iteration.
Per-user licensing, gallery render performance, no real offline mobile, and an audit trail spread across three places. Read how we kept the same data model and walked Coldstream through a zero-downtime cutover.
We design and ship Power Apps + Dataverse + Power Automate platforms for dispatch, field operations, and compliance-heavy workflows — with audit baked in from day one.