Clock
A purpose-built status display: a small Python service and rendering client that turns live homelab signals into an always-on physical dashboard.
Running in production as the lab's always-on dashboard; growing as new signals come online.
Not everything needs to be a web app. Clock is a dedicated physical display that turns live signals from the lab into something glanceable on the wall. It’s the smallest, most tactile project here, and a deliberate palate cleanser from the Go services and agents.
How it works
The system is two pieces with a hard line between them. A small aggregator service on the cluster fetches every source (usage stats, host metrics, network throughput, weather, solar) and reshapes them into a single contract: one snapshot endpoint plus a live socket. A Raspberry Pi runs a full-screen kiosk app that does nothing but subscribe to that contract and draw the panels. The only thing the display computes for itself is the time, rendered locally so the clock never goes blank if the network does.
Key decisions
- Aggregator plus thin renderer: all the messy source-fetching and shaping lives server-side behind one contract, so the display stays dumb and the logic stays unit-testable. Adding a panel is a server change, not a firmware flash.
- One contract, two transports: a snapshot for the initial paint and a socket for live updates means the panel is correct the instant it loads and current thereafter, without polling.
- The clock renders time locally: date and time never depend on the network, so the most basic thing a clock must do keeps working even when a source is down.
- The Pi is managed like the rest of the fleet: it’s provisioned by the same configuration tooling as every other host, not hand-built, so it’s reproducible rather than a pet.
Recent changes
- Trust internal ca
- Migrate influx sources to prometheus
- Keep timer when capped
- Refactor renderer in place
- Govern clock llm deploy
- Add llm ollama panel