Things built for our own house that turned out to be worth writing down. Every guide here was run end to end on real hardware — the commands are the ones that worked, and the dead ends are documented too, because those are usually the part that costs you an evening.
The household behind every guide on this site, mapped end to end: the two server boxes and the NAS, the sensors and cameras Home Assistant ties together, the speakers and screens behind the trilingual voice assistant, the container fleet, and the gaming PC that dual-boots into a retro arcade — each area with its own deeper dive.
The stock appdata backup stops every container to avoid torn database copies; a Btrfs snapshot makes that unnecessary. Why downloads on the appdata pool are the gotcha that breaks this — and the second-pool fix — then the one-time conversion of appdata to a subvolume with the copy verified, two short snapshot scripts, and the exact Appdata.Backup settings for a daily, compressed, rotating backup — one archive per container, restorable from the web GUI — that takes nothing down.
A pipeline on the AI appliance that hears which language a video speaks, transcribes it with two speech engines that check each other and a language model as referee, and writes English and Thai subtitle files beside the video — unattended, from a queue, without anything leaving the building. Includes the measurement that showed the voice-activity detector was throwing away whole conversations, and what replaced it.
Move a retro-gaming library onto network storage and symlink it back, so you can grow past the box's internal disk while keeping fast systems local. Covers the export permissions that silently break saves, and the boot hook that changed between Batocera versions — the single most common reason the share is missing after a reboot.
Scene releases ship 30-second sample clips that Jellyfin proudly shelves as movies — and if the files are still seeding, you can't delete or rename a single one. How we hid every sample in a large library with glob patterns and zero filesystem changes: auditing before acting, the shapes that are safe to match, and the real episodes that a lazy pattern would have silently swallowed.
Not the colour-changing-lights demos — the considerate, invisible ones: curtains that remember their position after a film, lights that know dark from daytime, a house that knows the cleaner’s day, a camera that never watches the family, and an assistant you can tell “in twenty minutes”. Each with the design rule that makes it lovable.
How one spoken sentence becomes verified playback on the right TV: the Jellyfin Sessions API, a Moonfin client per room, and a shell script that never claims what it hasn’t seen — it wakes the screen, brings the app to the foreground, resumes the episode you were part-way through, and only then reports success. Includes the full sanitised scripts and the per-site config, ready to adapt to your own house.
Home Assistant’s timers only chime. Three small scripts on top of the Scheduler component let the voice assistant schedule a device action at a time or after a delay, in three languages — and speak back the verified time it set, list what is pending, and cancel by voice. Full YAML, plus the rules that keep it honest.
A power cut, a reboot, and the storage box comes up a minute after the services that depend on it — which then start on empty directories and call it a library. The four-part fix: a head start in the hypervisor, mounts that retry, a minute-by-minute guard, and a marker file no container can start without.
Our products are built on the same ground these projects cover — network storage, Linux boxes that have to survive reboots, and hardware that behaves differently from the documentation. Publishing the working versions seemed more useful than keeping them in a private notebook.