<?xml version="1.0" encoding="UTF-8"?>
<!--
  Routes are drawn from the client-side router's ROUTE_PATHS table in
  _deploy/index.html (read-only reference, not edited by this file) plus the
  static files under _deploy/blog/. Only routes that render for a
  signed-out visitor are listed. Excluded on purpose:
    - /login, /verify: functional auth screens, not content to index.
    - /watchlist, /journal, /portfolio, /account, /moderation: require a
      session; a signed-out hit is a login wall, not a page worth ranking.
    - /feed, /discover, /themes: could not confirm from the router code
      whether these render meaningful content without a session, so they
      are left out rather than guessed at.
    - /methodology/layer: takes a sub-path argument with no single canonical
      URL, the same reason /company/{ticker} and /etf/{ticker} are excluded.
    - /company/{ticker}, /etf/{ticker}: report detail pages, gated.
  <lastmod> is included only where a real date could be sourced (git history
  for the blog posts, which are static files with their own commit log).
  The SPA routes below share a single index.html whose git history reflects
  unrelated edits across the whole document, not a per-route publish date,
  so no <lastmod> is given for them rather than implying one that isn't real.
-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://www.aperto.dev/</loc>
  </url>
  <url>
    <loc>https://www.aperto.dev/pricing</loc>
  </url>
  <url>
    <loc>https://www.aperto.dev/methodology</loc>
  </url>
  <url>
    <loc>https://www.aperto.dev/privacy</loc>
  </url>
  <url>
    <loc>https://www.aperto.dev/terms</loc>
  </url>
  <url>
    <loc>https://www.aperto.dev/blog/</loc>
    <lastmod>2026-08-20</lastmod>
  </url>
  <url>
    <loc>https://www.aperto.dev/blog/what-margin-of-safety-really-means/</loc>
    <lastmod>2026-08-20</lastmod>
  </url>
  <url>
    <loc>https://www.aperto.dev/blog/why-invest-in-this-business/</loc>
    <lastmod>2026-08-20</lastmod>
  </url>
  <url>
    <loc>https://www.aperto.dev/blog/why-the-model-refuses-to-guess/</loc>
    <lastmod>2026-08-20</lastmod>
  </url>
</urlset>
