Home All services
Start a project → Call Now

IoT dashboard case study: smart home

A smart home dashboard that shows what the device is doing now.

A smart home provider's dashboard couldn't keep up with its own device data, so customers were looking at device state (what each device is doing) that was already out of date. We rebuilt it as a Next.js web app fed by a streaming pipeline, which passes on each device event as it arrives. It serves more than 8,000 connected homes.

  • More than 8,000 connected homes
  • Device state settled on the server
  • Duplicate events change nothing
  • Next.js
  • Streaming pipeline
  • IoT
Illustration: a concept smart home dashboard on a dark grid, with a device status panel on the left and a column of event cards on the right

In brief

The client
A smart home provider in IoT (internet-connected devices). We rebuilt its customer dashboard over a streaming data pipeline.
The problem
Device data arrived faster than the old dashboard could draw it. Customers saw out-of-date device state.
The result
A Next.js dashboard serving more than 8,000 connected homes. The server settles each device's state, so customers see it in real time.

The challenge

Device data was outrunning the dashboard.

In a connected home, a screen that shows old device state is a screen that disagrees with the house.

Devices in connected homes rarely send tidy data. Four things made it hard here:

  • Too many events. Device events arrived faster than the old dashboard could draw them, so customers saw out-of-date device state.
  • Devices dropping off. Devices leave the network and reconnect later.
  • Drifting clocks. Device clocks drift, so a timestamp can't be trusted on its own.
  • Duplicate events. The same event is sometimes delivered twice.

Why a faster page was not the answer

It looked like a performance problem in the front end, the part that runs in the browser, and partly it was. But speeding up the page on its own would only have shown the wrong state sooner.

The real question was which reading counts as current when events arrive late, out of order or twice. That decision belongs on the server, where every event can be seen, not in each customer's browser.

What we built

State decided on the server, drawn in the browser.

The rebuild moved the decision about what is current off the browser and onto the server. The browser shows the server's answer.

A customer dashboard in Next.js

We rebuilt the dashboard customers use in Next.js, a widely used framework for web apps. It draws the device state the server has settled.

A streaming pipeline for device events

A streaming pipeline carries device events to the dashboard. Streaming means each event is passed on as it arrives, one after another, rather than collected up and sent later.

Device state settled on the server

The server reconciles device state: it sees every event, including late and repeated ones, and decides which reading is current. The browser is never the thing deciding.

The impact

Real-time state for more than 8,000 homes.

Customers see device state in real time, settled on the server rather than guessed at in the browser. The figures are the client's own, as reported to us.

8,000+
connected homes
Real-time
device state, reconciled server-side

What made it work

Most of the work was making events safe to repeat.

Engineers call this idempotency: handling an event twice gives the same result as handling it once.

Devices drop off, clocks drift and the same event turns up twice. If processing an event twice changes the result, the dashboard is wrong in a way no front-end work can fix.

So most of the effort went into idempotent event handling: making every event safe to receive more than once, so an event that arrives twice changes nothing the second time. Nobody sees that work on the screen. It is the reason the screen can be believed.

Related work

Start with the problem closest to yours.

The service behind this project, and other projects we have written up.

See every case study, or browse all our services.

Let's talk

Is your dashboard showing yesterday's data?

Tell us how events reach it. The fix is usually further upstream than the page. We reply within one working day.