Markdown Routes
The site exposes markdown versions of blog posts, guides, kickstarts, and live streams.
Routes
- Blogs:
/blog/[slug].md - Guides:
/guides/[...slug].md - Kickstarts:
/kickstarts/[...slug].md - Live streams:
/livestreams/[...slug].md - Sitemap:
/sitemap.md
Markdown handlers are centralized in lib/markdown/routeUtils.ts to keep markdown routes consistent.
Conversion Layer
The content-specific converters (blogMarkdown.ts, guideMarkdown.ts, kickstartMarkdown.ts, and liveStreamMarkdown.ts) share common markdown primitives from lib/markdown/shared.ts:
- heading/title formatting
- metadata list composition
- shared additional-items rendering (notices, FAQs, related cards)
- canonical source footer formatting
Guide chapter pagination and live-stream component rendering remain content-specific and are still handled in their dedicated converter modules.
Content Negotiation
If a request includes the Accept: text/markdown header, the HTML route will return markdown instead:
/blog/[slug]withAccept: text/markdownreturns markdown/guides/[...slug]withAccept: text/markdownreturns markdown/kickstarts/[...slug]withAccept: text/markdownreturns markdown/livestreams/[...slug]withAccept: text/markdownreturns markdown
Sitemap Format
/sitemap.md is a human-readable markdown file grouped by content type (Guides, Blog Posts, Live Streams, Pages, People), with markdown links for blog posts, guides, and live streams.
Runtime Compatibility
Markdown route handlers return native Response objects from lib/markdown/routeUtils.ts (not NextResponse) to ensure compatibility with production/serverless app-route validation.
Legacy Routes
The previous /md/blog/..., /md/guides/..., /md/kickstarts/..., and /md/livestreams/... paths now redirect to the new .md URLs.