Using the dashboards

The hub, and the menu

The hub (index.html) is the page on the wall tablet. It answers “is the house all right” from the top of the screen — who is home, the heating, the battery, today’s carbon, a strip of live cameras — and then offers a way into everything else through three cards: House, Rooms and Tools. Those open the menu (menu.html), which is the only page that lists every page and every room, so a room added in Settings appears there without touching any HTML.

Every page has a Home button, and the tiles that look tappable are tappable.

Things that move

A screenshot cannot show any of this, which is rather the point of the list.

The power flow really flows. On the Energy page and on the hub’s power card, the sun, the battery, the house and the grid sit around the inverter and streams of dots run along the links between them, in the direction the energy is actually going. Reverse the battery from charging to discharging and the dots turn round. The figures behind it refresh every five seconds, and the battery ring sweeps to its new level rather than jumping.

The live dot tells you whether to believe the page. Every page carries a small green dot beside its “Updated” time that pulses while the data is arriving. If nothing has arrived for three missed polls it turns amber, stops pulsing, and the line changes to “not updating for four minutes”. It runs on its own timer rather than on the poll, because a poll that has died cannot be trusted to report that it has died — and only a poll that actually returned data clears it.

Sensors pulse while they are seeing something. A motion or presence tile on a room page breathes gently for as long as the sensor is detecting, so a glance tells you the difference between “someone is in the kitchen” and “someone was”.

A door in motion sweeps. Press Open on a garage or a front door and the button takes itself over: it fills, says what it is doing, counts the seconds, and a light sweep runs across the tile for as long as the contacts say the door is actually moving. It holds until the sensors confirm the door really has moved, goes red if it failed, and goes amber and tells you to go and look if nothing confirmed it either way. It is reporting the door, not the fact that Indigo accepted the request.

Cameras are live video, not stills. H.264 streams transcoded to MJPEG and dropped straight into an <img> tag. On a slow link — away from home over Tailscale, on mobile data — everything slows right down and then stops altogether after ten minutes untouched, because somebody is paying for those bytes.

Charts redraw rather than reload. The energy, cost, carbon and history charts update in place as new figures arrive, and the Timeline’s replay control pulses while it is playing.

Cards animate in once. A card slides in on the first paint of a page and never again. Identical output writes nothing to the page at all, so text stays selectable and anything you have opened stays open.

And all of it stops if you ask it to. Every animation sits behind prefers-reduced-motion. Turn motion down in your operating system and the dots, the pulses, the sweeps and the card entrances all go, while everything keeps working.

Tap to go deeper

Tiles that open a page of their own:

On this page Tapping this Opens
Hub a room tile that room, end to end
Hub the camera strip the full camera grid
Hub the weather, energy or timeline card that page
Mains any meter tile that meter’s own page — its live reading, its rank against every other meter, its seven-day offset and its history
Wi-Fi any access-point tile that AP’s own page — per-radio state and every client on it
Menu any room that room
Activity an event that moment on the Timeline
Timeline the presence lane the Presence page
Energy the money figures the Cost page, and back again

Tiles that open in place, without leaving the page:

On this page Tapping this Opens
Room a light or socket its own controls, and a full colour picker for anything colour-capable
Room a camera that camera’s stream, full width
Room a blind its position control
Weather any sensor that sensor’s reading and its recent history
Cameras any stream full screen — tap again to come back
Hub a Favourite the device’s controls, in the tile
Laundry a deadline chip replans that appliance on the spot
Meter, System, Activity, Settings a fold the detail underneath, which stays open while you are on the page

And two things that look like they should be tappable and deliberately are not. A meter that is not answering shows no position on the voltage scale, because a frozen reading cannot be placed on a scale of live ones. And an appliance that has not run enough times to be measured gets no deadline chips, because there is nothing yet to schedule.

Controls, confirmation and the PIN

A control button does not flash a tick because the command was accepted. dashboards-action.js runs the action, takes the button over, and watches the device states until the thing has really happened — a device whose communication is disabled, or whose plugin has stopped, swallows a command without an error, and the page would otherwise show a switch flipped for ever while nothing moved. It checks back a few seconds later and reverts with a warning if the device disagrees.

Devices on the PIN list (Settings → Security) ask for the control PIN once per session before any command. It is a speed bump for a shared tablet, not a lock.

A guest-paired browser sees every page and can control nothing. It holds no API key, so the restriction is not a matter of the interface politely hiding buttons.

Alerts from your own browser

The Alerts page lets any device that shows the dashboard also watch it: pick devices and variables, choose a condition (“turns on”, “turns off”, “changes at all”), and matching changes raise a system notification on that device, with a thirty-second per-rule cooldown so a chattering sensor cannot spam you. Rules live in the browser that made them, nothing on the server. There is no cloud push service behind this, so notifications only arrive while a dashboard tab (or the installed home-screen app) is open — ideal for a wall tablet, a kiosk, or a pinned tab, rather than a phone in a pocket. The server-side error watch on the same page is a different thing: it is always on and sends its own notifications whether or not any page is open.

Standalone app

The dashboard ships a web-app manifest, so it can be pinned as a proper standalone app rather than a browser tab.

  • iPhone / iPad — open the hub in Safari, tap Share, then Add to Home Screen.
  • Mac (Safari)File → Add to Dock… (macOS Sonoma and later).
  • Mac / Windows (Chrome or Edge) — the install icon in the address bar, then Install.

Links inside the standalone app stay inside it — tapping through to room pages, the camera grid and so on does not bounce out to the browser.


Back to top

© 2026 CliveS · MIT licence · Built with Claude Code. The pictures are a real house, captured through a proxy that rewrites every address on the way.

This site uses Just the Docs, a documentation theme for Jekyll.