<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Pramith Chathuranga — Blog</title>
    <link>https://pramithdev.com/blog</link>
    <description>Notes on front-end engineering — React, Next.js, Tailwind CSS, design systems, performance and UX.</description>
    <language>en-us</language>
    <item>
      <title>Next.js App Router patterns that actually stuck</title>
      <link>https://pramithdev.com/blog/app-router-patterns-that-stuck</link>
      <guid>https://pramithdev.com/blog/app-router-patterns-that-stuck</guid>
      <pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate>
      <description>Years of App Router work, distilled: server-first pages, colocation, and knowing when a client component earns its keep.</description>
    </item>
    <item>
      <title>Design tokens in Tailwind CSS v4: one @theme to rule your UI</title>
      <link>https://pramithdev.com/blog/design-tokens-tailwind-v4</link>
      <guid>https://pramithdev.com/blog/design-tokens-tailwind-v4</guid>
      <pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate>
      <description>Tailwind v4 moves your design system into CSS itself. Semantic tokens, a dark-first contrast budget, and why fewer names beat more utilities.</description>
    </item>
    <item>
      <title>Motion that respects the user: reveals, reduced motion, and LCP</title>
      <link>https://pramithdev.com/blog/motion-that-respects-the-user</link>
      <guid>https://pramithdev.com/blog/motion-that-respects-the-user</guid>
      <pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate>
      <description>Scroll reveals are cheap to add and expensive to get wrong. How to animate with intent — without breaking accessibility or your Core Web Vitals.</description>
    </item>
  </channel>
</rss>