<?xml version="1.0" encoding="UTF-8"?>
<!--
  Teastra Estimator sitemap — checked in 2026-08-30.

  This replaces the build-time @netlify/plugin-sitemap entry that used to sit
  in netlify.toml. That plugin walks the PUBLISH DIRECTORY for HTML files,
  which was the wrong tool for a single-page app: `dist` held index.html and
  offline.html and nothing else, so the generated sitemap advertised exactly
  two URLs — `/` and `/offline` — under a stale host, while every real public
  page was a client route with no file on disk for it to find.

  DO NOT RE-ADD THAT PLUGIN NOW THAT dist HAS PER-ROUTE FILES.
  tools/emit-public-html.mts writes dist/pricing.html and friends so that
  scrapers which do not run JavaScript see the right title, description and
  canonical. A directory-walking plugin would therefore now FIND those pages —
  and that is the trap. It writes dist/sitemap.xml in onPostBuild, overwriting
  this checked-in file; it would drop the lastmod and priority values below;
  and it would list every emitted file, including the /pricing.html form that
  the canonical tags exist to point away from. This file stays hand-kept.

  RULES FOR EDITING THIS FILE.
   • Host is https://estimator.teastra.com. One product, one domain — the .ie
     host 301s here at the edge (public/_redirects).
   • PUBLIC pages only. Never list /projects, /admin, /login, /register,
     /forgot-password, /reset-password, /logout or /offline — robots.txt
     disallows most of those, and a sitemap that contradicts robots.txt is a
     crawl error, not a hint.
   • /llms.txt is the one static file this list may name. It is not a route
     in App.tsx; robots.txt Allows it. List that exact path (absolute HTTPS,
     no .html twin). Do not add other files.
   • Add a route here in the same commit that adds it to src/App.tsx, or this
     file quietly goes stale again. If the route is public, add it to
     PUBLIC_PAGE_META (src/lib/publicPageMeta.ts) in that same commit too, so
     it gets a title, a description and a canonical rather than inheriting the
     landing page's.
   • List the slash-free form (/pricing, not /pricing.html and not /pricing/).
     The clean path is served as a file, with no redirect of its own. The
     .html twin 301s to it at the edge (public/_redirects). Do not list
     the twin, and do not add a trailing-slash rule: Netlify treats
     /pricing/ and /pricing as the same match, which is the #589 loop.
   • lastmod is the git date of THAT page's own source. It is not the day
     this file was edited, and it is not the day a shared file changed.
     index.html is copied into every emitted page, so a skip link or an
     Open Graph tweak there used to move every date at once. That stamped
     one day onto pages that had not changed. Do not do that again.
     If you cannot point at a commit for the page, omit lastmod. Do not
     invent a date, and do not add changefreq: there is no publishing
     schedule, so daily or weekly would be a guess.
   • priority is a quiet hint inside this file only. Home 1.0, pricing and
     demo 0.8, the live demo 0.6, FAQ, the comparison, the answer pages and
     the help pages 0.5, the legal pages 0.4, /llms.txt 0.3. Do not raise
     them.

  Where the dates below were read from:
    /            index.html                    2026-09-26
    /pricing     src/pages/Pricing.tsx         2026-10-16
                 (links the comparison page that day)
    /demo        src/pages/Demo.tsx            2026-09-26
    /preview-v2  src/pages/PreviewV2.tsx       2026-09-25
    /terms       the crawlable terms page      2026-09-26
                 (src/content/legal.ts is 2026-09-25; the URL stopped
                 repeating the homepage that day, which is the later change)
    /privacy     the crawlable privacy page    2026-09-26
                 (src/content/privacy.ts is 2026-09-25; same reason)
    /security    src/content/security.ts       2026-10-16
                 (TJ-70 rewrite that day)
    /faq         src/content/faq.ts            2026-10-16
                 (the comparison question that day)
    /compare     src/content/compare.ts        2026-10-16
    /answers and the six answer pages
                 src/content/answers.ts        2026-10-16
    /help and the six help pages
                 src/content/help.ts           2026-10-16
    /llms.txt    public/llms.txt               2026-10-16
-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://estimator.teastra.com/</loc>
    <lastmod>2026-09-26</lastmod>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://estimator.teastra.com/pricing</loc>
    <lastmod>2026-10-16</lastmod>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://estimator.teastra.com/demo</loc>
    <lastmod>2026-09-26</lastmod>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://estimator.teastra.com/preview-v2</loc>
    <lastmod>2026-09-25</lastmod>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://estimator.teastra.com/terms</loc>
    <lastmod>2026-09-26</lastmod>
    <priority>0.4</priority>
  </url>
  <url>
    <loc>https://estimator.teastra.com/privacy</loc>
    <lastmod>2026-09-26</lastmod>
    <priority>0.4</priority>
  </url>
  <url>
    <loc>https://estimator.teastra.com/security</loc>
    <lastmod>2026-10-16</lastmod>
    <priority>0.4</priority>
  </url>
  <url>
    <loc>https://estimator.teastra.com/faq</loc>
    <lastmod>2026-10-16</lastmod>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://estimator.teastra.com/compare</loc>
    <lastmod>2026-10-16</lastmod>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://estimator.teastra.com/answers</loc>
    <lastmod>2026-10-16</lastmod>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://estimator.teastra.com/answers/ai-ductwork-takeoff</loc>
    <lastmod>2026-10-16</lastmod>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://estimator.teastra.com/answers/ai-pipe-insulation-takeoff</loc>
    <lastmod>2026-10-16</lastmod>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://estimator.teastra.com/answers/fittings-and-bends</loc>
    <lastmod>2026-10-16</lastmod>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://estimator.teastra.com/answers/dw144-duct-sizes</loc>
    <lastmod>2026-10-16</lastmod>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://estimator.teastra.com/answers/export-to-excel</loc>
    <lastmod>2026-10-16</lastmod>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://estimator.teastra.com/answers/generic-ai-measuring-tools</loc>
    <lastmod>2026-10-16</lastmod>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://estimator.teastra.com/help</loc>
    <lastmod>2026-10-16</lastmod>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://estimator.teastra.com/help/upload-a-drawing</loc>
    <lastmod>2026-10-16</lastmod>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://estimator.teastra.com/help/run-and-review-a-take-off</loc>
    <lastmod>2026-10-16</lastmod>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://estimator.teastra.com/help/export-to-excel</loc>
    <lastmod>2026-10-16</lastmod>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://estimator.teastra.com/help/credits-and-top-ups</loc>
    <lastmod>2026-10-16</lastmod>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://estimator.teastra.com/help/account-and-deletion</loc>
    <lastmod>2026-10-16</lastmod>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://estimator.teastra.com/help/contact-support</loc>
    <lastmod>2026-10-16</lastmod>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://estimator.teastra.com/llms.txt</loc>
    <lastmod>2026-10-16</lastmod>
    <priority>0.3</priority>
  </url>
</urlset>
