Physical machines, virtual machines, networking, and storage — all running at home in Frauenkappelen, Switzerland. 80 GB of local GPU VRAM across three AI servers.
The AI servers carry AMD Radeon GPUs with 32 GB of VRAM each, which comfortably fit the large quantised models used for most tasks. A third AI server was added for image generation and text-to-speech synthesis. It carries an NVIDIA RTX GPU using the Blackwell architecture, handling CUDA-based workloads the AMD cards are not suited for.
Total local GPU memory across the three AI servers is 80 GB. All servers run on consumer hardware chosen for the combination of performance and energy efficiency.
Primary language model server. Runs Ollama and Open WebUI. AMD Radeon GPU with 32 GB VRAM, 64 GB system RAM — large enough to run several models simultaneously without swapping.
Secondary language model server. Identical architecture. Also provides the LLM pipeline for the Podcast Generator and the other AI apps.
Dedicated to GPU-accelerated workloads requiring CUDA. Runs ComfyUI for image generation, the Podcast Generator TTS service, and hosts the self-built web apps. NVIDIA RTX GPU, Blackwell architecture, 16 GB VRAM.
All services run as separate virtual machines on Ubuntu 24.04 LTS. Separating services means a misconfiguration or failed update in one VM cannot affect another. Two virtualisation hosts share the load. All VMs are managed exclusively through Ansible — no manual configuration on individual machines.
Self-hosted file sync and collaboration with OnlyOffice integration. Documents are stored on the NAS via NFS.
Self-hosted Bitwarden for the whole family. Cross-platform, works with all the standard Bitwarden clients on every device.
Photo archive with AI face recognition, smart search, and automatic album generation. Around 82 000 photos stored on the NAS.
DNS filtering and content blocking on two redundant instances. Primary and secondary, so a single failure leaves filtering active.
Internal mail server. Receives email from external relay servers and delivers it locally. Isolated on a separate network segment.
Central management. All Ansible playbooks run from this VM. Semaphore provides the scheduler and web interface. The AI also uses this server to manage infrastructure.
All internal machines sit on a single flat network segment. The mail server and the WhatsApp AI agent run on a separate segment to keep them isolated from the main LAN. External mail relay servers connect back through a WireGuard VPN tunnel.
DNS filtering runs on two redundant instances. External access from outside the home goes through WireGuard. All public-facing services are behind a reverse proxy with Let's Encrypt certificates, renewed automatically through the Cloudflare DNS challenge.
No cloud data centre, no energy overhead from data transfer — just local compute on local power.
OnlyOffice over Microsoft 365. Bitwarden over Apple Passwords. Local AI as the default, commercial AI only for tasks that specifically require it. No automatic reboots — a playbook that installs updates leaves a note if a reboot is needed, and the reboot happens manually.
When a VM's disk fills up, the approach is to attach a new virtual disk and change the mount point — not to rebuild the VM. This keeps downtime to the time it takes to stop the service, remount, and restart. Grafana and Prometheus were chosen over other monitoring stacks for better fit with the existing infrastructure model.