<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel>
  <title>Bryan Hamilton - Writing</title>\n  <link>https://bryanhamilton.info/writing/</link>\n  <description>PHP, MySQL and vanilla JS engineering from a 1,000-page production site. One canonical story per topic.</description>\n  <language>en-us</language>\n  <item>
    <title>The Deploy Pattern That Keeps My 1,000-Page Site Alive Without Shell Access</title>
    <link>https://bryanhamilton.info/writing/self-verifying-deploy-workers/</link>
    <guid isPermaLink="true">https://bryanhamilton.info/writing/self-verifying-deploy-workers/</guid>
    <pubDate>Sat, 07 Nov 2026 00:00:00 +0000</pubDate>
  </item>
  <item>
    <title>A Stale Editor Tab Reverted My Homepage. File mtimes Caught It.</title>
    <link>https://bryanhamilton.info/writing/stale-editor-tab-reverted-my-homepage/</link>
    <guid isPermaLink="true">https://bryanhamilton.info/writing/stale-editor-tab-reverted-my-homepage/</guid>
    <pubDate>Fri, 06 Nov 2026 00:00:00 +0000</pubDate>
  </item>
  <item>
    <title>7.0s to 2.3s: The Core Web Vitals Takedown on a 1,000-Page PHP Site</title>
    <link>https://bryanhamilton.info/writing/lcp-7-to-2-the-core-web-vitals-takedown/</link>
    <guid isPermaLink="true">https://bryanhamilton.info/writing/lcp-7-to-2-the-core-web-vitals-takedown/</guid>
    <pubDate>Tue, 03 Nov 2026 00:00:00 +0000</pubDate>
  </item>
  <item>
    <title>Making Your Site Legible to AI Crawlers: GEO on Two Live Domains</title>
    <link>https://bryanhamilton.info/writing/make-your-site-legible-to-ai-crawlers/</link>
    <guid isPermaLink="true">https://bryanhamilton.info/writing/make-your-site-legible-to-ai-crawlers/</guid>
    <pubDate>Tue, 03 Nov 2026 00:00:00 +0000</pubDate>
  </item>
  <item>
    <title>I Predicted When DJs Will Tour Next With MySQL and a Stats Trick</title>
    <link>https://bryanhamilton.info/writing/i-predicted-when-djs-will-tour-next-with-mysql-and-a-stats-trick-2p45/</link>
    <guid isPermaLink="true">https://bryanhamilton.info/writing/i-predicted-when-djs-will-tour-next-with-mysql-and-a-stats-trick-2p45/</guid>
    <pubDate>Sat, 24 Oct 2026 00:00:00 +0000</pubDate>
  </item>
  <item>
    <title>A Login Form Beat My Twenty Years of PHP</title>
    <link>https://bryanhamilton.info/writing/a-login-form-beat-my-twenty-years-of-php-1dc9/</link>
    <guid isPermaLink="true">https://bryanhamilton.info/writing/a-login-form-beat-my-twenty-years-of-php-1dc9/</guid>
    <pubDate>Fri, 23 Oct 2026 00:00:00 +0000</pubDate>
  </item>
  <item>
    <title>The Equalizer That Actually Listens: A Web Audio Analyser Deep-Dive</title>
    <link>https://bryanhamilton.info/writing/the-equalizer-that-actually-listens-a-web-audio-analyser-deep-dive-b3/</link>
    <guid isPermaLink="true">https://bryanhamilton.info/writing/the-equalizer-that-actually-listens-a-web-audio-analyser-deep-dive-b3/</guid>
    <pubDate>Sat, 17 Oct 2026 00:00:00 +0000</pubDate>
  </item>
  <item>
    <title>The Search Engine With Zero Server Calls</title>
    <link>https://bryanhamilton.info/writing/the-search-engine-with-zero-server-calls-34oa/</link>
    <guid isPermaLink="true">https://bryanhamilton.info/writing/the-search-engine-with-zero-server-calls-34oa/</guid>
    <pubDate>Fri, 16 Oct 2026 00:00:00 +0000</pubDate>
  </item>
  <item>
    <title>I Built My Portfolio Like a Piece of Rack Gear - Zero Dependencies, All Vanilla JS</title>
    <link>https://bryanhamilton.info/writing/i-built-my-portfolio-like-a-piece-of-rack-gear-zero-dependencies-all-vanilla-js-347e/</link>
    <guid isPermaLink="true">https://bryanhamilton.info/writing/i-built-my-portfolio-like-a-piece-of-rack-gear-zero-dependencies-all-vanilla-js-347e/</guid>
    <pubDate>Thu, 15 Oct 2026 00:00:00 +0000</pubDate>
  </item>
  <item>
    <title>How I Took ~1,000 Pages From Hundreds of Rich Results Warnings to Zero</title>
    <link>https://bryanhamilton.info/writing/how-i-took-1000-pages-from-hundreds-of-rich-results-warnings-to-zero-2mkl/</link>
    <guid isPermaLink="true">https://bryanhamilton.info/writing/how-i-took-1000-pages-from-hundreds-of-rich-results-warnings-to-zero-2mkl/</guid>
    <pubDate>Tue, 13 Oct 2026 00:00:00 +0000</pubDate>
  </item>
  <item>
    <title>Replay the Feed, Never a Duplicate: Idempotent Upserts in MySQL</title>
    <link>https://bryanhamilton.info/writing/replay-the-feed-never-a-duplicate-idempotent-upserts-in-mysql-3mm/</link>
    <guid isPermaLink="true">https://bryanhamilton.info/writing/replay-the-feed-never-a-duplicate-idempotent-upserts-in-mysql-3mm/</guid>
    <pubDate>Mon, 12 Oct 2026 00:00:00 +0000</pubDate>
  </item>
  <item>
    <title>Client-Side Search From a Prebuilt JSON Index: Zero Dependencies, Zero Server Calls</title>
    <link>https://bryanhamilton.info/writing/client-side-search-from-a-prebuilt-json-index-zero-dependencies-zero-server-calls-4ed0/</link>
    <guid isPermaLink="true">https://bryanhamilton.info/writing/client-side-search-from-a-prebuilt-json-index-zero-dependencies-zero-server-calls-4ed0/</guid>
    <pubDate>Fri, 09 Oct 2026 00:00:00 +0000</pubDate>
  </item>
  <item>
    <title>Classic Snake and Tank Wars!</title>
    <link>https://bryanhamilton.info/writing/classic-snake-and-tank-wars-1bp0/</link>
    <guid isPermaLink="true">https://bryanhamilton.info/writing/classic-snake-and-tank-wars-1bp0/</guid>
    <pubDate>Thu, 08 Oct 2026 00:00:00 +0000</pubDate>
  </item>
  <item>
    <title>Building a Real Audio Hover Preview with Zero Dependencies</title>
    <link>https://bryanhamilton.info/writing/building-a-real-audio-hover-preview-with-zero-dependencies-2mgp/</link>
    <guid isPermaLink="true">https://bryanhamilton.info/writing/building-a-real-audio-hover-preview-with-zero-dependencies-2mgp/</guid>
    <pubDate>Wed, 07 Oct 2026 00:00:00 +0000</pubDate>
  </item>
  <item>
    <title>Extracting a Production Hover Preview: Audio, Canvas EQ, and Consent-First Design</title>
    <link>https://bryanhamilton.info/writing/extracting-a-production-hover-preview-audio-canvas-eq-and-consent-first-design-2lac/</link>
    <guid isPermaLink="true">https://bryanhamilton.info/writing/extracting-a-production-hover-preview-audio-canvas-eq-and-consent-first-design-2lac/</guid>
    <pubDate>Wed, 07 Oct 2026 00:00:00 +0000</pubDate>
  </item>
  </channel></rss>