<?xml version="1.0" encoding="UTF-8"?>
<!-- ShinsakuOS sitemap. Every path here is a route js/router.js can restore and
     vercel.json rewrites to index.html.

     <lastmod> appears ONLY on the essays, where it is real: it is copied from that
     article's `iso` field in js/articles.js. The app routes carry no lastmod because
     nothing would ever update it, and Google ignores the field site-wide once it
     catches you inventing it. <changefreq>/<priority> are omitted for the same
     reason — no major engine reads them.

     ✎ EDIT — this file mirrors the registries by hand. Add an article,
     a case study or a game and you must add its <url> here too. -->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

  <!-- app routes — one per window, mirrored in ROUTES (js/router.js) and the vercel.json rewrite -->
  <url><loc>https://shinsaku.pro/</loc></url>
  <url><loc>https://shinsaku.pro/about</loc></url>
  <url><loc>https://shinsaku.pro/articles</loc></url>
  <url><loc>https://shinsaku.pro/cases</loc></url>
  <url><loc>https://shinsaku.pro/skills</loc></url>
  <url><loc>https://shinsaku.pro/arcade</loc></url>
  <url><loc>https://shinsaku.pro/guide</loc></url>
  <url><loc>https://shinsaku.pro/playground</loc></url>
  <url><loc>https://shinsaku.pro/terminal</loc></url>

  <!-- essays — one entry per item in js/articles.js, lastmod copied from its `iso` field -->
  <url>
    <loc>https://shinsaku.pro/articles/mcp-server-internal-api-design</loc>
    <lastmod>2026-07-29</lastmod>
  </url>
  <url>
    <loc>https://shinsaku.pro/articles/cross-document-view-transitions</loc>
    <lastmod>2026-07-16</lastmod>
  </url>
  <url>
    <loc>https://shinsaku.pro/articles/coding-agents-verification-harness</loc>
    <lastmod>2026-06-24</lastmod>
  </url>
  <url>
    <loc>https://shinsaku.pro/articles/adaptive-rag-query-routing</loc>
    <lastmod>2026-05-21</lastmod>
  </url>
  <url>
    <loc>https://shinsaku.pro/articles/postgres-queue-vs-kafka</loc>
    <lastmod>2026-04-25</lastmod>
  </url>
  <url>
    <loc>https://shinsaku.pro/articles/durable-execution-field-guide</loc>
    <lastmod>2026-04-02</lastmod>
  </url>
  <url>
    <loc>https://shinsaku.pro/articles/signals-vs-react-compiler</loc>
    <lastmod>2026-03-11</lastmod>
  </url>
  <url>
    <loc>https://shinsaku.pro/articles/bun-production-backend-reality</loc>
    <lastmod>2026-01-27</lastmod>
  </url>
  <url>
    <loc>https://shinsaku.pro/articles/edge-runtime-playbook</loc>
    <lastmod>2026-01-15</lastmod>
  </url>
  <url>
    <loc>https://shinsaku.pro/articles/nextjs-16-cache-components</loc>
    <lastmod>2025-12-08</lastmod>
  </url>
  <url>
    <loc>https://shinsaku.pro/articles/streaming-structured-outputs</loc>
    <lastmod>2025-04-11</lastmod>
  </url>
  <url>
    <loc>https://shinsaku.pro/articles/islands-vs-rsc-decision</loc>
    <lastmod>2025-02-06</lastmod>
  </url>
  <url>
    <loc>https://shinsaku.pro/articles/use-client-boundary-architecture</loc>
    <lastmod>2024-06-05</lastmod>
  </url>
  <url>
    <loc>https://shinsaku.pro/articles/grpc-trpc-rest-decision-boundary</loc>
    <lastmod>2023-05-11</lastmod>
  </url>
  <url>
    <loc>https://shinsaku.pro/articles/useeffect-is-synchronization</loc>
    <lastmod>2022-10-17</lastmod>
  </url>
  <url>
    <loc>https://shinsaku.pro/articles/sessions-vs-jwt-revocation</loc>
    <lastmod>2022-04-08</lastmod>
  </url>
  <url>
    <loc>https://shinsaku.pro/articles/logs-metrics-traces-cardinality</loc>
    <lastmod>2021-11-13</lastmod>
  </url>
  <url>
    <loc>https://shinsaku.pro/articles/index-design-query-plans</loc>
    <lastmod>2021-03-21</lastmod>
  </url>
  <url>
    <loc>https://shinsaku.pro/articles/cache-invalidation-failure-modes</loc>
    <lastmod>2020-02-11</lastmod>
  </url>

  <!-- worked design problems — js/casestudies.js CASES -->
  <url><loc>https://shinsaku.pro/cases/url-shortener</loc></url>
  <url><loc>https://shinsaku.pro/cases/payment-webhooks</loc></url>
  <url><loc>https://shinsaku.pro/cases/notification-fanout</loc></url>
  <url><loc>https://shinsaku.pro/cases/collab-editor</loc></url>

  <!-- arcade — js/games.js GAMES -->
  <url><loc>https://shinsaku.pro/arcade/chess</loc></url>
  <url><loc>https://shinsaku.pro/arcade/nami</loc></url>
  <url><loc>https://shinsaku.pro/arcade/sudoku</loc></url>
  <url><loc>https://shinsaku.pro/arcade/minesweeper</loc></url>

  <!-- guide — js/guide.js PANELS -->
  <url><loc>https://shinsaku.pro/guide/read</loc></url>
  <url><loc>https://shinsaku.pro/guide/tour</loc></url>
</urlset>
