Homelab
ongoingA self-hosted stack running home automation, media, and monitoring across a pair of Raspberry Pis — and an ongoing education in what breaks when you run production on 1GB of RAM.
What it is
Two Raspberry Pis [pi-nappleXpress & MrPiPi ] running a self-hosted network stack in tandem: Home Assistant for automation, pi-hole for ad-blocking, ErsatzTV for media channels, Jellyfin for library management, Uptime Kuma (x2) for monitoring, and Wyoming Piper/Whisper for local voice connected to a jailbroken iPhone 12 [HomePhone]. All containerized and running smoothly on 2GB of RAM.
Why
I came across the concept of building your own TV channels out of your own media, which led me to Jellyfin, and building a proper library became its own project. While working, I started realizing how much reach the Raspberry Pi has with access to a few smart plugs and smart devices. The Pi’s started to become permanent home for automations — like a script that chooses a random show when I can’t choose what to watch
The constraints of the Pi’s turned out to be a real lesson. I bought the cheapest Raspberry Pis available a handful of years ago, and fitting this many applications plus the data onto 1GB of RAM forced me to actually understand what I was doing: power draw and undervolting, USB vs SD read speeds, whether the OS belongs on the SD card or the external drive, and which physical port each drive goes in — one Pi has exactly two USB 3.0 ports and the other has none. Every one of those constraints shaped the architecture I ended up with.
The architecture
TODO — Describe what lives where and why you split it that way. Roughly: Pi #1 (Kali) runs Home Assistant, grocy, Uptime Kuma and the touchscreen panel; Pi #2 ("Pinapple Xpress", Raspbian) holds the media storage and runs ErsatzTV and Stash. Worth a small diagram once it settles.
Where it stands
Storage is sorted, the container stack is split across both Pi’s by where each container fit’s practically, and the whole thing is accessible remotely using tailscale