Skip to content
Dimitri Montgomery

Atlas 04 of 07

smartmirror

A monitor behind two-way glass that wakes up when you walk towards it.

Shipped — Finished, or finished enough that the write-up is about what it does. Personal · 2026

680
Tests
9
Layout zones
0.41s
Push latency, measured
01

What it does

A monitor behind two-way glass that is black until someone walks towards it, then shows weather, a to-do list, parcels, flagged mail and what is playing. What is on the glass and where is data, edited by dragging, not CSS.

Wakes when you approach
mmWave radar, not a PIR — glass and acrylic are opaque at the wavelengths a PIR sees, which is physics rather than tuning. Distance drives density: fine detail is absent from across the room and returns as you walk up.
Shows eight kinds of panel
Clock, weather, to-do, plants, deliveries, flagged mail, now playing, quote. Each provider either returns data or raises; scheduling, retries, staleness and degradation are handled once, for all of them.
Keeps yesterday's answer
A failed provider dims its panel and keeps its last good value. Yesterday's weather is useful; an error box on a bathroom wall is not.
Is arranged by dragging
Nine zones, per-component scale and alignment, saved per profile. Position is a row in a table, so rearranging the mirror never touches the stylesheet.
02

Demo

Run the mirror

The kiosk display, live on this page. Change who is standing in front of it and watch what the glass decides to show.

PresenceProfile
Asleep. Behind glass this is just a mirror. This is the mirror's real kiosk page, not a mock-up — the same file that runs on the glass, fed synthetic panel data. The clock is your clock and the progress bar is advancing on its own, because both of those tick locally on the real thing too.
03

How it works

What it does

A display behind two-way glass showing the time, weather, calendar, transit, and whatever else earns its place. mmWave radar notices someone approaching and wakes the panel; face recognition decides whose information to show.

The finding that killed the obvious design

The plan called for a PIR motion sensor behind the mirror. PIR sensors detect body heat — long-wave infrared, around 8–14 µm. Glass is opaque at those wavelengths. It is not a tuning problem or a sensitivity setting; the sensor cannot see through the thing it is mounted behind. mmWave radar passes straight through.

That one is my favourite in the whole project, because it was found by reading a datasheet rather than by building the thing and wondering why it did not work.

Arranging it

What is on the mirror, and where, is edited in a browser: nine zones, drag or tap to place, a size slider per component, and a live preview of the glass. Saving pushes over the socket the mirror already holds open, so there is no restart in the loop — which matters because type size behind 70/30 film is the one thing nobody can decide in advance.

04

Testing

680 passing, 8 skipped

Every data source has a mock twin, so the full mirror renders on a laptop with no radar, no display and no network. That is also what makes the live demo on this page possible.

What the tests defend

  1. A test asserts the kiosk page contains no component names, because the layout is entirely data-driven. Hard-coding one would silently break the editor.
  2. A test fails the build if the mirror ever gains an endpoint that serves an image. A mirror with a camera in a hallway must not become a way to look into that hallway.
05

Built with

Service
PythonFastAPIWebSocketSQLite
Glass
Static HTMLCSS gridno framework
Senses
mmWave radarface recognition