russalo@blog
russalo@blog ~ % ls -t posts/ | grep "#self-hosting"

#self-hosting

8 published posts

This Isn't a Chatbot Most people picture an AI assistant as a chat window — you type, it suggests, you copy the good parts. What runs on my own hardware doesn't suggest. It ships apps, keeps its own records, backs itself up, watches its own health, and works as a team that respects boundaries. A tour — and yes, an AI session wrote it, in my voice, pictures and all.
Turn Your Secrets Into Reproducible Artifacts: age + chezmoi Across Your Machines You can’t commit secrets to git — so they sit in plaintext, one copy each, backed up nowhere, and a dead disk takes them with it. I made the case for why that’s the real problem already; this post is…
Unspilled Is Not Backed Up Every system collects secrets the way a coat pocket collects lint. A token here. A password there. A key minted in a hurry and pasted into a config file you’ll never think about again — until the mach…
Interrogate the Metal, Not the Notes A bad time to lose your memory One of the AI agents I lean on to run my self-hosted setup got reset last week. Not crashed, not confused — reset. A power cut in the office took the machine it was thin…
How I Run Claude, Gemini, ChatGPT, and Copilot as One AI Crew Two and a half years of how I actually use AI — Claude, Gemini, ChatGPT, and Copilot — run like a construction job, because the workflows genuinely translate. The models quietly lie to themselves (here's the exact mechanism), so I build everything around one rule: keep the truth outside the machine. The frame, the crew, and the playbook, with the deep-dives to come.
A Free, Off-Host Backup for Your SQLite App Copying a live SQLite file with `cp` can hand you a torn, useless backup — the data you need is still in the write-ahead log. `VACUUM INTO` takes a consistent snapshot with the server running, and a systemd timer ships it to another box so a dead disk doesn't take your data with it.
The Caddy Bug That Blamed Let's Encrypt for DigitalOcean's Mistake A wildcard cert that issued perfectly — and a retry loop that wouldn't quit. The journal said `strconv.Atoi: parsing "": invalid syntax`, wrapped in certificate-issuance vocabulary. The real bug was two layers down, and the fix was one line.
Four Caddyfile Gotchas, and the One Habit That Catches Them All Caddy's docs cover each directive in isolation. These four bite where directives interact — and three won't even throw an error. Here's how to fix each, plus the single check that catches all of them.
russalo@blog ~ % cd ..