Blog series: migrating a smart home to a self-hosted homelab — outline¶
Priority-ordered chapters. Each has its own doc; the repo's commit history (76 commits) and docs/runbooks/ carry the fine detail. War stories live in 90-what-went-wrong.md.
- 01-zigbee-migration.md — 127 Zigbee devices, ZHA→Z2M, zero re-pairing (see also docs/runbooks/zigbee-migration.md — the as-executed runbook)
- 02-network-and-domains.md — traefik + AdGuard split-horizon on fmm.house, wildcard LE via DNS-01, tailnet-only WAN, vanity IPv6
- 03-lighting-automations.md — approach/presence blueprint, door pulses, light-off-driven sleep policy, per-room packages
- 04-buttons-and-adaptive-lighting.md — SOMRIG bedside blueprint, AL override memory, min-brightness policy
- 05-multiroom-audio.md — Music Assistant + Sendspin across six rooms (Go players, ESPHome boards, Satellite1), watchdogs
- 06-ir-and-remotes.md — TS1201 code port, TV/Android-TV power sync, gaming AV chain, Unfolded Circle integration + its limits
- 07-eink-dashboard.md — TRMNL: cloud plugin (2KB gymnastics) → self-hosted byos_next with custom recipes + dynamic refresh
- 90-what-went-wrong.md — every trap, in the order we hit them
Writing principles for the post: lead each chapter with the invariant we wanted ("no re-pairing", "no cloud", "one blueprint per behavior"), show the smallest config that delivers it, then link the war story.