The apps
One set of web tools, four products
Where it runs
Self-hosted, signed-in and kept separate
Public services run on a dedicated server from a hosting provider, using Kubernetes (k3s). Kubernetes is software that runs apps in containers and keeps them running. Visitors arrive through Cloudflare Tunnels, so the app server itself is never open to the internet. Private areas sit behind Cloudflare Access, which makes everyone sign in first, wherever they connect from. Home-lab services are kept apart from the public ones. They connect only over an encrypted private link, and only where a service really needs it.
The tools for storing and building code are self-hosted too. My own Gitea server holds every repository, runs CI (automatic checks and builds on each change), and stores the finished containers and code packages. Containers are built on a separate build server, not on the machine that manages the cluster. Releases go out through scripts with built-in checks. Each script previews its changes by default and needs explicit confirmation before it touches the live service. Each release is pinned to its exact build by a unique fingerprint (a digest), and comes with a new version number and changelog entry.
Services report their own health and readiness, which the release checks use. Umami analytics count page views. It runs through this site’s own address, uses no third-party trackers, respects do-not-track, and doesn’t follow anyone around the web. The old home-lab monitoring dashboard still exists, but it’s switched off. It can no longer see the network, so leaving it on would only pretend to monitor it.