Activeboards
Devo's dashboards platform: real-time analytics over log data at petabyte scale
Activeboards is the dashboards and analytics product of Devo, a cloud-native security analytics platform running on log data at petabyte scale. I designed and built it from scratch with the core team, and led it technically for seven years, from the first React version to the platform it became.
Everything is a widget
The architecture rests on one decision made early and never walked back: a dashboard is a collection of widgets, and the grid that arranges them is itself a widget whose job is placing other widgets. Containers, charts and inputs are all the same kind of thing, which is what made nesting, drag and drop editing and per-widget behaviour fall out of the model instead of being special-cased into it.
Building a dashboard without writing one
Dashboards are composed by dragging. A saved platform query can be dropped onto a chart, and an inference step reads the shape of its result and picks a representation on its own, with the properties left open for tuning afterwards. There are two modes: an edit mode that persists, and a view mode where anyone can push a widget's properties around without changing what everyone else sees.
Underneath sits a data-dependency language that declares what feeds each widget and what it depends on, so a widget's dataset can be a query parameterised by the value selected in another widget's input. The language predates my time on it. I spent years extending it and making it fast, and it is the piece that turns a page of charts into something interactive.
The chart layer
Ten charting libraries live behind one interface: Highcharts, ECharts, D3, AG Grid, Google Maps, Vis.js, Sigma.js, Cytoscape.js, Chart.js and amCharts. Each one takes its data differently, so the layer is built as one normalisation adapter per library, plus dataset transformations, property definitions bridging a form builder to each library's options, and metadata describing every chart type. Adding a library means writing an adapter, not touching the platform.
Making it open instantly
The platform loaded in up to fifteen seconds. Migrating it to TypeScript and to lazy loading brought the initial interface to near-instant, with each charting library pulled in only when a widget actually needs it. The result came from an architecture that had been planned years earlier to allow exactly that, which is the part worth keeping.
The components came from Genesys UI, the design system I led in parallel and which grew out of this work.
Status
Built at Devo between 2018 and 2025, in production with enterprise customers, and documented publicly in Devo's product documentation, which is where these screenshots come from. It is not my code to publish, so this page is a description rather than a repository.