Writing
Things found the hard way
Notes on deploying and running small production systems. Mostly about the checks that look like they work and don't.
You built an app with AI. Now it has to run somewhere.
It works on your laptop and there is nowhere to send anyone. What deploying actually involves, whether you need a server at all, and the seven things AI-written code assumes on your machine that stop being true anywhere else.
8 SEP 2026 · 8 MIN
Docker quietly bypasses UFW
ufw status shows the port denied while the whole internet can reach it. Why published container ports never touch UFW's rules, how to check whether you are exposed right now, and the fix in order of preference.
8 SEP 2026 · 5 MIN
pg_restore: unsupported version in file header
It reads like corruption. It almost never is — your client tools are older than the database that wrote the dump. How to confirm it in ten seconds, and why it matters most if your backup checks run on the host.
8 SEP 2026 · 4 MIN
The backup that restores perfectly and contains nothing
A well-formed archive, zero restore errors, every table present — and no data at all. How it happens in Postgres, MySQL and MongoDB, why mongorestore --dryRun will not catch it, and the one check that does.
8 SEP 2026 · 6 MIN