The customer (we’ll call them North Star Logistics) runs a regional fleet that moves between 4,500 and 5,500 jobs a day. When they came to us, every job started life on a paper docket, was dispatched over a WhatsApp group, and reconciled into three different spreadsheets at the end of the week. The week-end reconciliation took two full-time admins three days.
Today the entire flow runs on a custom platform we built — driver app, dispatcher web console, REST + event backbone, proof-of-delivery capture, automated invoicing. Reconciliation is twenty minutes. Here’s how it shipped.
The constraints
- Don’t break the route. Drivers had to stay productive every single day of the migration. No “flag day.”
- Patchy connectivity. Half the routes go through dead zones. The driver app had to be offline-first.
- The dispatchers are the experts. Twenty years of routing knowledge between three people. The product had to amplify them, not replace them.
- Paper as the source of truth, until it wasn’t. For the first six weeks, paper still won any disagreement.
The architecture
Boring on purpose:
- React Native driver app with SQLite + a sync layer. All actions queue locally and replay when connectivity returns.
- Node.js + TypeScript API behind an ALB; Postgres for state, Kafka for events, Redis for live dispatch board.
- Dispatcher web console (React) driven by the same event stream so live job state is identical across drivers, dispatch and ops.
- Generated PDFs for invoices and customer-facing proof-of-delivery, stored in S3 with KMS encryption.
The migration plan that actually worked
- Shadow week. Drivers carried the app and the paper docket. Every action got entered both ways. We compared the two sets nightly for a week and fixed every disagreement.
- App-of-record on one route. The route with the most patient driver and the friendliest customer. App becomes source of truth; paper becomes backup.
- Roll forward by route. One route per week, in order of difficulty. Every roll-forward had a documented rollback — we never used one, but it changes the conversation when you have it.
- Kill the spreadsheets last. Reconciliation moved into the platform only after sixty consecutive days of zero reconciliation deltas.
The hardest part of going paperless isn’t the software — it’s convincing the people who’ve been doing it on paper for twenty years that you’re not about to break their week.
What changed
- Reconciliation: 3 admin-days per week → ~20 minutes.
- Time from delivery to invoice: 6–9 days → same day.
- Disputed deliveries: ~3.5% → under 0.4% (proof-of-delivery photos and timestamps did most of that).
- Dispatcher capacity: same three people now comfortably handle ~20% more volume.
We under-invested in the dispatcher console for the first month. We thought driver UX was the risk; the real risk was a dispatcher tool that didn’t match how they actually planned. Lesson: ride the truck, sit with dispatch, then write the spec.
If you’re running a logistics, field-service or last-mile operation and reconciliation is eating your week, come and talk to us.
Have a job we could help with?
30-minute call. Senior engineer on the line. We’ll tell you whether AI, cloud or a custom build is the right tool — even if the answer’s no.