<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Hamza Arya — Notes</title>
    <link>https://hamzaarya.com/</link>
    <description>Short technical writing by Hamza Arya.</description>
    <language>en</language>
    <atom:link href="https://hamzaarya.com/feed.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>Tokens, not restyles</title>
      <link>https://hamzaarya.com/notes/tokens-not-restyles</link>
      <guid isPermaLink="true">https://hamzaarya.com/notes/tokens-not-restyles</guid>
      <pubDate>Sun, 09 Aug 2026 00:00:00 GMT</pubDate>
      <category>Design systems / CSS</category>
      <description>One spread of this site is bone-white on black. No component knows it is being inverted, and that is the whole trick.</description>
    </item>
    <item>
      <title>The cursor never enters React state</title>
      <link>https://hamzaarya.com/notes/cursor-never-enters-react-state</link>
      <guid isPermaLink="true">https://hamzaarya.com/notes/cursor-never-enters-react-state</guid>
      <pubDate>Tue, 28 Jul 2026 00:00:00 GMT</pubDate>
      <category>Performance / Interface</category>
      <description>A custom cursor updates at pointer rate. Routing that through useState re-renders the tree sixty times a second to move one div.</description>
    </item>
    <item>
      <title>One scroll loop</title>
      <link>https://hamzaarya.com/notes/one-scroll-loop</link>
      <guid isPermaLink="true">https://hamzaarya.com/notes/one-scroll-loop</guid>
      <pubDate>Tue, 14 Jul 2026 00:00:00 GMT</pubDate>
      <category>Motion / Architecture</category>
      <description>Lenis and ScrollTrigger each want to own the frame. Letting both have it is how you get a page that reads its own position one frame late.</description>
    </item>
  </channel>
</rss>
