Skip to content
Eric Blanchard

All work

Fleet Pulse

Asset managers, PV engineers, operations and executives look at the same fleet and need different answers. Fleet Pulse gives each of them a dashboard built around their decisions, on a synthetic fleet of utility-scale solar and BESS sites across Canada and the US.

Type
Personal
Status
Live
When
2026
Role
Design and engineering
  • Next.js 16
  • TypeScript
  • ClickHouse
  • GraphQL
  • deck.gl
  • Docker
  • Storybook
  • Vitest
  • GitHub Actions

Decisions worth a look

  • Four dashboards, one per role, each built around a question: is the portfolio earning what it should, why is this site underperforming, what needs attention now, and are we on track.
  • Loss attribution explains the gap between expected and actual output from telemetry alone, and is tested against the generator's answer key: fleet-wide losses land within 8% of the truth, with under 0.5% left unexplained.
  • Wash-or-wait advice weighs the soiling a wash would recover against its cost and the next heavy rain, and flags outages worth a truck roll.
  • The same ClickHouse image and numbered, forward-only migrations run on a laptop, a cloud droplet or an on-prem Linux host. Nothing on the dashboards calls a third-party service.
  • CI runs four jobs in parallel: lint, types and unit tests; every Storybook story in Chromium with axe checks; SQL tests against a ClickHouse service container; and the full build.

One fleet, four views

Each role gets the question it asks, and only the data that answers it.

RoleThe questionWhat it shows
Asset managerIs this portfolio earning what it should?Revenue earned and lost by site and cause, wash-or-wait payback, the fleet map
PV engineerWhy is this underperforming?A performance-index heatmap, where each shortfall goes, strings below their siblings
OperationsWhat needs attention right now?A dispatch queue ranked by revenue at stake, with rain and curtailment for context
ExecutiveAre we on track, and where's the risk?Revenue and energy against a P50 budget, a month-end forecast, a budget-to-actual bridge

Synthetic data with an answer key

Real fleet data is never public, so the fleet is generated, and the generator keeps score.

  • Physics from sun position to inverter output: clear-sky irradiance, cloud cover, module temperature, string DC and inverter clipping.
  • Telemetry carries only what SCADA would report, with measurement noise and communication outages.
  • Planted faults (inverter outages, curtailment, soiling, offline and degraded strings) come with the energy each one really cost.
  • Every value is a pure function of seed, device and time, so any slice of the data can be regenerated exactly.

Built to be checked

Every component is in Storybook and tested in a real browser with accessibility checks. The site explains itself too: a How it's built page reads live table sizes and compression from ClickHouse's system tables, and a Who it's for page writes down each role's assumptions so they can be tested.