<?xml version="1.0" encoding="UTF-8"?>
<!-- KidBD. Nexus V22 / Kavalsia Inc.
     Eight URLs, and eight is the whole public site: the landing page, the
     three legal pages, the blog hub and its three articles. Every other page
     either carries a party in its fragment or is a retired forwarder; all of
     them are noindex and are named in robots.txt. A page added here that is
     not also indexable in its own head is a contradiction a crawler resolves
     against us. lastmod is the day the page's content actually changed, not
     the day this file was touched.

     The blog hub is listed as the directory, `/blog/`, which is the spelling
     its own canonical declares; `/blog/index.html` is the same resource and
     appears nowhere, because two spellings of one page in a sitemap is the
     duplicate a crawler has to resolve on its own.

     NO `.html` APPEARS IN ANY loc, AND THAT IS NOT STYLE. Cloudflare Pages
     answers every `/x.html` with a 308 to `/x`. Listed with the extension,
     six of these eight URLs were redirects rather than pages, and each of the
     six ALSO declared a canonical pointing back at its own `.html` - so a
     crawler was sent to a redirect, followed it, and was told by the page it
     landed on that the real address was the redirect it had just left. Shipped
     2026-09-21 and caught over the wire the same hour, because the local
     harness serves `.html` directly and can never reproduce the 308.
     A loc, a canonical, an og:url and every JSON-LD @id now use the one
     extensionless spelling the host actually returns 200 for.
     tools/blog-proof.mjs section 9 fails the build if an absolute
     https://kidbd.app/... claim ever ends in `.html` again. -->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://kidbd.app/</loc>
    <lastmod>2026-09-20</lastmod>
    <changefreq>weekly</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://kidbd.app/blog/</loc>
    <lastmod>2026-09-21</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://kidbd.app/blog/kids-birthday-party-checklist</loc>
    <lastmod>2026-09-21</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://kidbd.app/blog/birthday-party-games-for-kids</loc>
    <lastmod>2026-09-21</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://kidbd.app/blog/birthday-scavenger-hunt-ideas</loc>
    <lastmod>2026-09-21</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://kidbd.app/privacy</loc>
    <lastmod>2026-09-20</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://kidbd.app/terms</loc>
    <lastmod>2026-09-20</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <url>
    <loc>https://kidbd.app/refund</loc>
    <lastmod>2026-09-20</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
</urlset>
