<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>kmblog</title>
    <link>https://kamilliu.com/</link>
    <atom:link href="https://kamilliu.com/rss.xml" rel="self" type="application/rss+xml" />
    <description>Notes on frontend engineering, interface craft, and doing the work.</description>
    <language>en</language>
    <lastBuildDate>Thu, 27 Aug 2026 00:00:00 GMT</lastBuildDate>
    <item>
      <title>The Design Tokens That Survived Three Rebrands</title>
      <link>https://kamilliu.com/blog/design-tokens</link>
      <guid isPermaLink="true">https://kamilliu.com/blog/design-tokens</guid>
      <pubDate>Thu, 27 Aug 2026 00:00:00 GMT</pubDate>
      <category>Engineering</category>
      <description>Most design systems die at the second rebrand, because the token names describe how things looked on the day they were written.</description>
    </item>
    <item>
      <title>React Form Actions Let Me Delete Half a Form Library</title>
      <link>https://kamilliu.com/blog/form-actions</link>
      <guid isPermaLink="true">https://kamilliu.com/blog/form-actions</guid>
      <pubDate>Wed, 12 Aug 2026 00:00:00 GMT</pubDate>
      <category>Engineering</category>
      <description>An eight-hundred-line in-house wrapper swapped for native actions and useActionState, and the four assumptions that moved with it.</description>
    </item>
    <item>
      <title>Typesetting Long Reads: Fourteen Details That Matter</title>
      <link>https://kamilliu.com/blog/long-reads</link>
      <guid isPermaLink="true">https://kamilliu.com/blog/long-reads</guid>
      <pubDate>Thu, 30 Jul 2026 00:00:00 GMT</pubDate>
      <category>Craft</category>
      <description>Line height, measure, punctuation spacing, caption alignment. Nobody compliments any of it, and all of it is why you finish the article.</description>
    </item>
    <item>
      <title>Cutting a Monorepo Cold Start From 48s to 6s</title>
      <link>https://kamilliu.com/blog/cold-start</link>
      <guid isPermaLink="true">https://kamilliu.com/blog/cold-start</guid>
      <pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate>
      <category>Engineering</category>
      <description>Dependency pre-bundling, one barrel file, and a tsconfig references setting the whole team had scrolled past for a year.</description>
    </item>
    <item>
      <title>Rewriting a Dark Theme in OKLCH</title>
      <link>https://kamilliu.com/blog/oklch</link>
      <guid isPermaLink="true">https://kamilliu.com/blog/oklch</guid>
      <pubDate>Fri, 19 Jun 2026 00:00:00 GMT</pubDate>
      <category>Craft</category>
      <description>Same hue, same lightness, and one colour still jumps off the screen. Perceptual lightness made the problem disappear instead of hiding it.</description>
    </item>
    <item>
      <title>Shipping Smaller: Three Features Nobody Used</title>
      <link>https://kamilliu.com/blog/shipping-smaller</link>
      <guid isPermaLink="true">https://kamilliu.com/blog/shipping-smaller</guid>
      <pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate>
      <category>Essays</category>
      <description>Three things I was sure would land, and did not. The post-mortem kept pointing at the same cause, and it was never the feature.</description>
    </item>
    <item>
      <title>Learning When to Shut Up in Code Review</title>
      <link>https://kamilliu.com/blog/code-review</link>
      <guid isPermaLink="true">https://kamilliu.com/blog/code-review</guid>
      <pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate>
      <category>Essays</category>
      <description>A good share of my review comments were noise. On what is worth saying, and the prefix that halved my review rounds.</description>
    </item>
    <item>
      <title>Type-Safe Routing Without a Framework</title>
      <link>https://kamilliu.com/blog/type-safe-routing</link>
      <guid isPermaLink="true">https://kamilliu.com/blog/type-safe-routing</guid>
      <pubDate>Wed, 04 Mar 2026 00:00:00 GMT</pubDate>
      <category>Engineering</category>
      <description>Mistyped paths, missing params, and refactors that break silently. Sixty lines of types turn all three into compile errors.</description>
    </item>
    <item>
      <title>The Keyboard-First Workflow I Actually Kept</title>
      <link>https://kamilliu.com/blog/keyboard-first</link>
      <guid isPermaLink="true">https://kamilliu.com/blog/keyboard-first</guid>
      <pubDate>Sun, 15 Feb 2026 00:00:00 GMT</pubDate>
      <category>Engineering</category>
      <description>Not the vim flex. The handful of actions I repeat forty times a day, moved from three seconds to half a second.</description>
    </item>
    <item>
      <title>The Empty State Is the Product</title>
      <link>https://kamilliu.com/blog/empty-states</link>
      <guid isPermaLink="true">https://kamilliu.com/blog/empty-states</guid>
      <pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate>
      <category>Craft</category>
      <description>The first screen most people see has no data in it. Treating it as a layout edge case is how products feel broken on day one.</description>
    </item>
    <item>
      <title>Animation Is a Budget, Not a Garnish</title>
      <link>https://kamilliu.com/blog/motion-restraint</link>
      <guid isPermaLink="true">https://kamilliu.com/blog/motion-restraint</guid>
      <pubDate>Thu, 11 Dec 2025 00:00:00 GMT</pubDate>
      <category>Craft</category>
      <description>Every transition spends attention. Spending it on the three moments that carry meaning beats sprinkling it across forty.</description>
    </item>
    <item>
      <title>What I Read This Year, and What Actually Stuck</title>
      <link>https://kamilliu.com/blog/reading-notes</link>
      <guid isPermaLink="true">https://kamilliu.com/blog/reading-notes</guid>
      <pubDate>Fri, 28 Nov 2025 00:00:00 GMT</pubDate>
      <category>Essays</category>
      <description>Twenty-odd books, four that changed how I work, and an honest note about the ones I abandoned at chapter three.</description>
    </item>
    <item>
      <title>The Year I Got Better at Saying No</title>
      <link>https://kamilliu.com/blog/saying-no</link>
      <guid isPermaLink="true">https://kamilliu.com/blog/saying-no</guid>
      <pubDate>Thu, 16 Oct 2025 00:00:00 GMT</pubDate>
      <category>Essays</category>
      <description>Saying yes to everything looked like being helpful. It was mostly a way of avoiding the conversation about priorities.</description>
    </item>
  </channel>
</rss>
