Blog index, dynamic post pages, and RSS feed at /blog. All three files are prerendered (export const prerender = true) and read from the blog Astro content collection in src/content/blog/.
| File | Description |
|---|---|
index.astro | /blog - lists all published posts from the blog content collection; uses getPublishedPosts + readingTime + formatDate helpers; includes RSS autodiscovery link |
[...slug].astro | /blog/<slug> - renders a single post via BlogLayout; uses getStaticPaths to enumerate all published slugs; includes two relatedPosts (adjacent in list) passed to the layout |
rss.xml.ts | /blog/rss.xml - RSS 2.0 feed via @astrojs/rss; enumerates all published posts with title, description, pubDate, and absolute link |
src/content/blog/. Schema is defined in src/content.config.ts; add new frontmatter fields there, not heresrc/pages/og/[slug].png.ts using the same sluggetPublishedPosts() from src/modules/common/utils/blog filters out draft: true posts; use it everywhere in this directory[...slug].astro uses rest-spread so deeply nested slugs (e.g. /blog/foo/bar) are handled without additional filesBlog post tags (src/content.config.ts:tags) are a draft-time signal
used by the milepost-blog-post Claude Skill to suggest internal links.
They are NOT an SEO surface.
Do NOT add a tags/[tag].astro or tags/index.astro route. A
tag-listing route on a small blog generates dozens of low-content
pages that Google penalizes; the trade-off was deliberated and rejected
in .omc/specs/deep-interview-milepost-blog-post-skill.md (AC9) and
the consensus plan’s Option Table 1A.
If SEO via tag pages becomes desirable later, revisit AC9 and the ADR
Consequences in .omc/plans/milepost-blog-post-skill.md.
src/content/blog/ - Markdown/MDX post filessrc/content.config.ts - content collection schemasrc/modules/common/utils/blog - getPublishedPosts, readingTimesrc/modules/common/utils/dates - formatDatesrc/layouts/BlogLayout.astro - single-post layout with related postsastro:content - render for MDX rendering@astrojs/rss - RSS feed generation