MemoPop's splash speaks all three discovery protocols — llms.txt, sitemap.xml, robots.txt
The memopop-site splash now serves the same machine-readable discovery surface that landed in context-vigilance-kit over the past two days, ported with the adaptations memopop needs — two content collections instead of one, provenance via `from` instead of `source_repo_slug`, and no publish gate to mirror. LLM crawlers get `/llms.txt` + `/llms-full.txt`, search engines get `sitemap-index.xml` + `robots.txt`, and the head of every page carries explicit `rel="sitemap"` and `rel="alternate" type="text/markdown"` hints.
Why Care?
A splash page that no one can find is a splash page that doesn't exist. Until tonight, the memopop-site splash spoke only HTML — fine for humans, opaque to every other audience. Now it speaks three machine-readable protocols at once: /llms.txt for LLM crawlers and agentic tools that follow the llms.txt convention, sitemap-index.xml for search engines, and a robots.txt that points the latter at the former. The same <head> carries rel="sitemap" and rel="alternate" type="text/markdown" hints so any tool that looks there discovers the relevant file without parsing robots.
This is the second splash in the Lossless family to wear the full discovery surface. The first was context-vigilance-kit (llms.txt landed there on 2026-05-09, the sitemap+robots+OG trio landed there on 2026-05-11). The interesting work here wasn't what to ship — the spec was solved — it was what to adapt. Memopop's content shape is different enough from CVK's that a clean copy-paste of the endpoints wouldn't have worked.
What's New?
/llms.txtatsrc/pages/llms.txt.ts— markdown link index of the splash's two content collections (changelog+context-v), grouped by source peer (orchestrator engine, this site, workspace notes), with the lede from each entry as the link description. Lives athttps://lossless-group.github.io/memopop-ai/llms.txtafter deploy./llms-full.txtatsrc/pages/llms-full.txt.ts— every entry from both collections concatenated as raw markdown, each preceded by a metadata header (title, kind, source peer, source path, canonical URL, last-modified date). Sorted deterministically: byfromfirst, then changelog before context-v within each peer, then date desc within (kind, from). Build is reproducible.@astrojs/sitemapintegration inastro.config.mjs— auto-generatessitemap-index.xml+sitemap-0.xmlat build time. Filter excludes the two/llms.txtendpoints (LLM-facing, not for search engines) and the 404 page. Dependency added at^3.7.2.public/robots.txt— three lines, no bot denied; theSitemap:pointer at the absolute URL is the load-bearing part.Two new
<link>tags inBaseLayout.astro— explicit hints to discovery tools that look in<head>:rel="sitemap"pointing at the XML index,rel="alternate" type="text/markdown"pointing at/llms.txt.A
src/llms/source-of-truth directory withllms.md,llms-full.md, and aREADME.mddocumenting the token vocabulary. The endpoints are pure assemblers — they import the template via Vite's?raw, substitute{{TOKEN}}placeholders, and emit. No prose lives in TypeScript.
How it works
┌──────────────────────┐
│ memopop-site │
│ / │
└──────────┬───────────┘
│
┌─────────────────────────┼─────────────────────────┐
│ │ │
▼ ▼ ▼
/sitemap-index.xml /llms.txt <head> hints:
/robots.txt /llms-full.txt rel="sitemap"
rel="alternate"
│ │ │
▼ ▼ ▼
search engines LLM crawlers both audiences
(Google, Bing) (ingest tools) in-pageThree protocols, three audiences, one corpus that's just the union of changelog and context-v.
What changed versus the context-vigilance-kit reference
Three things didn't port cleanly, and the differences are worth reading if you're going to port this to a third splash:
Two collections, not one. CVK's splash has a single
corpuscollection — flat list of hand-authored and collated context-v entries. Memopop haschangelogandcontext-vas two separate Astro content collections (seesrc/content.config.ts). The endpoints read both. Thellms.txtoutput has two sections (## Changelogand## Context-V); thellms-full.txtconcatenates from both, with aKind:field in each entry's metadata header so an LLM ingesting the file can disambiguate.Provenance via
from, notsource_repo_slug. CVK's corpus is collated from many sibling repos via a local script that stampssource_repo_slugon every entry. Memopop's union loader instead stampsfrom,from_kind, andfrom_path— these identify which peer in the monorepo (orchestrator-engine, memopop-site, workspace-itself) the entry came from. Grouping in/llms.txthappens byfrom. Helper utilities for reading these fields already exist insrc/lib/provenance.ts; the new endpoints just use them.No publish/private gate. CVK's endpoints filter out entries where
publish === falseorprivate === true, matching the corpus pages' gate. Memopop's[...slug].astropages currently render every entry without filtering. The endpoints match that behavior so the HTML and LLM-facing views never disagree. Anchored note inllms.txt.ts: if a publish gate is later added to the page templates, re-derive the predicate in the endpoints to keep the two in sync.
The spec-conformance gap (same as CVK)
The llms.txt convention, the robots.txt convention, and sitemap discovery all assume the file lives at the host root: https://contextvigilance.com/llms.txt, https://memopop.ai/robots.txt. Until DNS for a custom domain lands, this splash deploys under a path on GitHub Pages: https://lossless-group.github.io/memopop-ai/.
That means convention-based discovery (a crawler GET-ing /llms.txt or /robots.txt from the host root) won't find this splash's files — it'll hit lossless-group.github.io/llms.txt, which is GitHub's. Crawlers pointed explicitly at the path-based URL via sitemap submission, the rel="sitemap" link in <head>, or the rel="alternate" link in <head> still work today. The endpoints read import.meta.env.SITE and BASE_URL at build time and emit absolute URLs, so no code change is needed when the domain flips — the same files start working spec-conformantly.
Verification
After build, the four artifacts should land in dist/:
$ bun run build
... pages built
$ ls -lh dist/llms*.txt dist/sitemap*.xml dist/robots.txt
.rw-r--r--@ <KB> dist/llms.txt
.rw-r--r--@ <MB> dist/llms-full.txt
.rw-r--r--@ <KB> dist/sitemap-0.xml
.rw-r--r--@ <KB> dist/sitemap-index.xml
.rw-r--r--@ ~100B dist/robots.txt(Exact sizes depend on entry count; build the splash to see actuals.)
Live URLs after deploy:
https://lossless-group.github.io/memopop-ai/llms.txthttps://lossless-group.github.io/memopop-ai/llms-full.txthttps://lossless-group.github.io/memopop-ai/sitemap-index.xmlhttps://lossless-group.github.io/memopop-ai/robots.txt
Human check: open /llms.txt in a browser, confirm it renders as text/markdown with two sections (## Changelog, ## Context-V), each grouped by source peer. Curl /llms-full.txt and pipe to wc -c — should be in the multi-MB range once the corpus grows.
What's next
Three more splashes in the Lossless family still need the trio: astro-knots/splash, content-farm/splash, and lfm/splash. Each one has a different content shape — astro-knots's rolled-up changelogs from many sibling sites, content-farm's plugin docs, lfm's spec — so the intro prose in each src/llms/llms.md differs per splash, but the assembler logic (load template → substitute tokens → emit) is identical. The CVK and memopop versions are now the two reference implementations to crib from.
Also worth: an OG card for this splash. CVK got one in the same shipment but memopop's was deferred — it needs its own DESIGN.md imagery: recipe before generation, and that hasn't been authored yet. Tracked as a follow-up.
Related
The CVK shipments this is a port of:
context-vigilance-kit/changelog/2026-05-09_02.md(llms.txt) andcontext-vigilance-kit/changelog/2026-05-11_01.md(sitemap + robots + OG card).The llms.txt spec: llmstxt.org
The sitemap protocol: sitemaps.org/protocol.html
The
open-graph-share-seo-geoskill inlossless-skills/— codifies the JPEG-over-WebP rule, theog:image:type-must-match-bytesinvariant, and the share-preview-cache-bust recipe. Worth a read before authoring the deferred OG card.The endpoint code:
src/pages/llms.txt.ts,src/pages/llms-full.txt.tsThe prose templates:
src/llms/llms.md,src/llms/llms-full.md,src/llms/README.md
