<?xml version="1.0" encoding="UTF-8"?>
<!--
  Manage Your Means — sitemap.

  Only two kinds of URL belong here: the documents served as real HTML, and the app routes that
  genuinely work with no account (the calculators and the legal pages). Everything else is
  per-user, needs a sign-in, and would be an empty result for anyone following this file.

  EVERY URL LISTED HERE IS NOW REAL HTML, and each entry says below how it is produced. That was
  not true until 2026-09-03: for most of this file's life only four of these URLs returned anything
  to a crawler that does not execute WebAssembly, and the rest returned the app's loading spinner.
  Three ways of serving a page are now in play, and the marker comments are the record:

    static      — hand-authored HTML. landing.html and the three guides under wwwroot/guides/.
    prerendered — a Razor page captured from a running browser at publish time, whole, app chrome
                  and boot scripts included, because the runtime is what makes the page work.
    prose       — the same capture with the page's own content lifted out of the app layout and
                  rendered in the guides' shell, for pages that need no runtime at all. ~140 KB
                  instead of ~8.2 MB.

  All of it is wired in Api/Program.cs (the fallbacks), azure-pipelines.yml (the two route lists)
  and tools/prerender/. PrerenderedRoutingTests fails the build if this file and those lists
  disagree about what is public. Deep dive: .claude/rules/landing-and-seo.md.

  PRIORITY DOES NOT ENCODE ANY OF THAT, and a comment here claimed it encoded renderability until
  2026-08-31. The priorities are an editorial ordering of what is worth crawling, they predate the
  guides becoming static, and Google ignores the field anyway. Left as they are rather than
  reshuffled to carry a meaning the format does not really have.

  LASTMOD IS THE DATE THE PAGE'S OWN SOURCE LAST CHANGED — the .razor file, or the .html for a
  static one, whichever produces the page. Taking it from the file's last commit is what makes it
  checkable rather than remembered; the exact git command is in .claude/rules/landing-and-seo.md,
  because an XML comment cannot contain a double hyphen, so it cannot quote a command with flags
  in it. (That is not a hypothetical: writing it here made this file unparseable, and every test
  that reads it reads it as text, so nothing noticed until it was parsed as XML.)

  Refreshed against that on 2026-09-03, when every entry but three still read 2026-08-17. Two
  cross-checks that agreed: Privacy.razor says "Last updated: 1 September 2026" and its file date is
  2026-09-01; Terms.razor says 19 August and its file date is 2026-08-19.

  **Do not move these dates because the delivery changed.** Prerendering altered what a crawler
  receives for nine of these URLs on 2026-09-03, but not a word of any of them — so none of them
  carries that date. A lastmod that moves for a build is a lastmod crawlers learn to ignore, and
  the recrawl happens anyway: every entry below is newer than the value it replaced.
