Instead of buying a NAS, this project turns the family Windows PC into one — but only while it’s needed. The PC holds all the drives and heavy services and hibernates when idle; an always-on Raspberry Pi 3B is the coordinator.
dashboard button → Pi sends Wake-on-LAN → PC: off → waking → booting → active
- One-button wake — the Pi runs a small Flask dashboard where anyone in the family can wake the PC (Wake-on-LAN, confirmed working from sleep, hibernate, and full shutdown), watch it move through the wake states, and toggle which drives are shared.
- Mesh VPN — access from anywhere runs over Tailscale, where every device is its own node and new devices need explicit approval. The Pi is just the always-reachable node; bulk traffic always flows directly to the PC, never through the Pi’s 100 Mbps port.
- Share control — the interesting part: the Pi holds the controls, the PC
holds the data. The dashboard discovers every volume on the PC and
shares/unshares them by running PowerShell
SmbSharecmdlets over SSH, so to any client the PC is indistinguishable from a dedicated NAS appliance —\\pc-namein Explorer,smb://pc-namein Finder. Shares use per-user Windows credentials and are addressed by hostname rather than LAN broadcast, so the same paths work identically over the VPN. - Hibernation’s sharp edges — Windows’ idle timer doesn’t count SMB transfers, Immich jobs, or remote-desktop streams as activity, so a keep-awake watchdog (a SYSTEM scheduled task on the PC) inhibits hibernate while any of those are live and releases when all are clear — a machine that’s near-zero power most of the day but never dies under someone mid-transfer.
- Family photo library — the newest layer: Immich running in Docker inside a dedicated WSL2 distro (Docker Desktop was ruled out because it can’t auto-start without an interactive login), with CUDA-accelerated face detection and NVENC transcoding on the PC’s RTX 4060. The library is mounted read-only into the containers — Immich is strictly a search-and-browse door over immutable originals — and published loopback-only, so the tailnet is the only way in.
- Remote desktop — GPU-streamed via Sunshine/Moonlight (Windows 11 Home has no RDP host), rounding out the “borrow the PC’s horsepower from a Mac” use case.
The whole thing is deliberately boring on dependencies — Flask plus the Python standard library on the Pi, vanilla JS on the dashboard, PowerShell on the PC — because it has to keep working unattended, and every phase was built to be independently useful and testable before the next began.