<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Jason Dillingham</title>
    <link>https://jasondillingham.dev/</link>
    <description>Long-form notes on Go, infrastructure, security, the homelab, and whatever else I&#39;m thinking about.</description>
    <atom:link href="https://jasondillingham.dev/rss.xml" rel="self" type="application/rss+xml" />
    <language>en-us</language>
    <lastBuildDate>Mon, 01 Jun 2026 15:47:40 +0000</lastBuildDate>
    <generator>md2post (Go) — https://jasondillingham.dev</generator>
    <item>
      <title>Three things I got wrong about Kubernetes</title>
      <link>https://jasondillingham.dev/blog/k8s-three-things-i-got-wrong.html</link>
      <guid isPermaLink="true">https://jasondillingham.dev/blog/k8s-three-things-i-got-wrong.html</guid>
      <pubDate>Mon, 01 Jun 2026 00:00:00 +0000</pubDate>
      <description>I held off on Kubernetes for years. The case against it sounded right. After standing up a two-node k3s cluster, most of what I&#39;d believed turned out to be wrong.</description>
      <category>kubernetes</category>
      <category>homelab</category>
      <category>infrastructure</category>
      <category>learning</category>
    </item>
    <item>
      <title>Weapons made me work for it — 8 broken sticks out of 10</title>
      <link>https://jasondillingham.dev/offline/weapons.html</link>
      <guid isPermaLink="true">https://jasondillingham.dev/offline/weapons.html</guid>
      <pubDate>Mon, 01 Jun 2026 00:00:00 +0000</pubDate>
      <description>A horror movie that wouldn&#39;t let me guess the ending. Seventeen kids from one classroom walk out their front doors at the same minute, and the movie makes you earn every answer.</description>
      <category>movies</category>
      <category>horror</category>
    </item>
    <item>
      <title>The Housemaid plays like a true-crime episode — 6 ex wives out of 10</title>
      <link>https://jasondillingham.dev/offline/the-housemaid.html</link>
      <guid isPermaLink="true">https://jasondillingham.dev/offline/the-housemaid.html</guid>
      <pubDate>Mon, 01 Jun 2026 00:00:00 +0000</pubDate>
      <description>A thriller that felt less like a movie and more like an episode of a true-crime podcast, the kind where an ordinary situation slowly turns into something you can&#39;t look away from. Solid, not special.</description>
      <category>movies</category>
      <category>thriller</category>
    </item>
    <item>
      <title>Sinners blindsided me — 9 guitar strings out of 10</title>
      <link>https://jasondillingham.dev/offline/sinners.html</link>
      <guid isPermaLink="true">https://jasondillingham.dev/offline/sinners.html</guid>
      <pubDate>Mon, 01 Jun 2026 00:00:00 +0000</pubDate>
      <description>I walked into Sinners knowing nothing except that I like Michael B. Jordan. I thought I was getting a Deep South period drama. I was half right, and the other half I never saw coming.</description>
      <category>movies</category>
      <category>horror</category>
    </item>
    <item>
      <title>Cold Storage is dumb fun that bites — 6 space slimes out of 10</title>
      <link>https://jasondillingham.dev/offline/cold-storage.html</link>
      <guid isPermaLink="true">https://jasondillingham.dev/offline/cold-storage.html</guid>
      <pubDate>Mon, 01 Jun 2026 00:00:00 +0000</pubDate>
      <description>A minimum-wage night-shift nobody ends up the only thing standing between a hungry organism and the rest of us. It&#39;s silly, it&#39;s gross, and it knows exactly what it is. Not for everyone, and that&#39;s fine.</description>
      <category>movies</category>
      <category>horror</category>
    </item>
    <item>
      <title>Above the Rim, watched right this time — 7 McDonald&#39;s All Americans out of 10</title>
      <link>https://jasondillingham.dev/offline/above-the-rim.html</link>
      <guid isPermaLink="true">https://jasondillingham.dev/offline/above-the-rim.html</guid>
      <pubDate>Mon, 01 Jun 2026 00:00:00 +0000</pubDate>
      <description>I was too young for this one when it came out and too checked-out when I caught it as a teenager. Coming back to it as an adult, the story I never actually absorbed turns out to hold up.</description>
      <category>movies</category>
      <category>90s</category>
    </item>
    <item>
      <title>Predator Badlands puts you behind the mask — 8 lovable androids out of 10</title>
      <link>https://jasondillingham.dev/offline/predator-badlands.html</link>
      <guid isPermaLink="true">https://jasondillingham.dev/offline/predator-badlands.html</guid>
      <pubDate>Mon, 01 Jun 2026 00:00:00 +0000</pubDate>
      <description>For once the Predator isn&#39;t the thing in the dark hunting you. You&#39;re riding along with him, a young outcast on a planet where everything wants you dead. As a lifelong Alien and Predator guy, I had a blast, and I&#39;m telling you that up front so you can grade my grade.</description>
      <category>movies</category>
      <category>scifi</category>
    </item>
    <item>
      <title>Anaconda, watched through a Jack Black filter — 7 snakes out of 10</title>
      <link>https://jasondillingham.dev/offline/anaconda.html</link>
      <guid isPermaLink="true">https://jasondillingham.dev/offline/anaconda.html</guid>
      <pubDate>Mon, 01 Jun 2026 00:00:00 +0000</pubDate>
      <description>Two best friends hit a midlife crisis and decide to remake their favorite movie in the Amazon. It&#39;s dumb on purpose and it knows it. Set your expectations right and it&#39;s a good time.</description>
      <category>movies</category>
      <category>comedy</category>
    </item>
    <item>
      <title>When one go2rtc isn&#39;t enough — moving the streaming server to the edge</title>
      <link>https://jasondillingham.dev/blog/distributed-go2rtc.html</link>
      <guid isPermaLink="true">https://jasondillingham.dev/blog/distributed-go2rtc.html</guid>
      <pubDate>Sat, 30 May 2026 00:00:00 +0000</pubDate>
      <description>I had a camera streaming server in one office and a VPN to every branch. The cameras at the central office worked fine. The remote ones stalled. The fix wasn&#39;t faster code — it was moving the streaming server to the edge.</description>
      <category>streaming</category>
      <category>go</category>
      <category>networking</category>
    </item>
    <item>
      <title>New switch, fixed cameras, and a doorbell that actually rings</title>
      <link>https://jasondillingham.dev/blog/unifi-switch-cameras-homekit.html</link>
      <guid isPermaLink="true">https://jasondillingham.dev/blog/unifi-switch-cameras-homekit.html</guid>
      <pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate>
      <description>A weekend of stacking infrastructure problems — a UniFi switch that wouldn&#39;t adopt, four cameras that lost their network, and a doorbell that needed three separate fixes before it would ring an iPhone. The fights, the gotchas, and the SOCKET.IO trick that saved an hour.</description>
      <category>homelab</category>
      <category>network</category>
      <category>homekit</category>
    </item>
    <item>
      <title>A small PR, a maintainer quote, and the part of AI-assisted development the industry undersells</title>
      <link>https://jasondillingham.dev/blog/1password-connect-sdk-pr-104.html</link>
      <guid isPermaLink="true">https://jasondillingham.dev/blog/1password-connect-sdk-pr-104.html</guid>
      <pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate>
      <description>A case-sensitive struct-tag match in 1Password&#39;s Go SDK was dropping fields silently. The fix was a one-line swap. The interesting part was how I found the four mirror sites I would have missed reading top-to-bottom.</description>
      <category>go</category>
      <category>ai</category>
      <category>audit</category>
    </item>
    <item>
      <title>I audited my Docker server and found exactly what you&#39;d expect</title>
      <link>https://jasondillingham.dev/blog/docker-security-audit.html</link>
      <guid isPermaLink="true">https://jasondillingham.dev/blog/docker-security-audit.html</guid>
      <pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate>
      <description>Two years of &#34;I&#39;ll add this one service&#34; produced a Docker host with secrets in plaintext, services with no auth, root-owned containers, and a Docker socket mounted read-write. I audited it. This is what I found, what scared me, and how to triage your own.</description>
      <category>security</category>
      <category>docker</category>
      <category>homelab</category>
    </item>
    <item>
      <title>Shipping bosun with bosun</title>
      <link>https://jasondillingham.dev/blog/shipping-bosun-with-bosun.html</link>
      <guid isPermaLink="true">https://jasondillingham.dev/blog/shipping-bosun-with-bosun.html</guid>
      <pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate>
      <description>Using bosun to ship bosun — three buckets of pre-launch work, ten parallel agent lanes, one command to flip it public.</description>
      <category>ai</category>
      <category>mcp</category>
      <category>go</category>
      <category>ops</category>
    </item>
    <item>
      <title>Why my homelab runs Authentik instead of Keycloak</title>
      <link>https://jasondillingham.dev/blog/authentik-vs-keycloak.html</link>
      <guid isPermaLink="true">https://jasondillingham.dev/blog/authentik-vs-keycloak.html</guid>
      <pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate>
      <description>Three SSO options, a homelab that had outgrown &#34;I&#39;ll remember&#34; as a security model, and why the established enterprise choice was the wrong one for me. The architecture, the gotcha that every self-hosted SSO setup hits, and what OIDC looks like when the protocol is standardized but the implementations aren&#39;t.</description>
      <category>homelab</category>
      <category>auth</category>
      <category>sso</category>
    </item>
    <item>
      <title>An MCP server for the multi-host Ollama setup</title>
      <link>https://jasondillingham.dev/blog/ollama-mcp.html</link>
      <guid isPermaLink="true">https://jasondillingham.dev/blog/ollama-mcp.html</guid>
      <pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate>
      <description>I built a small Go MCP server that lets Claude manage and call the Ollama instances I run at home. Sixteen tools across model management, inference, fleet introspection, and benchmarking.</description>
      <category>ai</category>
      <category>mcp</category>
      <category>go</category>
      <category>homelab</category>
    </item>
    <item>
      <title>I audited three of my own MCPs back-to-back. Here&#39;s what changed.</title>
      <link>https://jasondillingham.dev/blog/audit-methodology.html</link>
      <guid isPermaLink="true">https://jasondillingham.dev/blog/audit-methodology.html</guid>
      <pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate>
      <description>Ten hardening patterns that emerged from auditing three Go MCP servers in a row, plus the test-the-contract discipline that came with them. The patterns are portable; the test discipline is the actual lesson. Closes with the same patterns applied to a bug in someone else&#39;s SDK.</description>
      <category>security</category>
      <category>audit</category>
      <category>go</category>
      <category>mcp</category>
    </item>
    <item>
      <title>I gave Claude a website-design tool</title>
      <link>https://jasondillingham.dev/blog/architect-mcp.html</link>
      <guid isPermaLink="true">https://jasondillingham.dev/blog/architect-mcp.html</guid>
      <pubDate>Sun, 03 May 2026 00:00:00 +0000</pubDate>
      <description>An MCP server that generates opinionated website design blueprints. Section-by-section CSS specs, palette, typography, layout DNA — handed to a code-generation step downstream. Built around one belief — that the prompt is the actual product.</description>
      <category>ai</category>
      <category>mcp</category>
      <category>go</category>
      <category>design</category>
    </item>
    <item>
      <title>The Super Mario Galaxy Movie — my kid says A+</title>
      <link>https://jasondillingham.dev/offline/mario-galaxy-movie.html</link>
      <guid isPermaLink="true">https://jasondillingham.dev/offline/mario-galaxy-movie.html</guid>
      <pubDate>Fri, 01 May 2026 00:00:00 +0000</pubDate>
      <description>Took my daughter to see the Mario Galaxy movie. Critics aren&#39;t wrong — they&#39;re just not the audience.</description>
      <category>movies</category>
      <category>family</category>
      <category>nintendo</category>
    </item>
    <item>
      <title>Building an AP workflow tool when the state already lives in Outlook</title>
      <link>https://jasondillingham.dev/blog/dispatch-ap-workflow-outlook-categories.html</link>
      <guid isPermaLink="true">https://jasondillingham.dev/blog/dispatch-ap-workflow-outlook-categories.html</guid>
      <pubDate>Thu, 30 Apr 2026 00:00:00 +0000</pubDate>
      <description>Vendors solve 90% of AP automation. The remaining 10% — the integration glue between Outlook, the ERP, and the team&#39;s actual workflow — is the part that has to be built per-company. This is how I built it, and the architectural choice that made everything else cheap.</description>
      <category>go</category>
      <category>ai</category>
      <category>ops</category>
    </item>
    <item>
      <title>PhishGuard — building an in-house anti-phishing classifier</title>
      <link>https://jasondillingham.dev/blog/phishguard.html</link>
      <guid isPermaLink="true">https://jasondillingham.dev/blog/phishguard.html</guid>
      <pubDate>Wed, 22 Apr 2026 00:00:00 +0000</pubDate>
      <description>How I built an in-house anti-phishing classifier using Go, embeddings, and a healthy fear of false negatives.</description>
      <category>security</category>
      <category>go</category>
    </item>
    <item>
      <title>Letting Claude into my homelab — but only this far</title>
      <link>https://jasondillingham.dev/blog/homelab-status-mcp.html</link>
      <guid isPermaLink="true">https://jasondillingham.dev/blog/homelab-status-mcp.html</guid>
      <pubDate>Fri, 17 Apr 2026 00:00:00 +0000</pubDate>
      <description>I built an MCP server that gives Claude read-only observability over my homelab. The interesting part isn&#39;t the tool — it&#39;s the security model. Three guardrails so an LLM can answer questions about infrastructure without being able to break it.</description>
      <category>security</category>
      <category>mcp</category>
      <category>homelab</category>
      <category>go</category>
    </item>
    <item>
      <title>33 tasks, 1,231 classified emails, and a code review where two of the bugs weren&#39;t real</title>
      <link>https://jasondillingham.dev/blog/dispatch-dev-session-code-review.html</link>
      <guid isPermaLink="true">https://jasondillingham.dev/blog/dispatch-dev-session-code-review.html</guid>
      <pubDate>Sun, 12 Apr 2026 00:00:00 +0000</pubDate>
      <description>One development session on Dispatch — a hybrid classifier that bypasses the LLM for 60% of mail, a 1,231-message backfill, a four-bucket queue refactor, and an AI code review where two of eight findings turned out to be wrong in instructive ways.</description>
      <category>go</category>
      <category>ai</category>
      <category>ops</category>
    </item>
    <item>
      <title>Designing a five-VLAN home network from scratch</title>
      <link>https://jasondillingham.dev/blog/vlan-segmentation.html</link>
      <guid isPermaLink="true">https://jasondillingham.dev/blog/vlan-segmentation.html</guid>
      <pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate>
      <description>Five tiers of trust, off-the-shelf hardware, and the firewall rules that actually matter. How I segmented a flat home network without spending enterprise money — and the design decisions that survived contact with reality.</description>
      <category>homelab</category>
      <category>network</category>
      <category>security</category>
    </item>
    <item>
      <title>Building employee onboarding that runs in one click</title>
      <link>https://jasondillingham.dev/blog/onboarding-automation.html</link>
      <guid isPermaLink="true">https://jasondillingham.dev/blog/onboarding-automation.html</guid>
      <pubDate>Thu, 05 Mar 2026 00:00:00 +0000</pubDate>
      <description>The onboarding side of the same problem the offboarding MCP solves — but with a different shape. A single-screen Go web app that transactionally creates accounts across our directory, mail platform, and ERP, hands the new hire a printed welcome sheet, and refuses to leave half-broken state behind. The architecture, the four-table SQL insert that took two weeks to get right, and the directory password encoding gotcha that ate a Saturday.</description>
      <category>go</category>
      <category>ops</category>
      <category>automation</category>
    </item>
    <item>
      <title>Building an MCP server to automate employee offboarding</title>
      <link>https://jasondillingham.dev/blog/offboarding-mcp.html</link>
      <guid isPermaLink="true">https://jasondillingham.dev/blog/offboarding-mcp.html</guid>
      <pubDate>Fri, 20 Feb 2026 00:00:00 +0000</pubDate>
      <description>An MCP server in Go that orchestrates offboarding across our directory, mail platform, ERP, file storage, forms platform, and helpdesk. Architecture, the dependencies that bit me, and what the first real production run cost.</description>
      <category>mcp</category>
      <category>go</category>
      <category>ops</category>
    </item>
    <item>
      <title>How I set up Vault to stop storing secrets in plain text</title>
      <link>https://jasondillingham.dev/blog/vault-secrets-management.html</link>
      <guid isPermaLink="true">https://jasondillingham.dev/blog/vault-secrets-management.html</guid>
      <pubDate>Sun, 15 Feb 2026 00:00:00 +0000</pubDate>
      <description>A security audit flagged credentials-in-plaintext as the highest-severity finding in my homelab. This is what I did about it, what broke on the first deploy, and what changes when secrets become something you request instead of something you store.</description>
      <category>security</category>
      <category>secrets</category>
      <category>homelab</category>
    </item>
  </channel>
</rss>
