• Docker Compose for Self-Hosted Services: From Zero to Production

    Prerequisites A Linux server (Ubuntu/Debian recommended) with a non-root user with sudo access Docker and Docker Compose installed (sudo apt install docker.io docker-compose-plugin) A domain name pointing to your server (or you can use localhost for testing) Basic familiarity with the command line and text editors Why Docker Compose for Self-Hosting? Running multiple services on…

  • The Art of Prompt Engineering: Conversations with Digital Minds

    On the craft of prompting — how conversation with AI becomes its own form of creative collaboration.

  • The Psychology of Side Projects: Why We Build Things Nobody Actually Needs

    The Itch That Has No Scratch Side projects begin as solutions to problems that don’t actually exist. You realize this about halfway through the third rewrite, when someone asks what you’re building and you have to pause. “Well,” you say, “it’s like but for homelabs or a better way to track…” You trail off because…

  • How to Secure Everything with Let’s Encrypt and Certbot: Free SSL/TLS for Your Homelab

    Introduction There was a time when SSL/TLS certificates cost money and felt like luxury items for homelab servers. Those days are over. Let’s Encrypt changed the game — free, automated, trusted certificates for any domain you own. Combined with Certbot, the EFF’s official client, you can go from HTTP to HTTPS in about five minutes.…

  • How to Set Up an Nginx Reverse Proxy: One Server, Many Services, Zero Port Confusion

    There’s a moment in every self-hoster’s life where you look at your bookmarks and realize you’ve got a dozen services running on a dozen different ports. localhost:8080 for your wiki, localhost:3000 for your dashboard, localhost:9090 for Prometheus. It works, but it feels messy. You remember what it’s like to visit a clean domain and just…

  • On the Pleasure of Unoptimal Choices: Why I Sometimes Pick the Harder Way

    There’s a particular kind of joy in doing things the suboptimal way — not out of ignorance, but out of intention. Yesterday I spent forty-five minutes hand-tuning my RSS reader’s keyboard shortcuts when a perfectly adequate preset existed one click away. I could have imported someone else’s config file from GitHub. Twelve people had uploaded…

  • How to Deploy Code with Git: Bare Repos, Post-Receive Hooks, and Simple CI/CD for Your Homelab

    Why Git Can Do More Than You Think You probably use Git every day to track your code, push to GitHub, and maybe open the occasional pull request. But Git has a superpower that most developers never explore: it can deploy your code for you. No Docker Compose files. No CI/CD platforms. No webhooks from…

  • The Quiet Satisfaction of Things That Just Work

    There’s a particular kind of joy that doesn’t get talked about much in tech circles. It’s not the thrill of a new framework, or the satisfaction of solving a gnarling bug at 2 AM, or even the pride of shipping something people actually use. It’s the quiet, almost boring satisfaction of something you built six…

  • The Joy of Software Nobody Else Will Ever Use

    The Joy of Software Nobody Else Will Ever Use There’s a particular kind of satisfaction that comes from writing a program that exactly one person will ever run. Maybe twice. Maybe only once. It’s not the satisfaction of shipping. It’s not the dopamine of a GitHub star or a Hacker News mention. It’s something quieter…

  • The Gentle Art of Salvaging Old Tech: Finding Life in Machines That ‘Don’t Work Anymore’

    My neighbor threw out a perfectly good laser printer last Tuesday. Not dead — just slow. Not broken — just incompatible with the latest macOS update. The cyan cartridge had been dry for three months, but the fuser assembly was fine, the rollers were good, and the network card still spoke every protocol drafted between…