-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

  <!-- static: landing.html -->
  <url>
    <loc>https://manageyourmeans.com/</loc>
    <lastmod>2026-08-31</lastmod>
    <changefreq>monthly</changefreq>
    <priority>1.0</priority>
  </url>

  <!-- Free calculators — the pages most likely to answer a search on their own. -->
  <!-- prerendered: Pages/Finance/FinanceTools.razor -->
  <url>
    <loc>https://manageyourmeans.com/finance/tools</loc>
    <lastmod>2026-08-28</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <!-- prose: Pages/Tools/ToolsIndexPage.razor — the index for the six routes below. -->
  <url>
    <loc>https://manageyourmeans.com/tools</loc>
    <lastmod>2026-09-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <!-- One calculator, one URL — split out of the two tools hubs on 2026-09-06/07 so each page
       answers a single search rather than six. Both hubs stay and link here. -->
  <!-- prerendered: Pages/Tools/CompoundInterestPage.razor -->
  <url>
    <loc>https://manageyourmeans.com/tools/compound-interest</loc>
    <lastmod>2026-09-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <!-- prerendered: Pages/Tools/EmergencyFundPage.razor -->
  <url>
    <loc>https://manageyourmeans.com/tools/emergency-fund</loc>
    <lastmod>2026-09-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <!-- prerendered: Pages/Tools/FiftyThirtyTwentyPage.razor -->
  <url>
    <loc>https://manageyourmeans.com/tools/50-30-20-budget</loc>
    <lastmod>2026-09-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <!-- prerendered: Pages/Tools/InflationCalculatorPage.razor -->
  <url>
    <loc>https://manageyourmeans.com/tools/inflation-calculator</loc>
    <lastmod>2026-09-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <!-- prerendered: Pages/Tools/RentVsBuyPage.razor -->
  <url>
    <loc>https://manageyourmeans.com/tools/rent-vs-buy</loc>
    <lastmod>2026-09-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <!-- prerendered: Pages/Tools/LoanAmortizationPage.razor -->
  <url>
    <loc>https://manageyourmeans.com/tools/loan-amortization</loc>
    <lastmod>2026-09-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <!-- prerendered: Pages/Debt/DebtTools.razor -->
  <url>
    <loc>https://manageyourmeans.com/debt/tools</loc>
    <lastmod>2026-08-20</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <!-- prerendered: Pages/Retirement/RetirementTools.razor -->
  <url>
    <loc>https://manageyourmeans.com/retirement/planning</loc>
    <lastmod>2026-08-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>

  <!-- Education, also open without an account. -->
  <!-- static: guides/finance-education.html -->
  <url>
    <loc>https://manageyourmeans.com/finance/education</loc>
    <lastmod>2026-08-31</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <!-- static: guides/debt-education.html -->
  <url>
    <loc>https://manageyourmeans.com/debt/education</loc>
    <lastmod>2026-08-31</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <!-- prerendered: Pages/Retirement/RetirementEducation.razor -->
  <url>
    <loc>https://manageyourmeans.com/retirement/education</loc>
    <lastmod>2026-08-31</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>
  <!-- prerendered: Pages/Community/Literacy.razor -->
  <url>
    <loc>https://manageyourmeans.com/community/literacy</loc>
    <lastmod>2026-08-30</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.5</priority>
  </url>
  <!-- prerendered: Pages/Community/Forums.razor -->
  <url>
    <loc>https://manageyourmeans.com/community/peer-support</loc>
    <lastmod>2026-08-22</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.4</priority>
  </url>
  <!-- static: guides/giving.html -->
  <url>
    <loc>https://manageyourmeans.com/community/giving</loc>
    <lastmod>2026-09-07</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>

  <!-- Who runs the site and how every figure is derived. Served in prose mode: it is a page a
       search result is likely to be the entry point for, and it needs no runtime. -->
  <!-- prose: Pages/About.razor -->
  <url>
    <loc>https://manageyourmeans.com/about</loc>
    <lastmod>2026-09-06</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>

  <!-- Legal. Low priority, but a site that hides them reads as a site with something to hide.
       All three are served in prose mode: they are the pages a search result is most likely to be
       the entry point for, and the ones with least reason to hand anyone a runtime. -->
  <!-- prose: Pages/Privacy.razor -->
  <url>
    <loc>https://manageyourmeans.com/privacy</loc>
    <lastmod>2026-09-01</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <!-- prose: Pages/Terms.razor -->
  <url>
    <loc>https://manageyourmeans.com/terms</loc>
    <lastmod>2026-08-19</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <!-- prose: Pages/Disclaimer.razor -->
  <url>
    <loc>https://manageyourmeans.com/disclaimer</loc>
    <lastmod>2026-08-19</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>
  <!-- prose: Pages/DeleteAccount.razor. Public on purpose and not only for crawlers: this is the
       URL given to the Play Console's Data safety form and App Store Connect, both of which want
       an account-deletion page reachable without signing in. -->
  <url>
    <loc>https://manageyourmeans.com/delete-account</loc>
    <lastmod>2026-09-05</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.3</priority>
  </url>

</urlset>
