Authoring content
How to add docs, blog posts, legal pages, and authors as MDX.
Content is MDX under content/, loaded through Fumadocs. Each entry has a folder named for its public slug, containing index.mdx, any index.<locale>.mdx translations, and its images. The /docs root uses content/docs/index.mdx directly.
Collections
| Folder | Route | Notes |
|---|---|---|
content/docs | /docs/<slug> | One folder per page; ordered by metadata |
content/blog | /blog/<slug> | One folder per Post |
content/legal | /legal/<slug> | One folder per page; git-derived dates |
content/authors | /authors/<slug> | One folder per author |
Collection metadata such as meta.json describes navigation rather than a content entry, so it stays at the collection or group root.
One folder per entry
The folder path defines the public slug consistently across collections:
content/docs/guides/content/index.mdx → /docs/guides/content
content/legal/privacy/index.mdx → /legal/privacy
content/blog/my-first-post/index.mdx → /blog/my-first-post
content/authors/jordan-lee/index.mdx → /authors/jordan-leeThere is no registration step — add the folder and its index.mdx, and the entry appears.
A Post folder
A Post owns its MDX and every image in one folder. The default locale is index.mdx, translated variants are index.<locale>.mdx, and the Cover always uses the fixed filename cover.png:
content/blog/my-first-post/
index.mdx
index.zh.mdx
cover.png
architecture.pngFrontmatter carries only authored content. cover contains alt text; its source is discovered from the fixed filename:
---
title: "My first post"
description: "A short summary used for the card, meta, and JSON-LD."
date: "2026-06-16"
author: "jordan-lee"
tags: ["Guides"]
cover:
alt: "Describe the cover"
---
Your post body here.
Use ordinary Markdown image syntax and a relative path for inline images. Fumadocs resolves these files during the build, so a wrong or missing path fails the build; rendered images use optimized, hashed asset URLs with intrinsic dimensions.
An author folder
Authors follow the same convention. Their fixed portrait filename is portrait.png, and frontmatter carries only its alt text:
content/authors/jordan-lee/
index.mdx
index.zh.mdx
portrait.pngportrait:
alt: "Portrait of Jordan Lee"Per-locale variants
Every translation uses index.<locale>.mdx inside the entry's folder, so all variants automatically share its images. When a translation is missing, the page falls back to the default-language file — see i18n & SEO.