<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:corbet="https://corbet.app/ns/writing">
  <channel>
    <title>Writing by Corbet Griffith</title>
    <link>https://corbet.app/writing/</link>
    <description>Technical articles on developer tooling, self-hosted infrastructure, and building products at the intersection of design and engineering. Written by a Technical Product Manager and UX Engineer open to full-time roles.</description>
    <language>en-us</language>
    <managingEditor>me@corbet.app (Corbet Griffith)</managingEditor>
    <webMaster>me@corbet.app (Corbet Griffith)</webMaster>
    <lastBuildDate>Sun, 14 Jun 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://corbet.app/writing/feed.xml" rel="self" type="application/rss+xml" />
    <image>
      <url>https://corbet.app/img/avatar.webp</url>
      <title>Writing by Corbet Griffith</title>
      <link>https://corbet.app/writing/</link>
    </image>

    <!-- Optional learning signal per post → powers the homepage "currently…" bubble.
         <corbet:learned domain="Broad domain">short thing you learned</corbet:learned>
         Keep it to a few words so it fits the bubble. The project name is taken from
         the part of <title> before the colon, so it needs no extra tag. -->

    <item>
      <title>ChonconGO: A Trip Map PWA with Live Location Sharing</title>
      <link>https://corbet.app/writing/choncongo.html</link>
      <corbet:learned domain="Real-time">real-time web apps</corbet:learned>
      <guid isPermaLink="true">https://corbet.app/writing/choncongo.html</guid>
      <pubDate>Sun, 14 Jun 2026 00:00:00 +0000</pubDate>
      <dc:creator>Corbet Griffith</dc:creator>
      <category>Side Project</category>
      <description><![CDATA[A trip-map PWA built for a six-person Pokemon GO Fest weekend in Chicago. Every stop on a Leaflet map, one-tap Google Maps directions, install-to-home-screen offline support, and live location sharing for the whole group over a single Cloudflare Worker. Covers the zero-build static frontend, the WebSocket presence layer on a Durable Object, and the map easter eggs.]]></description>
    </item>

    <item>
      <title>scaffold.sh: Zero-Terminal Web Project Initialization with Cloudflare Pages, GitHub CLI, and Raycast</title>
      <link>https://corbet.app/writing/scaffold-sh.html</link>
      <corbet:learned domain="Automation">developer experience</corbet:learned>
      <guid isPermaLink="true">https://corbet.app/writing/scaffold-sh.html</guid>
      <pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate>
      <dc:creator>Corbet Griffith</dc:creator>
      <category>Developer Tooling</category>
      <description><![CDATA[Every new web project used to cost me 15 minutes before a single line of real code was written. Here is how I collapsed that to under 60 seconds, with no terminal required. Covers scaffold.sh, CLAUDE.md project context, Raycast scripting, and the case for vanilla JS with no build step.]]></description>
    </item>

    <item>
      <title>Your Season: Building a Seasonal Color Analysis PWA</title>
      <link>https://corbet.app/writing/yourseason.html</link>
      <corbet:learned domain="Frontend">design systems</corbet:learned>
      <guid isPermaLink="true">https://corbet.app/writing/yourseason.html</guid>
      <pubDate>Wed, 04 Mar 2026 00:00:00 +0000</pubDate>
      <dc:creator>Corbet Griffith</dc:creator>
      <category>Product</category>
      <description><![CDATA[A mobile-first PWA covering all 12 seasonal color types with palette guides, wardrobe recommendations, and curated product suggestions. Free, no account required, installs on your home screen like a native app. Covers the 12-season color system, self-identification, and the PWA implementation including iOS and Android install flows.]]></description>
    </item>

    <item>
      <title>SpecSheet: A Fast-Reference Guide for People Who Know Their Stuff</title>
      <link>https://corbet.app/writing/specsheet.html</link>
      <corbet:learned domain="Search">full-text search</corbet:learned>
      <guid isPermaLink="true">https://corbet.app/writing/specsheet.html</guid>
      <pubDate>Sun, 15 Feb 2026 00:00:00 +0000</pubDate>
      <dc:creator>Corbet Griffith</dc:creator>
      <category>Side Project</category>
      <description><![CDATA[A no-login, no-account fast-reference app covering homebrewing, coffee, agave spirits, photography, developer tooling, and more. Open it, hit the spec you need, and get on with it. Built as a static vanilla JS app deployed on Cloudflare Pages with full-text search and shareable deep links.]]></description>
    </item>

    <item>
      <title>photos.corbet.dev: A Self-Hosted Image Uploader on Cloudflare R2</title>
      <link>https://corbet.app/writing/photos.html</link>
      <corbet:learned domain="Cloud">serverless APIs</corbet:learned>
      <guid isPermaLink="true">https://corbet.app/writing/photos.html</guid>
      <pubDate>Sun, 01 Feb 2026 00:00:00 +0000</pubDate>
      <dc:creator>Corbet Griffith</dc:creator>
      <category>Homelab</category>
      <description><![CDATA[Upload by file picker, clipboard paste, or URL fetch. Get copy-ready URLs in raw, Markdown, BBCode, and HTML formats with auto-copy on success. The whole thing runs on Cloudflare R2 and a single Worker, with no third-party image hosting involved. Includes iOS Shortcuts integration.]]></description>
    </item>

    <item>
      <title>Clymber: Building a Climbing Conditioning Tracker for Myself</title>
      <link>https://corbet.app/writing/clymber.html</link>
      <corbet:learned domain="UX">mobile-first UX</corbet:learned>
      <guid isPermaLink="true">https://corbet.app/writing/clymber.html</guid>
      <pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate>
      <dc:creator>Corbet Griffith</dc:creator>
      <category>Side Project</category>
      <description><![CDATA[A structured conditioning and mobility tracker for climbing training, covering pulling strength, hip mobility, and tendon health. Built because no existing app gave me exactly what I needed without a lot of what I did not. A mobile-first PWA with per-set timers and a session history log.]]></description>
    </item>

    <item>
      <title>fresh: Automated macOS and Linux Setup from Scratch</title>
      <link>https://corbet.app/writing/fresh.html</link>
      <corbet:learned domain="DevOps">infrastructure as code</corbet:learned>
      <guid isPermaLink="true">https://corbet.app/writing/fresh.html</guid>
      <pubDate>Sat, 03 Jan 2026 00:00:00 +0000</pubDate>
      <dc:creator>Corbet Griffith</dc:creator>
      <category>Developer Tooling</category>
      <description><![CDATA[A collection of scripts, dotfiles, CLI tools, and config files that automates getting a new machine back to a fully configured development environment in minutes rather than hours. The repo is the backup. Clone it and you have everything.]]></description>
    </item>

  </channel>
</rss>
