- 680
- Tests
- 9
- Layout zones
- 0.41s
- Push latency, measured
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.
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.
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.
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
- 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.
- 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.
Built with
- Service
- PythonFastAPIWebSocketSQLite
- Glass
- Static HTMLCSS gridno framework
- Senses
- mmWave radarface recognition