React Device Fleet Table

Is the fleet healthy, how far has the update reached, and which devices fell behind? Four summary figures across the top, then a sortable, filterable table with per-device OTA progress — the whole answer on one screen.

Fleet size

40

Online

28

Degraded / offline

12

OTA complete

21/30

KLV-7000Fab 2Offline3.4.110h ago
100%
KLV-7008Lab 4Offline3.4.114h ago
100%
KLV-7016Grid NorthOffline3.4.0behind3d ago
KLV-7022Grid SouthOffline3.4.0behind2d ago
KLV-7025Fab 2Offline3.4.0behind3d ago
KLV-7028Lab 4Offline3.4.13d ago
100%
KLV-7038Lab 4Offline3.4.11d ago
100%
KLV-7012Grid SouthDegraded3.4.0behind4m ago
KLV-7019WarehouseDegraded3.4.123m ago
100%
KLV-7026Grid NorthDegraded3.4.115m ago
100%
KLV-7030Fab 2Degraded3.4.14m ago
100%
KLV-7035Fab 2Degraded3.4.0behind23m ago
50%
KLV-7001Grid NorthOnline3.4.14m ago
100%
KLV-7002Grid SouthOnline3.4.127m ago
100%
KLV-7003Lab 4Online3.4.112m ago
100%
KLV-7004WarehouseOnline3.4.112m ago
100%
KLV-7005Fab 2Online3.4.121m ago
100%
KLV-7006Grid NorthOnline3.4.120m ago
100%
KLV-7007Grid SouthOnline3.4.0behind19m ago
KLV-7009WarehouseOnline3.4.0behind3m ago
KLV-7010Fab 2Online3.4.0behind28m ago
KLV-7011Grid NorthOnline3.4.0behind23m ago
45%
KLV-7013Lab 4Online3.4.11m ago
100%
KLV-7014WarehouseOnline3.4.0behind27m ago
KLV-7015Fab 2Online3.4.0behind12m ago
61%
KLV-7017Grid SouthOnline3.4.122m ago
100%
KLV-7018Lab 4Online3.4.128m ago
100%
KLV-7020Fab 2Online3.4.0behind22m ago
26%
KLV-7021Grid NorthOnline3.4.0behind28m ago
30%
KLV-7023Lab 4Online3.4.0behind26m ago
44%
KLV-7024WarehouseOnline3.4.0behind19m ago
43%
KLV-7027Grid SouthOnline3.4.0behindjust now
KLV-7029WarehouseOnline3.4.128m ago
100%
KLV-7031Grid NorthOnline3.4.1just now
100%
KLV-7032Grid SouthOnline3.4.0behind5m ago
74%
KLV-7033Lab 4Online3.4.0behind29m ago
87%
KLV-7034WarehouseOnline3.4.0behind25m ago
KLV-7036Grid NorthOnline3.4.12m ago
100%
KLV-7037Grid SouthOnline3.4.127m ago
100%
KLV-7039WarehouseOnline3.4.117m ago
100%

Installation

npx shadcn@latest add "https://kelvinui.com/registry/device-fleet-table.json"

Props

PropTypeDescription
devicesFleetDevice[]{ id, name, health, firmware, lastSeenMin, site?, otaProgress? }
targetFirmwarestringCurrent version — anything older is flagged "behind"

Sorted so the problems float up

The default sort is by health ascending, which puts offline first, then degraded, then online. That is deliberate: a fleet screen sorted alphabetically buries the three broken devices among the four hundred working ones. Every column is still sortable, and the health filter narrows to one class in a click.

targetFirmware turns the firmware column into a drift indicator — anything not on the target is marked behind in amber, so a stalled rollout is visible without doing version maths in your head. otaProgress renders as a bar per device (green at 100%, primary while in flight, an em dash when the device isn't targeted at all), and the header rolls it into an "OTA complete" count.

lastSeenMin is minutes since contact, formatted relatively — pass minutes rather than a timestamp so the display stays deterministic between server and client render, which matters in a statically exported app.

New components every week

Get the week's new Kelvin UI components and templates in one short email. No spam, unsubscribe anytime.