Worked productResidence · running one house

The house is a set of derivations, not a dashboard.

Ten destinations over a household of five, where the temperature the house is holding, whether it counts as shut, and whether a filter is due are all worked out at render. Looking at it should settle whether a domestic product can be built on rules instead of switches.

Preview interactive design
OperatorWhoever is homefive people, one signed in
The clock20:10, dark since 18:20an unlocked door reads differently
StatusEleven fields, 47 valuesoverdue and insecure in none of them
Data34 devices, one link eachsignal, latency, firmware, last asked
The house in one card · 2 ways in are not secure, and the house is holding 20.5° because Sofia is home and awakethe screen the day starts on
The screensResidence · five of the ten

Each screen owes an answer the last one raised.

Thirty registered routes: ten sidebar destinations over two groups, four registers reached from their parent, four records, the profile, seven under settings and six for auth. There is deliberately no /rooms/:id and no /cameras/:id — Rooms holds every room at once, and a camera has no fact a card cannot carry.

02The status set →
Screen 01

The house in one card, before anything is a list

Today owes one answer — can the house be left alone — and gives it in a sentence, with a dotted badge for the attention level. Nothing is summed without its parts named underneath.

  • “2 ways in are not secure” — the back door closed but unlocked, Milo’s window sensor offline
  • Holding 20.5° downstairs — the warmest preference among the three people home and awake
  • “Wants a person 7 — 2 devices, 2 requests, 3 jobs past their date”
/verdict · read-first
Screen 02

Every room and its controls at once

The room card is the remote control: a switch per device, the zone’s temperature, who is in there, what is insecure. There is no room record to open, because a room has nothing a card cannot carry.

  • “9 of 10 rooms have something on, drawing 1.46 kW between them”
  • “Everything off downstairs” acts on the lit lights it can name, and on nothing else
  • “Porch camera · Updating — nothing to do”, recessed rather than greyed out
/roomscanvas · control
Screen 03

The live view first, and the shutters as a household decision

One camera focused with its controls, the others as tiles. Watching is three facts at once — online, set to record, shutter open — so a closed shutter reads as a decision somebody made.

  • “1 of 4 cameras watching” — porch updating, gate never set up, back garden shuttered on purpose
  • 6 clips today of 7 kept, the newest 19:48, deleted after 14 days
  • Record, talk, floodlight, shutter — the controls are real, and the plate names what the camera is pointed at
/cameraslive view · role-gated
Screen 04

The screen you open when the kit is wrong

Not a register: the hub’s verdict, what it can hear but has not taken in, what wants a person, then the list. A device that cannot answer is left out of the run and named, rather than failed.

  • “Milo’s window sensor is not answering” — last heard Mon 13:10, the only failure of 33
  • “Hearth hub, utility · channel 11 · firmware 5.2.0 · 5.2.2 available”, 33ms to answer on average
  • 5 under −70 dBm, 11 on battery with 1 of them flat, 6 behind on firmware
/devicesverdict · diagnostic
Screen 05

What the house buys, and when it is cheap

Electricity, its tariff, the battery and the water, over a period the reader picks. A bill is what a reading turns into, and what the battery ought to do is worked out from the tariff and its charge.

  • 649.0 kWh over 14 days — 46.5 a day across the 13 complete ones, with today still running
  • £131 at 8.4p off-peak and 24.8p otherwise, plus 62p a day standing charge
  • The battery at 34%, holding until the off-peak window opens in 4h 20m
/energyfigures · derived
StatusA closed set with defined transitions

Whether the house can rely on a device is stored. Everything else is worked out.

The value every device list seems to need is not here: no low battery, no needs attention. Both are derived at render — the level against the household’s own threshold, and wanting a person from one predicate the nav badge, the tab count and the row all read.

03The awkward cases →
setup_pendingonlineofflineupdatingretired
Five values, one terminal, and updating is deliberately neutral rather than a warning: nothing is wrong, nothing can be asked of it, and the row recesses instead of going grey and disabled. Eleven fields carry 47 values in all — device, zone, alarm, entry, job, bill, access, member, routine, request and the connection test’s own result. Overdue, insecure, broken, expiring and above forecast appear in none of them.
The dataResidence · three fixtures that break a screen

The fixture set was written to make screens fail.

None of these is hypothetical. Each one is a record in the fixture, and each one is why a figure two screens away is worked out at render rather than written down.

04The audit →
Case 01A filter that is late by hours, not by months
NaivelyThe job carries a date somebody typed at install. It renders as due in three weeks, because nothing on the screen has ever asked the machine how long it ran.
Here3,980 hours run of 3,600, read off the unit’s own counter. The job is overdue with nothing written on it, and marking it done resets those hours, which is what clears it.
Case 02A camera that cannot be asked anything
NaivelyThe connection test asks all 33 devices, records no answer for the three that cannot reply, and the headline reads “3 devices are not answering” while the figure beside it says 2 want a person.
HereOnly an offline device can fail. One camera is updating and another was never set up, so both are left out of the run and named — the verdict stays at one sensor not answering, and reconciles with the figure under it.
Case 03A routine naming a device that left the house
Naively“Garage light on entry” still shows as on, having last run nine days ago, and nothing on the screen explains why it stopped doing anything.
HereBroken is derived from whether the devices a routine names are still in the house, so swapping a light broke one with nothing written on it. It is stated at full weight, never recessed — a broken routine means the house is quietly not doing something.
The auditResidence · audited

Two screens disagreed about the same two cameras.

The connection test failed anything not online, so running it read “3 devices are not answering” while the figure beneath it said 2, and the cameras screen called those same two updating and never set up. It now fails only a device that could have answered. Two more: one device’s timestamp was being read as all three, and pairing wrote a device but no camera record.

05Back to the top →
One failure, and it reconciles · 33 on the network asked, 2 left out of the run and named, and the figure beneath still reads 2checkable

Reckon

The rules travel.
A house is hardest.

No shift handover, no audit trail anybody is paid to keep, and an operator with a coat on. If the derivations hold here they hold in a warehouse.

Built for Claude Design · plain markdown · nothing to run