Floor Display
Built for the screen hanging in the operations floor: it rotates through
eleven views on its own, untouched, and reads from across the room.
My roleDesign, development & operation
Who watches itThe operations floor, all day
Sources5 webhooks · 1 of its own
InteractionNone — on purpose
Why it exists
Same data as the Job Status dashboard, a different way of looking at it.
The difference isn't the content, it's the reading context:
no one stands in front of a TV to filter anything. From four meters away,
the only things that read are color, size, and order.
- Eleven views on automatic rotation. Overall status, board by
status, operator-vs-status heatmap, urgent shipments, overdue
receivables, and the export program's progress.
- Zero interaction under normal operation. No one touches the
screen: if it had to be touched to say something useful, hanging it
wouldn't be worth it. There is a filter panel — period, company,
operators, status, and mode — but it lives hidden behind a key
combo, for whoever administers the screen, not whoever walks by.
- The week's on-call role and the team's birthdays, because the
screen belongs to the team too, not only to its metrics.
Where the data comes from
01CargoWisescheduled reports
02Python watcherwatchdog → POST
03n8nnormalizes · persists
04MySQL RDShistory + views
05GET webhookflat JSON
It reuses the same feeds as Job Status — shipments, receivables and
payables, transport bookings, and the billing-pause state — and
adds one of its own: export-program tracking, a row of thirteen
stages per shipment, from request to delivery, where each cell is
colored as done, in progress, late, or estimated.
Reusing the feed instead of duplicating it is the decision that matters:
the TV and the desktop dashboard can't contradict each other. If
each one ran its own query, one day they'd say different things, and the
argument would shift to which of the two was lying.
Build decisions
- What communicates is the row's color and its order, not the
number. Late items rise; urgent ones get colored. The fine detail
exists, but it's for whoever walks up close.
- The canvas is fixed at 1920×1080 and scales as a whole to
the screen. That way the composition gets designed once and looks
the same on the office TV, on a monitor, or on a projector, without
every view having to be responsive on its own. The type scale is its
own too: the rest of the suite is sized for a monitor half a meter
away.
- Rotation doesn't stop for an error. If a feed doesn't respond,
that view says so and the screen keeps rotating: a TV frozen on an
error is a TV people stop looking at.
- Written in React from a CDN, no build step, unlike the rest of
the suite: rotating views with shared state was the one case that
justified it.
What's different in this demo
Same production file with the data layer swapped out. The rotation runs
the same as on the real screen, so it's worth letting it run a while
instead of judging it on the first view.
- Clients, amounts, operators, and brand are made up.
- The team roster — on-call role and birthdays — is
entirely fictional. In the real version it's sixteen people with
a name and a date, and that's personal data about third parties: it
doesn't go out.
- Libraries load from a CDN the viewer allows; they're the exact same
versions used in production.
ReactJavaScriptHTMLPython
n8nMySQL · AWS RDSCargoWise