    <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
      <channel>
        <title>Keegan Watkins</title>
        <link>https://keeganwatkins.com</link>
        <description>Personal website of Keegan Watkins: writing about (mostly front-end) software</description>
        <language>en</language>
        <lastBuildDate>Sun, 04 Jan 2026 17:06:56 GMT</lastBuildDate>
        <atom:link href="https://keeganwatkins.com/rss.xml" rel="self" type="application/rss+xml"/>        <item>
  <guid>https://keeganwatkins.com/posts/stop-treating-your-es-modules-like-junk-drawers</guid>
  <title>Stop treating your ES modules like junk drawers</title>
  <link>https://keeganwatkins.com/posts/stop-treating-your-es-modules-like-junk-drawers</link>
  <description>Module-level state is a footgun</description>
  <pubDate>Sun, 07 Mar 2021 19:44:56 GMT</pubDate>
</item><item>
  <guid>https://keeganwatkins.com/posts/generating-open-graph-previews-for-static-sites</guid>
  <title>Generating Open Graph previews for static sites</title>
  <link>https://keeganwatkins.com/posts/generating-open-graph-previews-for-static-sites</link>
  <description>Using data URLs, Playwright, and HTML</description>
  <pubDate>Sun, 06 Dec 2020 00:14:25 GMT</pubDate>
</item><item>
  <guid>https://keeganwatkins.com/posts/ejecting-from-google-fonts</guid>
  <title>Ejecting from Google Fonts</title>
  <link>https://keeganwatkins.com/posts/ejecting-from-google-fonts</link>
  <description>Self-hosting font files, because we can</description>
  <pubDate>Sat, 28 Nov 2020 17:08:54 GMT</pubDate>
</item><item>
  <guid>https://keeganwatkins.com/posts/skewed-backgrounds-with-css</guid>
  <title>Skewed backgrounds with CSS</title>
  <link>https://keeganwatkins.com/posts/skewed-backgrounds-with-css</link>
  <description>Using generated content for irregular background shapes</description>
  <pubDate>Tue, 24 Nov 2020 23:58:32 GMT</pubDate>
</item><item>
  <guid>https://keeganwatkins.com/posts/how-this-blog-is-built</guid>
  <title>How this blog is built</title>
  <link>https://keeganwatkins.com/posts/how-this-blog-is-built</link>
  <description>A reckoning of acceptable trade-offs</description>
  <pubDate>Mon, 23 Nov 2020 04:23:40 GMT</pubDate>
</item>
      </channel>
    </rss>