chore: gitignore stale committed sitemap_www.xml and ui-library llms.txt (#45289)

## Why

Two auto-generated files have been tracked in git but the committed
copies are stale because every Vercel deploy overrides them in the build
artifact. Both have misled at least one investigation into thinking
production was out of date.

| File | Generator | Live (prod) | Committed (master) |
|---|---|---|---|
| `apps/www/public/sitemap_www.xml` | `pnpm postbuild` ->
`internals/generate-sitemap.mjs` | 704 URLs, `last-modified` matches
latest deploy | 604 URLs, last touched 2025-09-30 (`cb66b6b6`) |
| `apps/ui-library/public/llms.txt` | `pnpm build:llms` ->
`scripts/build-llms-txt.ts` (wired into `build`) | 57 entries, `Last
updated: 2026-04-27` | 56 entries, `Last updated: 2026-02-20` (last
touched 2026-03-17, `9bf981f3`) |

Production has been correct the whole time. The git copies just look
authoritative when they aren't, and they show up in audits and code
searches as if they were the live data.

The same gitignore pattern is already applied to
`apps/www/public/sitemap.xml` at `apps/www/.gitignore:29` — this PR
extends the pattern to two more files that should never have been
committed.

Discovered while investigating AI-bot crawl optimization for
`supabase.com/llms-full.txt`. An audit initially flagged "sitemap is
stale, missing 44 blog posts" — that turned out to be entirely about
reading the dead git file. Same kind of false signal would happen for
anyone inspecting the ui-library llms.txt locally.

## What changes

**`apps/www`:**
- Add `public/sitemap_www.xml` to `apps/www/.gitignore`.
- `git rm --cached apps/www/public/sitemap_www.xml`.
- Updated the gitignore comment to mention the regeneration path.

**`apps/ui-library`:**
- Add `public/llms.txt` to `apps/ui-library/.gitignore` (with a comment
pointing at the generator).
- `git rm --cached apps/ui-library/public/llms.txt`.

Both files remain on disk locally; their respective build steps
regenerate them as before.

## What does NOT change

- Production behavior for either file: postbuild / build:llms remain
authoritative.
- Generator code: `apps/www/internals/generate-sitemap.mjs` and
`apps/ui-library/scripts/build-llms-txt.ts` are untouched.
- robots.txt, sitemap index, docs sitemap: unchanged.
- `apps/learn/public/llms.txt`: left tracked. Its generator
(`apps/learn/scripts/build-llms-txt.ts`) is **not** wired into the
`build` script, so it's manually generated and committed — different
pattern, leave alone.

## Test plan

- [ ] After merge, trigger or wait for next prod deploy. Confirm
`https://supabase.com/sitemap_www.xml` still serves a fresh ~700-URL
response with current `last-modified` header.
- [ ] Confirm `https://supabase.com/ui/llms.txt` still serves a fresh
response with `Last updated:` matching the deploy date.
- [ ] Confirm `git ls-files apps/www/public/ apps/ui-library/public/` no
longer lists either file.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Chores**
* Improved handling of auto-generated sitemap files so they are no
longer tracked in the repo after builds.
* **Documentation**
* Removed the published auto-generated LLMs reference page from the UI
library to avoid shipping stale documentation.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
Pamela Chia authored and GitHub committed 2026-04-28 16:42:41 +09:00
1 parent d409836ca7
commit 99447cdcbe
4 files changed
+6 -3749

No files matched your search

+4 -1
View File
@@ -35,4 +35,7 @@ yarn-error.log*
*.tsbuildinfo
next-env.d.ts
.contentlayer
.contentlayer
# Auto-generated on every Vercel build by `pnpm build:llms` -> scripts/build-llms-txt.ts
public/llms.txt
-119
View File
@@ -1,119 +0,0 @@
# Supabase UI Library
Last updated: 2026-02-20T06:13:03.281Z
## Overview
Library of components for your project. The components integrate with Supabase and are shadcn compatible.
## Docs
- [Prompts](https://supabase.com/ui/docs/ai-editors-rules/prompts)
- Rules for AI Code Editors for Supabase
- [FAQ](https://supabase.com/ui/docs/getting-started/faq)
- Frequently asked questions
- [Introduction](https://supabase.com/ui/docs/getting-started/introduction)
- A flexible, open-source, React-based UI component library built on shadcn/ui, designed to simplify Supabase-powered projects with pre-built Auth, Storage, and Realtime features.
- [Quick Start](https://supabase.com/ui/docs/getting-started/quickstart)
- Install shadcn/ui and use the components in your project
- [Infinite Query Hook](https://supabase.com/ui/docs/infinite-query-hook)
- React hook for infinite lists, fetching data from Supabase.
- [Supabase Client Libraries](https://supabase.com/ui/docs/nextjs/client)
- Supabase client for Next.js
- [Current User Avatar](https://supabase.com/ui/docs/nextjs/current-user-avatar)
- Supabase Auth-aware avatar
- [Dropzone (File Upload)](https://supabase.com/ui/docs/nextjs/dropzone)
- Displays a control for easier uploading of files directly to Supabase Storage
- [Password-based Authentication](https://supabase.com/ui/docs/nextjs/password-based-auth)
- Password-based authentication block for Next.js
- [Realtime Avatar Stack](https://supabase.com/ui/docs/nextjs/realtime-avatar-stack)
- Avatar stack in realtime
- [Realtime Chat](https://supabase.com/ui/docs/nextjs/realtime-chat)
- Real-time chat component for collaborative applications
- [Realtime Cursor](https://supabase.com/ui/docs/nextjs/realtime-cursor)
- Real-time cursor sharing for collaborative applications
- [Realtime Monaco](https://supabase.com/ui/docs/nextjs/realtime-monaco)
- Real-time Monaco editor for collaborative applications
- [Social Authentication](https://supabase.com/ui/docs/nextjs/social-auth)
- Social authentication block for Next.js
- [Supabase Client Libraries](https://supabase.com/ui/docs/nuxtjs/client)
- Supabase client for Nuxt.js
- [Current User Avatar](https://supabase.com/ui/docs/nuxtjs/current-user-avatar)
- Supabase Auth-aware avatar
- [Dropzone (File Upload)](https://supabase.com/ui/docs/nuxtjs/dropzone)
- Displays a control for easier uploading of files directly to Supabase Storage
- [Password-based Authentication](https://supabase.com/ui/docs/nuxtjs/password-based-auth)
- Password-based authentication block for Nuxt.js
- [Realtime Avatar Stack](https://supabase.com/ui/docs/nuxtjs/realtime-avatar-stack)
- Avatar stack in realtime
- [Realtime Cursor](https://supabase.com/ui/docs/nuxtjs/realtime-cursor)
- Real-time cursor sharing for collaborative applications
- [Social Authentication](https://supabase.com/ui/docs/nuxtjs/social-auth)
- Social authentication block for Nuxt.js
- [Platform Kit](https://supabase.com/ui/docs/platform/platform-kit)
- The easiest way to build platforms on top of Supabase
- [Supabase Client Libraries](https://supabase.com/ui/docs/react-router/client)
- Supabase client for React Router
- [Current User Avatar](https://supabase.com/ui/docs/react-router/current-user-avatar)
- Supabase Auth-aware avatar
- [Dropzone (File Upload)](https://supabase.com/ui/docs/react-router/dropzone)
- Displays a control for easier uploading of files directly to Supabase Storage
- [Password-based Authentication](https://supabase.com/ui/docs/react-router/password-based-auth)
- Password-based authentication block for React Router
- [Realtime Avatar Stack](https://supabase.com/ui/docs/react-router/realtime-avatar-stack)
- Avatar stack in realtime
- [Realtime Chat](https://supabase.com/ui/docs/react-router/realtime-chat)
- Real-time chat component for collaborative applications
- [Realtime Cursor](https://supabase.com/ui/docs/react-router/realtime-cursor)
- Real-time cursor sharing for collaborative applications
- [Realtime Monaco](https://supabase.com/ui/docs/react-router/realtime-monaco)
- Real-time Monaco editor for collaborative applications
- [Social Authentication](https://supabase.com/ui/docs/react-router/social-auth)
- Social authentication block for React Router
- [Supabase Client Libraries](https://supabase.com/ui/docs/react/client)
- Supabase client for React Single Page Applications
- [Current User Avatar](https://supabase.com/ui/docs/react/current-user-avatar)
- Supabase Auth-aware avatar
- [Dropzone (File Upload)](https://supabase.com/ui/docs/react/dropzone)
- Displays a control for easier uploading of files directly to Supabase Storage
- [Password-based Authentication](https://supabase.com/ui/docs/react/password-based-auth)
- Password-based authentication block for React Single Page Applications
- [Realtime Avatar Stack](https://supabase.com/ui/docs/react/realtime-avatar-stack)
- Avatar stack in realtime
- [Realtime Chat](https://supabase.com/ui/docs/react/realtime-chat)
- Real-time chat component for collaborative applications
- [Realtime Cursor](https://supabase.com/ui/docs/react/realtime-cursor)
- Real-time cursor sharing for collaborative applications
- [Realtime Monaco](https://supabase.com/ui/docs/react/realtime-monaco)
- Real-time Monaco editor for collaborative applications
- [Social Authentication](https://supabase.com/ui/docs/react/social-auth)
- Social authentication block for React Single Page Applications
- [Supabase Client Libraries](https://supabase.com/ui/docs/tanstack/client)
- Supabase client for TanStack Start
- [Current User Avatar](https://supabase.com/ui/docs/tanstack/current-user-avatar)
- Supabase Auth-aware avatar
- [Dropzone (File Upload)](https://supabase.com/ui/docs/tanstack/dropzone)
- Displays a control for easier uploading of files directly to Supabase Storage
- [Password-based Authentication](https://supabase.com/ui/docs/tanstack/password-based-auth)
- Password-based authentication block for TanStack Start
- [Realtime Avatar Stack](https://supabase.com/ui/docs/tanstack/realtime-avatar-stack)
- Avatar stack in realtime
- [Realtime Chat](https://supabase.com/ui/docs/tanstack/realtime-chat)
- Real-time chat component for collaborative applications
- [Realtime Cursor](https://supabase.com/ui/docs/tanstack/realtime-cursor)
- Real-time cursor sharing for collaborative applications
- [Realtime Monaco](https://supabase.com/ui/docs/tanstack/realtime-monaco)
- Real-time Monaco editor for collaborative applications
- [Social Authentication](https://supabase.com/ui/docs/tanstack/social-auth)
- Social authentication block for Tanstack Start
- [Supabase Client Libraries](https://supabase.com/ui/docs/vue/client)
- Supabase client for Vue Single Page Applications
- [Current User Avatar](https://supabase.com/ui/docs/vue/current-user-avatar)
- Supabase Auth-aware avatar
- [Dropzone (File Upload)](https://supabase.com/ui/docs/vue/dropzone)
- Displays a control for easier uploading of files directly to Supabase Storage
- [Password-based Authentication](https://supabase.com/ui/docs/vue/password-based-auth)
- Password-based authentication block for Vue Single Page Applications
- [Realtime Avatar Stack](https://supabase.com/ui/docs/vue/realtime-avatar-stack)
- Avatar stack in realtime
- [Realtime Cursor](https://supabase.com/ui/docs/vue/realtime-cursor)
- Real-time cursor sharing for collaborative applications
- [Social Authentication](https://supabase.com/ui/docs/vue/social-auth)
- Social authentication block for Vue Single Page Applications
+2 -1
View File
@@ -25,8 +25,9 @@ yarn-error.log*
!**/*/generated/**/.gitkeep
.generated
# Sitemap
# Sitemap (regenerated on every Vercel deploy by `pnpm postbuild` -> internals/generate-sitemap.mjs)
public/sitemap.xml
public/sitemap_www.xml
# Generated .md content bundle (built by scripts/generateMdContent.mjs)
app/api-v2/md/content.generated.ts
File diff suppressed because it is too large. Load diff