You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The template currently has no dedicated place for release notes. Adopters who want a public changelog either:
inline it in the docs (pollutes the documentation tree),
point users at GitHub Releases (loses branding and styling),
or build a separate page from scratch (duplicates work the template should ship).
A common need for a docs site is a versioned changelog that follows the Keep a Changelog convention.
Proposed solution
Add a /changelog route group that:
Lives at /changelog (sibling of /docs and /blog)
Reads content from content/changelog/ (parallel to content/docs/)
Uses a second Fumadocs loader() source collection for releases
Frontmatter: version (semver), date (ISO), optional title
Body follows Keep a Changelog categories: Added, Changed, Fixed, Deprecated, Removed, Security — rendered as styled sections
Index page lists releases, newest first, with version + date + a one-line summary
Individual pages at /changelog/<version> (e.g. /changelog/v1-2-0)
Latest release prominently surfaced on the home page or in the docs sidebar
Generates an Atom/RSS feed at /changelog/feed.xml via a dynamic route handler so users can subscribe to release notifications (see docs/internal/learnings/fumadocs/rss.md)
Optional: /llms-full.txt extended to include the changelog
Keep a Changelog rendering
The Added/Changed/Fixed/etc. sections are rendered via a custom MDX component (e.g. src/components/change-section.tsx) that maps each ## Added heading to a styled block (similar in spirit to Fumadocs' <Callout>). The component receives the section type as a prop and renders with the appropriate color/icon.
Two example releases should ship in the template (content/changelog/v1.0.0.mdx, v0.9.0.mdx) to demonstrate the schema and Keep a Changelog rendering.
Acceptance criteria
/changelog route renders a reverse-chronological list of releases
/changelog/<version> renders a single release with Keep a Changelog sections
Frontmatter schema (version, date, optional title) is validated by source.config.ts
Latest release is surfaced somewhere visible (home or sidebar)
Two example releases ship in the template with realistic entries
README.md documents the changelog conventions and how to add a new release
All existing CI checks (Lint, Type Check, Build) still pass
No regressions on the docs section
(Recommended) Atom/RSS feed at /changelog/feed.xml — same feed-based pattern as /blog/feed.xml (see RSS learning doc). Register in metadata.alternates.types.
Alternatives considered
Auto-generate from git log in CI. Rejected — produces noisy, inconsistent output, and conflates commit history with user-facing release notes.
Pull from the GitHub Releases API only. Rejected — couples the template to GitHub and loses theming, layout control, and offline builds.
Single-page flat changelog (one long page, no per-release routing). Rejected — does not scale past a handful of releases and provides no per-version URL for linking.
Fold changelog entries into the blog (post type = "release"). Rejected — conflates concerns (release notes have a strict format and versioning; blog posts are free-form).
Risks
Another content collection means a third loader() call and a third source tree in the navigation. Layout decisions (where to surface the latest release) need a UX pass.
If the blog and changelog land together, the home/sidebar layout has to accommodate three entry points (docs, blog, changelog) without becoming cluttered.
Problem statement
The template currently has no dedicated place for release notes. Adopters who want a public changelog either:
A common need for a docs site is a versioned changelog that follows the Keep a Changelog convention.
Proposed solution
Add a
/changelogroute group that:/changelog(sibling of/docsand/blog)content/changelog/(parallel tocontent/docs/)loader()source collection for releasesversion(semver),date(ISO), optionaltitle/changelog/<version>(e.g./changelog/v1-2-0)/changelog/feed.xmlvia a dynamic route handler so users can subscribe to release notifications (seedocs/internal/learnings/fumadocs/rss.md)/llms-full.txtextended to include the changelogKeep a Changelog rendering
The Added/Changed/Fixed/etc. sections are rendered via a custom MDX component (e.g.
src/components/change-section.tsx) that maps each## Addedheading to a styled block (similar in spirit to Fumadocs'<Callout>). The component receives the section type as a prop and renders with the appropriate color/icon.Two example releases should ship in the template (
content/changelog/v1.0.0.mdx,v0.9.0.mdx) to demonstrate the schema and Keep a Changelog rendering.Acceptance criteria
/changelogroute renders a reverse-chronological list of releases/changelog/<version>renders a single release with Keep a Changelog sectionsversion,date, optionaltitle) is validated bysource.config.tsREADME.mddocuments the changelog conventions and how to add a new releaseLint,Type Check,Build) still pass/changelog/feed.xml— samefeed-based pattern as/blog/feed.xml(see RSS learning doc). Register inmetadata.alternates.types.Alternatives considered
git login CI. Rejected — produces noisy, inconsistent output, and conflates commit history with user-facing release notes.Risks
loader()call and a third source tree in the navigation. Layout decisions (where to surface the latest release) need a UX pass.parserchoice as docs and blog. Document this in the migration guide.date. Custom comparator required.Related
docs/internal/learnings/fumadocs/markdown.md(Callout component for section rendering)docs/internal/learnings/fumadocs/rss.md(RSS feed pattern withfeedpackage)