Fleet Management Platform
A dispatcher has the same three questions all day: where is everyone, who takes the next job, and what is each driver owed at the end of the month. This platform answers all three, from a position leaving the driver's phone to the vehicle moving on the dispatcher's map a moment later.
- DomainPassenger vehicle fleet operations
- EngagementFull platform build, three applications
- StageDelivered and running
Three applications, one system
A driver app, a backend and a dispatcher console, designed and built as one system. There is no unit to fit to a vehicle: the driver's own phone is the tracker, so a driver joins the fleet by installing an app and no vehicle comes off the road for an installation. The cost of that choice lands on the engineering instead, because a phone will happily stop reporting the moment the app leaves the screen, and much of the work in the mobile app exists to stop that happening.
It is built as a live picture rather than an archive. The backend keeps one current position per driver and pushes each new fix outward the moment it arrives, so the map shows where everyone is now. Distance and duration come from the booked route, and navigation itself is handed to the phone's own maps app. What was worth building was everything layered above the dot on the map: booking, zone rules, demand, reminders and settlement.
An operation running on phone calls
Everything the dispatcher needed to decide with existed somewhere. None of it was on one screen, and none of it was current.
Where the fleet was lived in phone calls
Handing out the next job meant ringing round to find who was free and who was closest. The answer was whatever a driver said it was, already minutes old by the time it reached the person deciding.
Booking mistakes only surfaced on arrival
The same driver promised to two customers in the same half hour, or a pickup accepted in an area the fleet does not serve, stayed invisible until somebody turned up and could not complete the job.
Driver earnings were reconstructed by hand
Working out what a driver was owed meant gathering their completed jobs, applying whatever rate was supposed to apply to each, and carrying the remainder into the next month. A rate that changed part way through made the earlier months arguable.
One map, one set of rules, one ledger
Positions arriving continuously from the drivers' own phones, jobs booked directly on the map under rules the server enforces, and the month closing itself into a driver statement.
Live positions from the driver's own phone
The tracker is the device the driver already carries. The app is built to keep reporting while nobody is looking at it, which is the whole difficulty of doing this without hardware.
- Reporting continues while the app sits in the background, held open by a persistent location service and an always-on location permission on both mobile platforms.
- A position is sent roughly every ten seconds while the driver is on shift.
- Each new position is pushed straight out to every open console over a live connection.
A console the whole fleet fits on
One map carries the fleet, and the job is created on the same map the dispatcher is already reading.
- Every vehicle is colour-coded by what its driver is doing right now: free, on the way to a pickup, carrying a passenger, or raising an emergency.
- Jobs are booked by clicking the map, multi-stop routes included, with distance, duration and fare attached to the booking.
- A map link pasted out of a messaging app is resolved back to coordinates, because that is how addresses actually arrive.
Rules the server enforces
Every rule that protects the operation is checked again on the server, so a hidden button in the interface is never the only thing standing between a dispatcher and a bad booking.
- No-go areas are drawn on the map and re-checked on the server: a booking with a pickup or drop-off inside one is refused, not merely discouraged.
- A new job is rejected when the customer or the driver already has one open within the same half hour.
- The driver is reminded of an upcoming job by push notification thirty minutes ahead, once per job.
Settlement and reporting built in
The money side is part of the platform, and so is the view a manager needs of how the week went.
- Commission rates carry the dates they apply to, so changing a driver's rate never rewrites what was already earned.
- Each month closes into a driver statement with the balance carried forward from the previous one.
- Reporting covers revenue and job volume by week and by month, completed against cancelled jobs by hour and by day, and per-driver performance.
The four choices that shaped the build
None of these was the obvious option at the time, and each one is still visible in how the platform behaves.
The phone is the tracker
Nothing is sourced, fitted, certified or maintained, and no vehicle leaves service for an installation. What the decision costs is paid inside the mobile app: a location service that keeps running with its own notification, an explicit background-location permission flow, and a recovery path that stops, re-permissions and restarts reporting when the phone's operating system has quietly killed it.
Pushed, not polled
A single live connection carries each position outward as it lands; consoles do not poll every driver on a timer. A second console watching therefore costs almost nothing.
Demand goes to the drivers' own maps
The last two hours of pickups are clustered to find where work is concentrating, each cluster is named by the neighbourhood it falls in, and the result is drawn on the drivers' own maps as well as the dispatcher's. A driver can act on a shape on their map.
Rates that carry their own dates
A commission rate is stored with the period it applies to, and every job settles at whichever rate was in force when it finished. Changing a rate today cannot quietly rewrite last quarter, which is what makes a statement something a driver can be shown.
What changed in the operation
No figures are published here. What follows is what the dispatchers and the drivers do differently now.
One live map
Dispatch
Deciding who takes the next job stopped being a round of phone calls. The dispatcher reads position and status off one screen, books on the same screen, and the driver is notified without anyone dialling.
Rules hold
Booking quality
Double bookings and pickups in areas the fleet does not serve are refused at the moment of booking rather than discovered on arrival, and because the check lives on the server it holds whichever screen the booking came from.
The month closes itself
Settlement
Driver earnings are a statement the system produces from completed jobs and dated rates, with the balance carried forward, instead of a reconstruction somebody has to defend afterwards.
Do you know where your fleet is right now?
If the operation runs on phone calls and a spreadsheet, the system that replaces it is not a large one. Tell us what a working day looks like and we will tell you what it takes.
Start a conversation