PlatformDispatcher board
Drayage dispatch software that shows the clock, not just the load
One row per load, and the row already knows what that load is costing you today. The board is the part of DrayBase that is already written: it queries a drayage operation out of Postgres — loads, moves, containers, chassis, drivers, appointments — and puts a working day on one screen.
Illustration of the board — sample rows, not live data. The status labels are the ones the product renders.
The rowBuilt
What a row already knows
The columns are not a layout decision. Each one is resolved by the API before the page renders, so the board and the rest of the system can never disagree about what a load is doing or what it owes.
- Load
- Load number, customer, and both ends of the run — the terminal it comes out of, by its gate code when it has one, and where it is going, each with its city and state, because two terminals in the same port are not interchangeable to the driver you are about to send.
- Status
- One of sixteen board states, derived every time the row is built. It is not a column somebody forgot to update after the driver called in.
- Container
- Number, size and type, printed as the shorthand a dispatcher reads at a glance — 40HC, 20DV — with the steamship line, because the line decides the daily rate and where the empty goes back.
- Chassis
- The chassis and the driver on the leg that is open right now, not the ones on the leg that finished yesterday. You need to know who has the box, not who had it.
- Free time
- Last free day, and travelling with it the source the date came from and the moment it was last refreshed — both on the row the API returns, though the table does not print them yet. A free-time date with no provenance is a rumour, and a rumour is what per diem disputes are lost on.
- At risk
- Demurrage plus per diem accrued as of the moment the row is built, counted in whole days and whole cents. Zero is shown quietly; a number that is not zero is shown the way a number that is costing you money should be shown.
- Appointment
- The next window on the load, with the terminal confirmation number when there is one — because without it the truck does not get through the gate.
The clocksBuilt
Demurrage and per diem are not the same clock
Most systems collapse the two into one number called "charges" and let billing sort it out later. The board keeps them apart, because they start and stop on different events and only one of them is still yours to prevent.
The status derivation and the money math live in a package of their own, with 32 unit tests, precisely so the board — and, when they are written, the alerting worker and the invoice — can never quote three different numbers for the same container.
The dayBuilt
Six numbers before you scroll anything
The tiles count the whole operation, not the page you happen to be looking at. Filtering the table down to one customer does not quietly shrink the number of containers bleeding per diem.
- Need pickup
- Open loads with a container still to pull, and beside it the count of open loads already at or past their last free day.
- Need delivery
- Open loads with the delivery leg still to run.
- Need return
- Open loads with the empty return leg still to run. This is the queue per diem comes from.
- Drivers
- Available out of the active roster, with how many are on a move and how many are off duty.
- At risk
- The demurrage and per diem accruing across the whole operation, and how many containers are producing it. The tile totals at the standard daily rate; the line rate and the per-container override are applied on the row.
- Exceptions
- Open problem records nobody has closed. The tile counts them and the record has a field for the money at stake, so the queue can be ordered by impact instead of by age — but the checks that will raise an exception on their own, from an imminent last free day to a missing appointment or stale terminal data, are not running.Detection planned
InventoryBuilt · and not
The whole surface, line by line
A demo can hide the difference between a screen that works and a screen that was drawn. This table is the difference, written down. Nothing marked Planned exists in any form you could use.
Every board query runs inside the tenant of the session that asked for it, and the tenant is taken from the session rather than from anything the browser sends. How that is enforced is on the security page.
Next
The rest of the operating surface
If you dispatch out of Newark or Elizabeth and you want to see this board against your own lanes rather than a sample, tell us where you run. Access opens one port at a time so migrations get done properly.