Blog

I write about DevOps, WordPress hosting, cloud infrastructure, and web development. Here you'll find technical deep-dives, practical guides, and lessons learned from building and scaling production systems.

Scroll

Articles

  1. What makes a website fast? From DNS to PHP workers

    A fast website is more than a fast server. In this post I walk through the full chain — from DNS and TLS to caching, database and PHP workers — with a focus on WordPress and other PHP-based sites. This one goes a bit more technical on purpose.

    4027 words
  2. When is it time to switch WordPress hosting?

    Your WordPress site is too important to run on slow, unstable hosting — or with a host that doesn’t respond. This post covers the clearest signs it’s time to move: performance, support, updates, security, backups and staging.

    1093 words
  3. What is managed WordPress hosting (and when is it worth it)?

    Managed WordPress hosting means the technical operation of your WordPress site is handled for you: updates, security, backups and performance. This post explains what you’re outsourcing, the technology behind it (caching, staging and patch management), and when it’s worth it for freelancers and small businesses.

    1400 words
  4. Bootstrapping Kubernetes namespaces with Kyverno

    If you manage a Kubernetes cluster with multiple applications or tenants, you likely understand the repetitive task of configuring each namespace with the appropriate defaults. This includes setting up network isolation, image pull credentials, and custom certificates—essential but monotonous tasks. Kyverno is not only a policy enforcement engine but also a tool to automate the clean and declarative bootstrapping of these resources.

    1068 words
  5. A wild first month: Scaling a 25,000 user Mastodon instance on Kubernetes

    When the Twitter exodus began, I jumped at the chance to host my own Mastodon instance, **toot.community**. This post recounts the **wild first month** of rapidly scaling from 60 to over 25,000 users using Kubernetes, the challenges faced, and how we open-sourced the setup.

    352 words
  6. Tackling Scalability Challenges at toot.community: A Journey from Cloudflare to Fastly

    As the DevOps Engineer behind [toot.community](https://toot.comunity), a Mastodon instance, I've had my fair share of challenges in keeping our services running smoothly. The decentralized nature of the fediverse, while an asset in many ways, brought a challenge to our server infrastructure. This post is a dive into how we navigated one of these challenges and eventually found a solution that worked for us.

    598 words
  7. Building a Bitcoin-Powered Donation System for Satoshi Radio

    For the popular Dutch Bitcoin podcast **Satoshi Radio**, I helped build a custom, **Bitcoin-only donation system**. This post details the journey from MVP to a fully integrated solution using **BTCPay Server**, the **Lightning Network**, PHP/Symfony, and a **Telegram bot**, staying true to their self-hosting ethos and cutting out the middleman.

    1085 words
  8. Setting up an NGINX Reverse Proxy with SSL for Umbrel/BTCPay Server

    Want to securely access BTCPay Server on your Umbrel node via a custom domain? This **(potentially outdated - see update note in post!)** guide details how I set up an **NGINX reverse proxy** with a free **Let's Encrypt SSL certificate** back then. Step-by-step instructions cover DNS, port forwarding, NGINX config, and Certbot.

    1558 words
  9. Technical background on Bitcoin DCA: Building a self-hosted tool

    Automating my Bitcoin Dollar Cost Averaging (DCA) became a personal project in early 2020 after my go-to service, Bittr, unfortunately closed down due to the AMLD5 directive. To fill that gap for myself and potentially others, I built **Bitcoin DCA**, a self-hosted, open-source tool. This post dives into the technical background – why I built it, the unexpected challenges faced along the way (hello, 32-bit Raspberry Pi!), and how I solved them.

    2262 words

Pagination

  1. Previous page
  2. 1
  3. 2
  4. 3
  5. Next page