Following updates across the fleetFLEET DASHBOARD · OTA UPDATES● Live
Truck AUpdated
Truck BInstalling
Truck CWaiting
Schematic view, not a product screenshot Following updates as they happen
Trucks across the fleet receive firmware updates over the air, and the team managing the fleet needed to see how each rollout was going. I built the dashboard view that tracks those updates in real time.
Update progress became visible in one place, as it happened.
What the view had to handle
Each truck picks up an update at its own moment, so the view keeps changing after the page has loaded. I built the React view to show that changing state as new status came in.
One data layerDashboardReact components
↔Data layerOne way to fetch
REST servicesGraphQL API
Simplified overview One way to fetch dashboard data
The dashboard pulled data from both REST and GraphQL services. I unified that fetching behind one layer, so components asked for data the same way whatever the source.
It reduced payload size and improved frontend performance.
Why one layer
The REST services stayed as they were. The layer hid the difference from the components, which made the dashboard easier to work on.
Checking the flows before releaseUnit testsJest
End-to-end testsCypress
ReleaseFewer regressions
Simplified overview, not a timeline Tests for the complex UI flows
Some of the dashboard's UI flows were complex enough that a change in one place could break another. I introduced Jest and Cypress unit and end-to-end coverage for those flows.
The tests helped prevent critical regressions in later releases.
How I split the tests
Jest covered components and logic on their own. Cypress ran the full flows in a browser, the way a person would use them.