<?xml version="1.0" encoding="UTF-8"?>
<!--
  The four pages a crawler should have. Everything else on this site is
  deliberately absent, and each omission is a decision:

    /e/:id, /i/:username   per-link cards, and they carry <meta name="robots"
                           content="noindex"> for the reason written in
                           api/card.ts — a personal invite is not a search
                           result, and neither is somebody's echo. Listing them
                           would also be impossible: they are unbounded and
                           user-generated.
    /moderate, /insights   internal tools. Already Disallow'd in robots.txt.
    404                    noindex.

  Hosts are the APEX, matching <link rel="canonical"> and og:url everywhere
  else. The apex currently answers 308 to www, so a crawler follows one
  redirect; it becomes exact the moment the apex is made Vercel's Primary
  domain, which is the pending Day 1 item.

  ⚠️ NO <lastmod>, ON PURPOSE. The only honest date for the three legal pages is
  LEGAL.effectiveDate in src/data/legal/shared.ts, and hard-coding it here makes
  a FOURTH copy of a string that already has to stay in step across the website,
  lib/constants.ts and current_terms_version() in the database. That kind of
  copy is exactly what went wrong with TERMS_VERSION. A missing lastmod reads as
  "unknown", which is true; a stale one is a lie a crawler will believe.

  <changefreq> and <priority> are omitted because Google ignores both.
-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://echoframe.help/</loc>
  </url>
  <url>
    <loc>https://echoframe.help/privacy</loc>
  </url>
  <url>
    <loc>https://echoframe.help/terms</loc>
  </url>
  <url>
    <loc>https://echoframe.help/compliance</loc>
  </url>
</urlset>
