<?xml version="1.0" encoding="UTF-8"?>
<!--
  Static sitemap of stable public pages (storefront, docs, legal).
  NOT included: per-book pages (/listing/:id) — those are dynamic and live in a
  SEPARATE server-generated sitemap at /api/v1/sitemapBooks.xml (emitted by the
  Rust server, also referenced in robots.txt). This file is just the stable
  marketing/docs pages. Expansion pages (/listing/:id/expansion/:n) are
  discovered via in-page links from their parent listing.
  lastmod omitted here rather than fabricated (the dynamic book sitemap emits
  real published_at lastmods).
-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url><loc>https://verhaler.com/</loc></url>
  <!-- /catalog was merged into /discover 2026-08-10 and now 301s there
       (main.rs MOVED_PERMANENTLY). Listing a redirecting URL here would ask
       crawlers to spend budget rediscovering a page they already know. -->
  <url><loc>https://verhaler.com/discover</loc></url>
  <url><loc>https://verhaler.com/get-paid</loc></url>
  <url><loc>https://verhaler.com/contact</loc></url>
  <url><loc>https://verhaler.com/terms</loc></url>
  <url><loc>https://verhaler.com/aup</loc></url>
  <url><loc>https://verhaler.com/privacy</loc></url>
  <!-- Community INDEX only (public latest-activity feed since 2026-07-17);
       thread/category/search subpages are sign-in-walled and robots-blocked. -->
  <url><loc>https://verhaler.com/community</loc></url>
  <!-- Competitions are DARK until the 2026 contest launches
       (COMPETITIONS_ENABLED in main/constants.ts - the route 404s), so the
       index is not listed. When re-adding: INDEX only; the per-competition
       boards (/competitions/:id) are data-driven and change while a contest
       runs, so they are discovered via in-page links rather than listed
       here, and deliberately NOT prerendered either, which would bake in a
       snapshot of an empty board. -->

  <url><loc>https://verhaler.com/docs</loc></url>
  <url><loc>https://verhaler.com/docs/story-flow</loc></url>
  <url><loc>https://verhaler.com/docs/chapters</loc></url>
  <url><loc>https://verhaler.com/docs/glossary-items</loc></url>
  <url><loc>https://verhaler.com/docs/triggers</loc></url>
  <url><loc>https://verhaler.com/docs/canvas</loc></url>
  <url><loc>https://verhaler.com/docs/book-settings</loc></url>
  <url><loc>https://verhaler.com/docs/dynamic-components</loc></url>
  <url><loc>https://verhaler.com/docs/dynamic-components/decisions</loc></url>
  <url><loc>https://verhaler.com/docs/dynamic-components/dice</loc></url>
  <url><loc>https://verhaler.com/docs/dynamic-components/combat</loc></url>
  <url><loc>https://verhaler.com/docs/dynamic-components/trade-screens</loc></url>
  <url><loc>https://verhaler.com/docs/dynamic-components/calculations</loc></url>
  <url><loc>https://verhaler.com/docs/dynamic-components/dialogue</loc></url>
  <url><loc>https://verhaler.com/docs/dynamic-components/backgrounds</loc></url>
  <url><loc>https://verhaler.com/docs/snapshots</loc></url>
  <url><loc>https://verhaler.com/docs/sim-reading</loc></url>
  <url><loc>https://verhaler.com/docs/publishing</loc></url>
  <url><loc>https://verhaler.com/docs/reviews</loc></url>
  <url><loc>https://verhaler.com/docs/earnings</loc></url>
  <url><loc>https://verhaler.com/docs/payout-setup</loc></url>
</urlset>
