<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Tan Compose blog</title>
    <link>https://ra9.github.io/tan-compose/blog/</link>
    <description>A tiny library for declaratively defining reusable Web Components, plus a 23-component kit and a curated icon set.</description>
    <language>en</language>
    <lastBuildDate>Wed, 20 May 2026 01:17:42 GMT</lastBuildDate>
    <atom:link href="https://ra9.github.io/tan-compose/blog/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Drawing icons by hand</title>
      <link>https://ra9.github.io/tan-compose/blog/drawing-icons-by-hand.html</link>
      <guid isPermaLink="true">https://ra9.github.io/tan-compose/blog/drawing-icons-by-hand.html</guid>
      <pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate>
      <category>icons v0.3.0 · craft</category>
      <description>Most icon libraries are a curated tax — you install two thousand SVGs to use forty. The one you actually need is never in the set. Custom icons are accessible once you internalize that an icon is a sixty-character string and the alphabet to write one is small enough to learn in an afternoon.</description>
    </item>
    <item>
      <title>Liberia, by the numbers</title>
      <link>https://ra9.github.io/tan-compose/blog/liberia-by-the-numbers.html</link>
      <guid isPermaLink="true">https://ra9.github.io/tan-compose/blog/liberia-by-the-numbers.html</guid>
      <pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate>
      <category>case study · charts</category>
      <description>Liberia&apos;s population grew five-fold between 1960 and 2023 — from about a million to 5.4 million. Its access to electricity, basic sanitation, and primary care did not scale with it. Six charts, one stat board, all themed against the same CSS tokens, fetched from a JSON endpoint by tc-chart so the page can re-skin without a rebuild.</description>
    </item>
    <item>
      <title>kit v1.6 — from 24 to 35 components</title>
      <link>https://ra9.github.io/tan-compose/blog/kit-1-6-from-24-to-35.html</link>
      <guid isPermaLink="true">https://ra9.github.io/tan-compose/blog/kit-1-6-from-24-to-35.html</guid>
      <pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate>
      <category>kit v1.6.0 · v1.7.0 · release</category>
      <description>Eleven new components grow the kit from 24 to 35. The interesting bits aren&apos;t on the surface — they&apos;re the platform features each piece leans on. Native dialog for the drawer, popover API for the tooltip, MutationObserver for the carousel&apos;s slot, and a clip-path that keeps half-stars exact at any zoom.</description>
    </item>
    <item>
      <title>Build a tasks app in ~80 lines</title>
      <link>https://ra9.github.io/tan-compose/blog/build-a-tasks-app.html</link>
      <guid isPermaLink="true">https://ra9.github.io/tan-compose/blog/build-a-tasks-app.html</guid>
      <pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate>
      <category>tutorial · kit</category>
      <description>A small CRUD app — list, add, mark done, delete, with live stats and toasts — wired entirely from @ra9/tan-compose-kit. No framework, no build step. The whole thing is one HTML file and about eighty lines of JavaScript.</description>
    </item>
    <item>
      <title>Keyed list reconciliation in ~60 lines</title>
      <link>https://ra9.github.io/tan-compose/blog/keyed-reconciliation-in-60-lines.html</link>
      <guid isPermaLink="true">https://ra9.github.io/tan-compose/blog/keyed-reconciliation-in-60-lines.html</guid>
      <pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate>
      <category>internals</category>
      <description>How for: { items, key, render } actually works. The cache, the identity check, what gets torn down, and why no virtual DOM is involved. Annotated walk-through of the implementation in build.ts.</description>
    </item>
    <item>
      <title>Making custom elements feel native</title>
      <link>https://ra9.github.io/tan-compose/blog/feels-native.html</link>
      <guid isPermaLink="true">https://ra9.github.io/tan-compose/blog/feels-native.html</guid>
      <pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate>
      <category>v0.4.0 · release</category>
      <description>v0.3 gave us building blocks. v0.4 is about the seams — refs, form-association, and adopted stylesheets that let a tan-compose element behave like a real platform primitive.</description>
    </item>
    <item>
      <title>I rebuilt the docs site with the library it documents.</title>
      <link>https://ra9.github.io/tan-compose/blog/built-the-site-with-the-kit.html</link>
      <guid isPermaLink="true">https://ra9.github.io/tan-compose/blog/built-the-site-with-the-kit.html</guid>
      <pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate>
      <category>meta · rewrite</category>
      <description>Twelve pages, 2,470 fewer lines of HTML, three new shared primitives, and five small papercuts that I&apos;d never have noticed without trying to live inside the library. The wins, the cost, the things I&apos;d change next.</description>
    </item>
    <item>
      <title>Why I built tan-compose</title>
      <link>https://ra9.github.io/tan-compose/blog/why-i-built-tan-compose.html</link>
      <guid isPermaLink="true">https://ra9.github.io/tan-compose/blog/why-i-built-tan-compose.html</guid>
      <pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate>
      <category>essay</category>
      <description>On the framework tax for small UI, what the platform actually gives you, and the v0.3 building blocks for putting together real components — datatables, forms, anything bigger than a styled button — without reaching for React.</description>
    </item>
    <item>
      <title>Anatomy of an admin dashboard</title>
      <link>https://ra9.github.io/tan-compose/blog/anatomy-of-a-dashboard.html</link>
      <guid isPermaLink="true">https://ra9.github.io/tan-compose/blog/anatomy-of-a-dashboard.html</guid>
      <pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate>
      <category>kit · case study</category>
      <description>How the /demo/admin/ page composes — an in-memory store, a filter bar reading from three controls, a keyed datatable that embeds badges in cells, two modals with different state owners, a theme switcher in three constants, and the production gaps that would slot into the same shape.</description>
    </item>
  </channel>
</rss>
