Application layer
One front-end stack, three products
Platform
Self-hosted, zero-trust, isolated
Everything runs on self-hosted Kubernetes (k3s) in a home lab, with public traffic entering only through Cloudflare Tunnels — no inbound ports, no exposed origin. Public-facing workloads live in an isolated DMZ network segment that cannot reach the rest of the LAN, so a compromised site is a contained site. Private surfaces sit behind Cloudflare Access zero-trust sign-in.
The software supply chain is self-hosted too: a Gitea instance carries every repository, runs CI, builds container images, and serves the private npm registry that distributes desk-engine. Deployments are digest-pinned images applied by guarded scripts that preview by default and demand explicit confirmation to touch production — every release paired with a version bump and a changelog entry.
Observability is home-built as well: a FastAPI/Vue monitoring dashboard watches the sites, certificates, DNS, and media pipelines from inside the LAN, and first-party Umami analytics (proxied same-origin, no third-party trackers, do-not-track respected) count page views without following anyone around the web.