<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Ehren Simonsmeier</title>
    <link>https://blog.stackfoundry.cloud</link>
    <description>Programmer. Notes on software, self-hosting, and things I&#39;m building.</description>
    <lastBuildDate>Thu, 25 Jun 2026 19:02:05 +0000</lastBuildDate>
    
    <item>
      <title>Hello, world</title>
      <link>https://blog.stackfoundry.cloud/posts/hello-world</link>
      <guid>https://blog.stackfoundry.cloud/posts/hello-world</guid>
      <pubDate>Thu, 25 Jun 2026 00:00:00 +0000</pubDate>
      <description>Why this site exists and how it&#39;s built.</description>
    </item>
    
    <item>
      <title>Pinning a NixOS flake to a known-good nixpkgs</title>
      <link>https://blog.stackfoundry.cloud/posts/pinning-a-nixos-flake</link>
      <guid>https://blog.stackfoundry.cloud/posts/pinning-a-nixos-flake</guid>
      <pubDate>Fri, 19 Jun 2026 00:00:00 +0000</pubDate>
      <description>Reproducible hosts mean never saying &#34;works on my machine&#34; about a server.</description>
    </item>
    
    <item>
      <title>Tracing a 404 through Traefik and Authentik</title>
      <link>https://blog.stackfoundry.cloud/posts/tracing-a-404-through-traefik</link>
      <guid>https://blog.stackfoundry.cloud/posts/tracing-a-404-through-traefik</guid>
      <pubDate>Fri, 12 Jun 2026 00:00:00 +0000</pubDate>
      <description>A missing route looks identical to a broken app until you read the right log.</description>
    </item>
    
    <item>
      <title>Why my DNS resolver lives behind a firewall allowlist</title>
      <link>https://blog.stackfoundry.cloud/posts/dns-behind-a-firewall-allowlist</link>
      <guid>https://blog.stackfoundry.cloud/posts/dns-behind-a-firewall-allowlist</guid>
      <pubDate>Fri, 05 Jun 2026 00:00:00 +0000</pubDate>
      <description>An open resolver is an abuse magnet. Allowlisting is the cheap fix.</description>
    </item>
    
    <item>
      <title>A static site generator in 90 lines of Python</title>
      <link>https://blog.stackfoundry.cloud/posts/tiny-static-site-generator</link>
      <guid>https://blog.stackfoundry.cloud/posts/tiny-static-site-generator</guid>
      <pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate>
      <description>You don&#39;t need a framework to turn markdown into HTML.</description>
    </item>
    
    <item>
      <title>Forward-auth vs OIDC — when to use which</title>
      <link>https://blog.stackfoundry.cloud/posts/forward-auth-vs-oidc</link>
      <guid>https://blog.stackfoundry.cloud/posts/forward-auth-vs-oidc</guid>
      <pubDate>Tue, 19 May 2026 00:00:00 +0000</pubDate>
      <description>One gates a route; the other gives an app real user accounts.</description>
    </item>
    
    <item>
      <title>Cutting Docker build times with layer ordering</title>
      <link>https://blog.stackfoundry.cloud/posts/docker-layer-ordering</link>
      <guid>https://blog.stackfoundry.cloud/posts/docker-layer-ordering</guid>
      <pubDate>Fri, 08 May 2026 00:00:00 +0000</pubDate>
      <description>Copy what changes least, first. The cache does the rest.</description>
    </item>
    
    <item>
      <title>Self-hosting Matrix without losing a weekend</title>
      <link>https://blog.stackfoundry.cloud/posts/self-hosting-matrix</link>
      <guid>https://blog.stackfoundry.cloud/posts/self-hosting-matrix</guid>
      <pubDate>Mon, 27 Apr 2026 00:00:00 +0000</pubDate>
      <description>Synapse, a well-known file, and the federation tester. In that order.</description>
    </item>
    
    <item>
      <title>Rate limiting at the edge with CrowdSec</title>
      <link>https://blog.stackfoundry.cloud/posts/rate-limiting-with-crowdsec</link>
      <guid>https://blog.stackfoundry.cloud/posts/rate-limiting-with-crowdsec</guid>
      <pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate>
      <description>Parse the access log, decide who&#39;s abusive, bounce them at the proxy.</description>
    </item>
    
    <item>
      <title>Terraform null_resource — the good, the bad, the footguns</title>
      <link>https://blog.stackfoundry.cloud/posts/terraform-null-resource-footguns</link>
      <guid>https://blog.stackfoundry.cloud/posts/terraform-null-resource-footguns</guid>
      <pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
      <description>It&#39;s glue for the things providers can&#39;t express. Mind the triggers.</description>
    </item>
    
    <item>
      <title>Backups that actually restore — restic + object storage</title>
      <link>https://blog.stackfoundry.cloud/posts/backups-that-actually-restore</link>
      <guid>https://blog.stackfoundry.cloud/posts/backups-that-actually-restore</guid>
      <pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate>
      <description>An untested backup is a hope, not a backup.</description>
    </item>
    
    <item>
      <title>Reading Postgres EXPLAIN without crying</title>
      <link>https://blog.stackfoundry.cloud/posts/explain-without-crying</link>
      <guid>https://blog.stackfoundry.cloud/posts/explain-without-crying</guid>
      <pubDate>Sun, 08 Mar 2026 00:00:00 +0000</pubDate>
      <description>The query planner is talking to you. Learn the vocabulary.</description>
    </item>
    
    <item>
      <title>WireGuard in 15 minutes</title>
      <link>https://blog.stackfoundry.cloud/posts/wireguard-in-15-minutes</link>
      <guid>https://blog.stackfoundry.cloud/posts/wireguard-in-15-minutes</guid>
      <pubDate>Thu, 26 Feb 2026 00:00:00 +0000</pubDate>
      <description>A VPN you can actually understand, in about 30 lines of config.</description>
    </item>
    
    <item>
      <title>The case for boring technology</title>
      <link>https://blog.stackfoundry.cloud/posts/the-case-for-boring-technology</link>
      <guid>https://blog.stackfoundry.cloud/posts/the-case-for-boring-technology</guid>
      <pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate>
      <description>Novelty is a cost you pay in production at 3am.</description>
    </item>
    
    <item>
      <title>Structured logging that pays for itself</title>
      <link>https://blog.stackfoundry.cloud/posts/structured-logging</link>
      <guid>https://blog.stackfoundry.cloud/posts/structured-logging</guid>
      <pubDate>Tue, 03 Feb 2026 00:00:00 +0000</pubDate>
      <description>Log events, not sentences.</description>
    </item>
    
    <item>
      <title>Healthchecks are a love letter to future you</title>
      <link>https://blog.stackfoundry.cloud/posts/healthchecks</link>
      <guid>https://blog.stackfoundry.cloud/posts/healthchecks</guid>
      <pubDate>Thu, 22 Jan 2026 00:00:00 +0000</pubDate>
      <description>A container that&#39;s &#34;up&#34; isn&#39;t necessarily working.</description>
    </item>
    
    <item>
      <title>git bisect — binary search for regressions</title>
      <link>https://blog.stackfoundry.cloud/posts/git-bisect</link>
      <guid>https://blog.stackfoundry.cloud/posts/git-bisect</guid>
      <pubDate>Fri, 09 Jan 2026 00:00:00 +0000</pubDate>
      <description>Stop reading diffs one by one. Let git find the bad commit.</description>
    </item>
    
    <item>
      <title>A year of self-hosting — what I&#39;d keep</title>
      <link>https://blog.stackfoundry.cloud/posts/a-year-of-self-hosting</link>
      <guid>https://blog.stackfoundry.cloud/posts/a-year-of-self-hosting</guid>
      <pubDate>Sun, 28 Dec 2025 00:00:00 +0000</pubDate>
      <description>The services that earned their disk space, and the ones that didn&#39;t.</description>
    </item>
    
    <item>
      <title>Reverse proxies, explained with plumbing</title>
      <link>https://blog.stackfoundry.cloud/posts/reverse-proxies-plumbing</link>
      <guid>https://blog.stackfoundry.cloud/posts/reverse-proxies-plumbing</guid>
      <pubDate>Mon, 15 Dec 2025 00:00:00 +0000</pubDate>
      <description>One public door, many rooms behind it.</description>
    </item>
    
    <item>
      <title>Idempotency is a superpower</title>
      <link>https://blog.stackfoundry.cloud/posts/idempotency-is-a-superpower</link>
      <guid>https://blog.stackfoundry.cloud/posts/idempotency-is-a-superpower</guid>
      <pubDate>Tue, 02 Dec 2025 00:00:00 +0000</pubDate>
      <description>Run it twice, get the same result. Now retries are safe.</description>
    </item>
    
  </channel>
</rss>