For a long time I wanted a homelab, and for a long time I didn’t have one. Every attempt ended the same way: reading about infrastructure. What to learn first, which proxy, which OS, how much of it I need to know before deploying anything at all.
Classic me, honestly.
What finally worked was changing the question. How do I train this week, and keep my data private enough that I actually trust it?
So in June 2026 the lab started with exactly one app: workout.cool, an open-source workout tracker. Everything else in the lab exists because that app needed it.
What’s running?
For now the whole thing lives on my laptop, in Docker: the workout app, its database, a small start page with links to my apps, and database backups every night. Nothing is open to the internet. My phone reaches it from anywhere through Tailscale, and that’s the part that made it feel real. I log a set on my phone, and it lands on my own machine.
Forking workout.cool
The self-hosted version of workout.cool came with the hosted product’s business attached: ads, a premium tier, payments, Google sign-in, a leaderboard. On a private server with exactly one user (me), none of that makes sense, so my fork removed all of it. The billing code alone was about 1,400 lines. For a server with one user. Now it’s a single “has full access” check.
Then I added the things I was missing:
- A real exercise library. The app ships with three sample exercises. My fork imports free-exercise-db, 873 exercises, mapped onto the app’s own categories. The app’s docs listed those categories wrong, so I mapped them against the actual code.
- Russian translations for the whole catalog, machine-translated once and then fixed by hand wherever the machine got it wrong. A bit of manual care goes a long way here.
- Checking exercise videos as I go. 873 exercises came with automatically matched demo videos, and I was never going to review all of them. So exercises I actually do get a thumbs up/down, and the bad ones land on an admin page for me to fix.
- A tracker that doesn’t lag. The original app saved your whole workout to browser storage on every keystroke, so long sessions got sluggish right when you’re typing in reps between sets. Workouts now save in the background to a proper browser database, and logging a set stays snappy even on a slow phone.
What did I learn?
Start with something you’ll use every week. One app I open every week taught me Docker Compose, volumes, proxies and backups faster than any lab exercise could.
Check if the project you fork is still alive. By late July upstream hadn’t moved since April, and its last commits were ad tweaks. That changed how I treat the fork. Keeping my patches small so future merges go smoothly stopped making sense, and I started deleting upstream code whenever it got in my way.
Keep a list of the mess. I keep a debt register: every shortcut and inherited problem in the codebase, which rule it breaks, how much it affects, and whether I inherited it or made it myself. Deciding what to fix next is a lot easier with that list in front of me.