Skip to content

infra(seo): ship llms.txt + llms-full.txt, upgrade RSS feed, refresh site description #390

@julianken

Description

@julianken

Context

Source: docs/seo-strategy/phase-4/analysis-report.md, Gate 3 — Amplify (discovery infrastructure).

Ship three discovery-surface improvements:

  1. llms.txt + llms-full.txt — major AI engines mostly ignore (~10% adoption), but Cursor / Continue / Cline IDE agents actively consume these. That's the audience.
  2. RSS feed metadata upgrade — <author>, <copyright>, <generator>, <managingEditor>, <image> at channel level; per-item <author>. Improves Inoreader/Feedly visibility and AI scraper ingestion.
  3. Site description rewrite — current "A tech blog and reference catalog on agentic AI." is generic; replace with a more specific, citation-friendly description.

Acceptance criteria

  • New file public/llms.txt (static, ~30 lines) — minimal disclaimer + indexed-content pointers per analysis report §3.7
  • New file src/app/llms-full.txt/route.ts — Next.js route handler returning Markdown index generated from PATTERNS (filter !archived) + getPublishedPosts(). Reuse getPublishedPosts from src/lib/queries/posts.ts. Content-Type: text/plain; charset=utf-8. Cache-Control: s-maxage=3600, stale-while-revalidate=86400
  • src/app/feed.xml/route.ts — add channel-level fields: <author>{CONTACT_EMAIL}</author>, <copyright>, <generator>Next.js 16 / Payload CMS</generator>, <managingEditor>, <image> (using og-default.png). Add per-item <author> using CONTACT_EMAIL. Defer <content:encoded> — requires a Payload Lexical → HTML server-side exporter that doesn't exist (audit finding); document the deferral in PR body as a follow-up issue
  • src/lib/site-config.ts — update siteDescription from "A tech blog and reference catalog on agentic AI." to: "A diagnostic analysis of agentic AI design patterns in practice — 24 reference patterns, field reports from production agentic workflows, and the gap between what agents promise and what they deliver."
  • src/app/(frontend)/layout.tsx — verify the new siteDescription flows through metadata.description (no edit needed if already imported)
  • Defensive CONTACT_EMAIL add: if src/lib/site-config.ts doesn't already export it (B might have added it first), add it here. Idempotent. Trivial rebase if both PRs land
  • Local verification (after pnpm dev):
    • curl http://localhost:3000/llms.txt returns 200 + plaintext
    • curl http://localhost:3000/llms-full.txt returns 200 + Markdown listing 24 patterns + 4 posts
    • curl http://localhost:3000/feed.xml | xmllint --noout - validates as well-formed XML
  • pnpm lint && pnpm test:unit && pnpm typecheck pass
  • PR body includes Closes #<this-issue> + curl output of the three endpoints + note about <content:encoded> deferral
  • julianken-bot review posted with APPROVE verdict

Out of scope

  • <content:encoded> (full-body RSS) — requires Lexical → HTML server exporter; separate follow-up
  • Other gate 3 items (schema fields, posts, npm package) — separate issues
  • Tier C identity — separate issue

Reference files

  • Plan: ~/.claude/plans/make-a-plan-to-peppy-swan.md — Category E
  • Analysis report: docs/seo-strategy/phase-4/analysis-report.md — Gate 3.7 (llms.txt), Gate 3.8 (RSS)
  • Technical infra audit: docs/seo-strategy/phase-1/area-2-technical-infra.md — RSS gaps + llms.txt rationale

Workflow

  • Branch: infra/seo-discovery-surfaces
  • Worktree: ../wt-{this-issue}-seo-discovery-surfaces
  • Conventional commit: infra(seo): llms.txt + RSS metadata upgrades + site description
  • PR title: same as commit
  • Subagent type: general-purpose

Metadata

Metadata

Assignees

Labels

area:seoSEO + AI-discovery strategy workstatus:in-reviewPR open, waiting for review

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions