<?xml version="1.0" encoding="UTF-8"?>
<!--
  Host-root pages. The child sitemap for the URLs that live at the top level of
  ed.icivics.org and belong to no path-mounted app's base path.

  It has to live here at the root rather than under an app, because a sitemap may
  only list URLs at or below its own directory. /resources/sitemap.xml cannot
  carry '/', and a sitemap at /signup/sitemap.xml could not carry '/signup'
  either - that URL sits one level above it. See docs/adr/0011.

  / and /students/ carry trailing slashes because next.config.mjs sets
  trailingSlash: true, so those are the URLs the export actually writes and the
  ones Next's own metadata points at. /signup has none: it is not a Next export
  but a path-mounted SPA behind an exact-match CloudFront behavior, and the
  trailing-slash form deliberately falls through to /signup* and keeps its
  noindex header. registration/index.html points rel=canonical at the form here.

  /signup's three role routes (/signup/teacher, /student, /parent) are absent on
  purpose. They are client-side routes off one static index.html and serve
  byte-identical HTML with the same title and description, so listing them would
  submit three duplicates of /signup. They qualify once registration grows a
  prerender step, not before.

  Nothing else on this host belongs here. /login, /user, /webquest, /dbquest,
  /game-player, /avatar, /forgot-password and /reset-password all serve a
  client-rendered shell under 3KB with no h1, and all carry a noindex response
  header from the CDN.

  MinTTL on the /sitemap*.xml behavior is 86400. The deploy pipeline already
  invalidates /*, so a normal deploy carries a change here. A hand-edit in S3
  needs an explicit CloudFront invalidation of the /sitemap*.xml path.
-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url><loc>https://ed.icivics.org/</loc></url>
  <url><loc>https://ed.icivics.org/students/</loc></url>
  <url><loc>https://ed.icivics.org/signup</loc></url>
</urlset>
