Building FoxyInvoice — Chapter 11: Reach — SEO, AI crawlers, and being the machine-readable answer A developer building the FoxyInvoice invoicing app documented a distribution stack that serves crawler-ready static HTML for its Angular SPA, publishes an llms.txt file for AI answer engines, and pushes sitemap updates via IndexNow. The build-time prerendering script generates per-route titles and meta descriptions, while robots.txt allowlists public routes and edge proxy headers enforce noindex on private ones. Access logs analyzed by a script confirmed search crawlers reading robots.txt and template pages within days of launch. This series is written in the open, from a real production system. This chapter is the reach stack: prerendering, robots.txt, llms.txt, IndexNow, and measuring it all with access logs. All chapters and diagrams live in the public repo. Somewhere between "launched" and "learned people exist," every product discovers distribution. Ours arrived with a twist that defines this chapter: half your future traffic now arrives via machines that never render your app — search crawlers that mostly cope, and AI answer The FoxyInvoice app is an Angular SPA: the server ships an empty shell and JavaScript builds the page. Human browsers: fine. Googlebot: tolerant, eventually. AI crawlers: blind. Fetch the marketing page with curl — which is exactly what a crawler does — and you got: