The TV Screensaver Nobody Else Built
Plex and Jellyfin both know exactly what's playing. Neither will put it on the screen you're actually looking at when nothing's playing at all.
A media server tells you everything about your library except the one thing a TV in a living room actually wants to show: something, all the time. When nothing's playing, Plex and Jellyfin both default to whatever the TV app's home screen looks like — not the library, not what's coming soon, not anything ambient. I built Lobby to be the thing running on the screen instead: real-time now-playing when something's actually on, a cinematic poster screensaver cycling through the library when it isn't, and upcoming releases pulled straight from Sonarr and Radarr.
The detail that mattered more than the feature
The obvious version of a "now playing" display is a poster and a progress bar. The version that's actually pleasant to have running in a room has dozens of small decisions layered under that, and almost all of them are about not stepping on something else. Theme music plays during the ambient screensaver cycle — and only then, because playing a theme song over someone actually watching something would be the single fastest way to get the whole thing turned off. Sonos volume ducks automatically while that theme music plays and restores after, so the two audio sources don't fight. None of that shows up in a feature list. All of it is the difference between something that feels considered and something that feels like a demo.
Ambient light sync was the fun problem
Extracting a dominant color from whatever poster is on screen and pushing it to the room's lights sounds like a nice-to-have until you've seen it work — the room actually shifts tone with what's showing. Building it meant supporting four completely different lighting ecosystems (Govee over LAN, Home Assistant, Hue's local bridge, LIFX's cloud API) because no single household runs one lighting brand, and a feature that only works for whichever brand I personally own isn't a feature worth shipping.
Building without the hardware you'd want
The one thing I couldn't solve is instructive: Lobby can't actually turn the TV off, because this deployment has no HDMI-CEC access to the display. The honest fix was a software black screen on a schedule instead — not the ideal solution, clearly labeled as the constraint it is, rather than pretending the feature does something it doesn't. Shipping the accurate version of a limited feature beats shipping a feature that quietly doesn't do what it implies.
What this project is really about
Lobby follows the same shape as everything else I've built for the house: notice a gap between what off-the-shelf software assumes you want and what the room actually needs, and close it directly instead of working around it. A media server assumes you're always actively choosing something to watch. A living room mostly isn't doing that — it's ambient, in the background, or empty. Building for the actual state of the room instead of the state the software assumes is the whole idea.