<?xml version="1.0" encoding="UTF-8"?>
<!-- The public surfaces for discovery. The /live pages regenerate every request
     (server/routes/live.js), so they're marked hourly.
     The city set here is a COPY. server/lib/liveRegions.js is the original, and
     web/modules/discovery.test.js compares this file, the landing-hero "Live now ·"
     pill and llms.txt against it as SETS, in both directions — so a
     drift fails `npm test` rather than needing to be noticed. (It drifted once
     before that guard existed: this file listed only Bali while the pill listed
     four.) Edit liveRegions.js first, then let the test name what is missing.
     No <lastmod>: it would be a hand-maintained date, and a lastmod that is
     wrong even occasionally is worse than none — Google discounts the signal for
     the whole site. The /live rows could not carry an honest one anyway; they
     regenerate every request. City-level ONLY: one
     /live/<slug> per region, NOT the per-neighborhood /live/<slug>/<hood> pages —
     those still resolve and power the on-page browse chips, we just don't fan the
     sitemap out to locality depth. A launched region's row links a page that 404s
     until `make deploy` ships it, so deploy promptly after launch.
     /privacy is absent on purpose: it is noindex. That page is reachable and
     citable, just not indexed — discovery.test.js asserts this note and the meta
     tag in privacy.html keep saying the same thing, in both directions.
     Every static row here must have a matching Vite build input — sitemapping a
     URL that 404s is a direct quality signal against the whole site — so add a
     row in the SAME commit that adds the page, never in advance.
     discovery.test.js derives that check from this file.
     Clean URLs only — Pages 308-redirects `<name>.html` to the extensionless
     form, so listing the `.html` name here would sitemap a redirect, not a page. -->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url><loc>https://mapf.ai/</loc><changefreq>weekly</changefreq><priority>1.0</priority></url>
  <url><loc>https://mapf.ai/live</loc><changefreq>daily</changefreq><priority>0.9</priority></url>
  <url><loc>https://mapf.ai/live/bali</loc><changefreq>hourly</changefreq><priority>0.8</priority></url>
  <url><loc>https://mapf.ai/live/dubai</loc><changefreq>hourly</changefreq><priority>0.8</priority></url>
  <url><loc>https://mapf.ai/live/hongkong</loc><changefreq>hourly</changefreq><priority>0.8</priority></url>
  <url><loc>https://mapf.ai/live/melbourne</loc><changefreq>hourly</changefreq><priority>0.8</priority></url>
  <url><loc>https://mapf.ai/live/montreal</loc><changefreq>hourly</changefreq><priority>0.8</priority></url>
  <url><loc>https://mapf.ai/live/paris</loc><changefreq>hourly</changefreq><priority>0.8</priority></url>
  <url><loc>https://mapf.ai/live/sanfrancisco</loc><changefreq>hourly</changefreq><priority>0.8</priority></url>
  <url><loc>https://mapf.ai/live/siliconvalley</loc><changefreq>hourly</changefreq><priority>0.8</priority></url>
</urlset>
