<?xml version="1.0" encoding="UTF-8"?>
<!--
  THE SIX PAGES WORTH CRAWLING. Every other .html under apps/web is deliberately absent,
  and the reasons are worth keeping here so the next person does not "fix" the omissions:

    404.html, /search/   - they carry <meta name="robots" content="noindex">. Listing a
                           noindex page in a sitemap is a direct contradiction: the sitemap
                           asks Google to index it and the page tells Google not to.
                           /search/ is also parked (2026-09-15) and redirects to /.
    /about/, /create/,   - redirect stubs. Each is a <meta http-equiv="refresh"> with a
    /episodes/, /learn/,   rel=canonical pointing at its real page, and that real page is
    /learn/what-is-saga/,  already in this file. A sitemap of redirects just spends crawl
    /explore/what-is-saga/ budget arriving somewhere it has already been.
    /program/, /sagajam/
    /notifs/, /me/       - both load signin-gate.js. There is nothing on them for a
                           signed-out crawler, because there is nothing on them for a
                           signed-out person.
    /play/               - same gate. It is the app, not a document.
    /u/                  - excluded for the same reason as /me/ and /notifs/: it loads
                           signin-gate.js and has nothing on it for a signed-out crawler.
                           It IS reachable in its own right (curl returns 200) - the root
                           middleware (functions/_middleware.js, PROFILE_LINK) only
                           rewrites /@<handle> onto it, it does not block direct requests
                           to /u/ itself. The real profile URLs are per-handle and cannot
                           be enumerated from the repo.
    /make/               - public and ungated, but the entire page is "make sagas with
                           wisdom - coming soon". It belongs here the day it does something.

  The /explore/ devlog does NOT get one entry per post: scripts/build-updates.py renders
  every post into explore/index.html and gives it an #anchor permalink, not a URL of its
  own. A URL fragment is not a sitemap entry - Google resolves it to /explore/ anyway.

  lastmod is the real git commit date of each file, not the date this sitemap was written.
  A lastmod that always says "today" is the fastest way to teach a crawler to ignore it.

  No <changefreq> and no <priority> on purpose: Google has ignored both for years. They
  would be two more fields to keep honest for no crawler that reads them.
-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://playingsaga.com/</loc>
    <lastmod>2026-09-17</lastmod>
  </url>
  <url>
    <loc>https://playingsaga.com/what/</loc>
    <lastmod>2026-09-17</lastmod>
  </url>
  <url>
    <loc>https://playingsaga.com/explore/</loc>
    <lastmod>2026-09-16</lastmod>
  </url>
  <url>
    <loc>https://playingsaga.com/creators/</loc>
    <lastmod>2026-09-16</lastmod>
  </url>
  <url>
    <loc>https://playingsaga.com/privacy/</loc>
    <lastmod>2026-09-16</lastmod>
  </url>
  <url>
    <loc>https://playingsaga.com/terms/</loc>
    <lastmod>2026-09-16</lastmod>
  </url>
</urlset>
