How the products were run.
Three live products, one person, under €100 a month. The platform was as much a product as the apps on it.
The problem
Three products, each with a database, workers and email, and one person to keep them up. Managed platforms cost more than the products earned; hand-configured servers are impossible to reason about a year later.
What I built
A self-managed k3s cluster on Hetzner, declared end to end: OpenTofu for the servers and DNS, Argo CD for everything inside. A push to main builds an image, bumps a tag, and Argo CD rolls it out.
Outcome
Deploys took minutes and no hands. Five small servers carried three products, Postgres, queues and monitoring for the price of one managed database.
A platform that one person can rebuild from a repo is worth more than one that is a little cheaper or a little faster.what I took from it

From git push to a running pod: CI, registry, Argo CD, and the services around the cluster. Click to open full size
Decisions
- Postgres on a €5 VM per product instead of a managed database. Daily backups to object storage instead of point-in-time recovery, because a day of lost data was acceptable for these products and a managed database was not in the budget.
- One pod per app, no autoscaling. The traffic never justified it, and a single pod is simpler to debug at two in the morning.
- Production right after acceptance. Small deploys, many times a day, with a one-line rollback through git.
- Nothing configured by hand: no cluster dashboards, no SSH changes. If it was not in the repo, it did not exist.
- Alerts to Telegram only for the things that needed a person: a failed deploy, a pod that would not start, a site that stopped answering.
Hosting over the years
- 2015A VPS for JudgeMySound and Tringa
- 2018Google App Engine for eLearnScanner
- 2020AWS serverless for Pointiful and Charm: Lambda, AppSync, Amplify
- 2023A Hetzner server with Docker Compose through Coolify for Fixmora
- 2025Self-managed Kubernetes on Hetzner for Fixmora, Kazengo and Rekindo, the platform on this page
Timeline
- 2025Cluster from code: kube-hetzner, network, firewall, ingress, certificates, DNS. Argo CD app-of-apps, reusable CI, Postgres VMs with nightly backups
- 2025 – 2026Monitoring and Telegram alerts; the products moved over one at a time
- 2026Products taken offline, cluster retired