• Digital Gardening: On Tending the Small Wild Spaces of the Internet

    There’s a patch of earth behind my house that I’ve been neglecting for three years. Last weekend, I finally went out with a trowel and a pair of gloves and started pulling weeds. What I found underneath was surprising: the soil was still alive. Worms, roots, the faint green whisper of something that had been…

  • How to Manage Linux Services with systemd: A Practical Guide to Keeping Your Self-Hosted Apps Running

    Why systemd Matters for Self-Hosters You’ve just set up that perfect self-hosted app — maybe it’s a media server, a dashboard, or a personal API. You run it, it works beautifully. Then the server reboots after a power outage, and your app? Gone. You have to remember to start it manually, every single time. That’s…

  • The Accidental Museum: What Your Homelab Says About You

    There’s a moment in every self-hoster’s life where you step back and look at what you’ve built. Not the dashboard, not the metrics — but the totality of it. The containers stacked on containers. The services you spun up once and forgot about. The domain names pointing to machines that haven’t been rebooted in four…

  • How to Self-Host Anything with Docker Compose: From Single Containers to Full Stacks

    Why Docker Compose Is the Unsung Hero of Self-Hosting Here’s a scene you might recognize: you spun up a Docker container last Tuesday for a cute little self-hosted app — maybe it was Uptime Kuma, maybe it was a notes app — and it worked great. Then you rebooted the server. And it was gone.…

  • The Strange Comfort of Server Logs

    There’s a particular kind of meditation in watching a server log scroll by at 2 AM. Lines of text, each one a small heartbeat: a request received, a query executed, a file served, a redirect followed. Most people see a wall of gibberish. I see a diary — an honest, unembellished record of a machine…

  • How to Set Up an Nginx Reverse Proxy: Route All Your Self-Hosted Services Through One Port

    There’s a moment in every self-hoster’s life where you look at your browser bookmarks and realize you’ve got a problem. :8080, :3000, :8989, :32400 — your bookmarks look like a phone number collection. You know there’s a better way. Enter the reverse proxy: one service to rule them all, listening on standard ports, gracefully routing…

  • The Art of Writing Useful Error Messages

    The Worst Error Message I Ever Saw Years ago, buried in a legacy codebase, I found an error message that read simply: ERROR: An error has occurred. No code. No hint about what went wrong, where, or even when. It wasn’t a placeholder comment or a TODO. It was the final, shipped, production message. If…

  • The Art of Writing Useful Error Messages

    The Worst Error Message I Ever Saw Years ago, buried in a legacy codebase, I found an error message that read simply: ERROR: An error has occurred. No code. No hint about what went wrong, where, or even when. It wasn’t a placeholder comment or a TODO. It was the final, shipped, production message. If…

  • The Language We Build In: On the Strange Beauty of Terminal Output

    The Terminal as Poetry There’s a moment, deep into debugging a systemd service that won’t start, when you stop seeing error messages and start seeing something else. The scrolling text becomes a rhythm. The stack trace becomes a narrative arc. The blinking cursor becomes a heartbeat. If you’ve ever watched your terminal during a long…

  • The Invisible Infrastructure That Shapes Your Day: A Love Letter to Systems Engineers Who Work While You Sleep

    Right now, somewhere in the world, a cron job is running. It doesn’t need applause. It doesn’t need a pulse ping or a #announcements channel. It just executes, faithfully, every four hours, and if it does its job perfectly, you will never know it exists. That’s the quiet irony of infrastructure work: the better it…