Eleven agricultural sites, 1.2 million sensor readings a day, and agronomists who needed to spot an anomaly within ten seconds of opening the page.
- Client
- Agricultural research institute
- Role
- Front-end and data visualisation
- Timeline
- Sep – Nov 2024
- Team
- Solo front-end
- Stack
- ReactD3WebSocketsCanvasVite
The brief asked for a dashboard
The institute runs soil and canopy sensors across eleven sites, streaming roughly 1.2 million readings a day. The existing tool drew every series it had — forty-one charts on one page — and took eleven seconds to become interactive.
Watching agronomists use it made the actual job obvious. Nobody was reading forty-one charts. They were scanning for the one line that had left its expected band, and the tool made that the hardest thing to see.
Draw the deviation, not the data
The page now opens on a single band per site showing where each sensor sits relative to its expected range for the season. Anything inside the band is drawn quietly; anything outside is drawn in the accent and sorted to the top. The forty-one charts still exist, one click down, for when someone needs the underlying series.
Rendering moved from SVG to canvas with a decimation pass, so a full year of readings draws in one frame rather than producing forty thousand DOM nodes. Live updates arrive over a WebSocket and are batched to one repaint per animation frame — the sensors report far faster than a human can read.
Half the charts were deleted. That was the most useful commit in the project.
“They asked for a dashboard. What they needed was for one specific line to become impossible to miss.”
Marko Malec
Ten seconds to the anomaly
Time-to-interactive dropped from 11s to 1.3s, and in supervised testing agronomists identified the seeded anomaly in a median of 8 seconds against 47 seconds on the previous tool.
1.2 million points a day now render at 60fps on the institute's five-year-old laptops, which was the real hardware constraint all along.