feat(web): real /about and /docs pages (unique crawlable content)

Addresses the top cross-engine AEO finding — every route previously served
the homepage SPA. /about and /docs are now distinct routes with their own
server-rendered content and titles.

- /about: substantive about page (what LogicSRC is, the standards surface,
  CommandBoard.run reference impl, GitHub, hire-us) — derived from public
  positioning, no fabricated team.
- /docs + /docs/[slug]: render the repo's docs/*.md (curated public set) via
  marked, statically generated at build (no runtime fs dependency).
- Drop about/docs from the catch-all; add doc URLs to the sitemap.

Verified in a running build: /about and /docs serve unique content with
distinct titles; /docs/[slug] renders each markdown doc.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Anthony Ettinger 2026-06-08 12:43:42 +00:00
parent 6518dfb4a9
commit fb20fd2e99
8 changed files with 291 additions and 9 deletions

View file

@ -1,5 +1,6 @@
import type { MetadataRoute } from "next";
import { publicClient } from "@/lib/supabase";
import { DOC_SLUGS } from "@/lib/docs";
export const dynamic = "force-dynamic";
@ -35,6 +36,12 @@ export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
priority: route.priority,
}));
const docEntries: MetadataRoute.Sitemap = DOC_SLUGS.map((slug) => ({
url: `${base}/docs/${slug}`,
changeFrequency: "monthly",
priority: 0.6,
}));
let postEntries: MetadataRoute.Sitemap = [];
try {
const supabase = publicClient();
@ -54,5 +61,5 @@ export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
postEntries = [];
}
return [...staticEntries, ...postEntries];
return [...staticEntries, ...docEntries, ...postEntries];
}