Route planning that keeps pace with reality
De Haas Road Cargo transports fresh flowers and plants every day to destinations across Europe. Each morning, orders must be allocated across lorries, with tight deadlines and fluctuating volumes. Appfront built a planning app that lets planners drag orders onto routes, monitor capacity per lorry in real time and synchronise everything with their TMS.
The clock starts ticking at 6 a.m.
Every morning, the planning team opens the export from their TMS: a long list of orders that must be allocated to routes before departure. Flowers and plants that have to reach customers across Europe on time. Late means rejected cargo. A half-empty lorry means lost margin. Allocating them is more complex than it sounds. Each lorry has a different capacity, orders vary in volume and weight, and some destinations require specific vehicles or routes. Add time windows, regional groupings and last-minute changes, and you have a puzzle that has to be solved afresh every morning. For years this was done with printed lists and highlighter pens. Planners judged the loading by experience and keyed the allocation back into the TMS by hand. Any change meant starting the puzzle over. De Haas needed a tool that supports the thinking rather than slowing it down.
"We drag orders onto routes, see straight away from the capacity bar whether a lorry is full, and synchronise everything with the TMS in one click. The difference is that we now trust the plan."
Two weeks alongside the planning floor
Before we started building, we sat next to the planners. We watched how routes were put together: when two smaller routes are better than one large one, how combinations of destinations fit within time windows, what happens when a last-minute change comes in. Planners don't think in individual orders but in routes and planning groups. They see a lorry, know which region it drives and judge whether the load fits. That mental model became the starting point: routes at the centre, orders dragged into them, capacity visible at a glance. Plus the ability to sort by loading, filter by planning group and hide full lorries.
A morning with the planning app
The planner opens the dashboard and clicks 'fetch data'. The orders appear on the left, each with its CC count and region. On the right are the routes: cards showing the registration plate, VK/CC capacity and a colour-coded bar. He filters by planning group, sorts by loading so the emptiest lorries appear at the top, and starts dragging. The capacity bar changes colour with it: green when there is room, orange when full, red when overloaded. Need a change along the way? Drag an order from one route to another and both bars update immediately. Once everything is planned, he clicks 'send'. The plan synchronises with the TMS and the drivers have their route information.
From old to new
Printed lists become drag and drop
Drag orders onto routes instead of allocating on paper. The capacity bar shows each lorry's fill level at once.
Retyping becomes automatic sync
Fetch data from the TMS, create the plan, send. No more manual entry.
Puzzling becomes live insight
Each route shows VK/CC loading in real time. Green is good, orange is full, red is too much.
The engine under the bonnet
The planning app is part of a platform of three apps that run on the same data and sync continuously with the TMS. Beneath the dashboard runs a queue system: workers that retrieve routes via SFTP in parallel, validate orders, recalculate capacities and send changes back. There is also an Admin Portal for managing drivers and vehicles. Adding new vehicles, adjusting capacities or linking drivers: everything syncs automatically. Every sync runs as a background task, without slowing down the planner interface.
Built for the busiest morning
The interface is a single-page ReactJS application that caches data locally and only fetches changes. Drag-and-drop responds instantly, even with a full list of orders. The backend runs on Node.js with PostgreSQL for planning and capacity data, and Redis for real-time synchronisation. As soon as a planner moves an order, colleagues and the TMS receive an update straight away. The whole system runs in Docker containers on Google Cloud.
Framework
ReactJS | Node.js | PostgreSQL | Redis | Docker | Google Cloud
A planning tool that grows with the business
The planning app has become the heart of De Haas's daily operations. Routes are put together using drag-and-drop, capacity per truck is always visible, and changes sync automatically with the TMS. The modular architecture makes it possible to keep building: route optimisation or automatic route suggestions based on historical patterns. The app is part of the wider De Haas platform, alongside the emballage app and the customs module.