<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>johnweek.dev</title>
    <link>https://johnweek.dev</link>
    <atom:link href="https://johnweek.dev/feed.xml" rel="self" type="application/rss+xml" />
    <description>Notes from a software craftsman — auth, ZK, TypeScript, and the long road to mastery.</description>
    <language>en-us</language>
    <managingEditor>hungnguyen18.dev@gmail.com (Nguyen Kim Hung)</managingEditor>
    <lastBuildDate>Tue, 07 Apr 2026 08:56:21 GMT</lastBuildDate>
    <item>
      <title>The Multi-Tab Token Race Condition Nobody Warns You About</title>
      <link>https://johnweek.dev/blog/keycloak-multi-tab-token-race</link>
      <guid isPermaLink="true">https://johnweek.dev/blog/keycloak-multi-tab-token-race</guid>
      <pubDate>Tue, 05 Nov 2024 00:00:00 GMT</pubDate>
      <description>When refresh token rotation meets multiple browser tabs, your users get randomly logged out. Here&apos;s why it happens and three ways to fix it.</description>
    </item>
    <item>
      <title>The Real Blockers When Migrating Nuxt 2 to Nuxt 3</title>
      <link>https://johnweek.dev/blog/nuxt2-to-nuxt3-capacitor</link>
      <guid isPermaLink="true">https://johnweek.dev/blog/nuxt2-to-nuxt3-capacitor</guid>
      <pubDate>Sun, 15 Sep 2024 00:00:00 GMT</pubDate>
      <description>Official docs tell you what changed. They don&apos;t tell you that half your plugins are dead, auth modules don&apos;t exist, and your timeline estimate is wrong by 3x.</description>
    </item>
    <item>
      <title>What Happens When Your Real-Time Dashboard Disconnects</title>
      <link>https://johnweek.dev/blog/websocket-reconnect-healthcare</link>
      <guid isPermaLink="true">https://johnweek.dev/blog/websocket-reconnect-healthcare</guid>
      <pubDate>Thu, 20 Jun 2024 00:00:00 GMT</pubDate>
      <description>In a healthcare dashboard, a missed WebSocket message isn&apos;t just a UI glitch — it&apos;s a missed patient alert. Here&apos;s how we handled reconnection, stale data, and update throttling.</description>
    </item>
  </channel>
</rss>
