This post lives at content/blog/hello-world.mdx. Velite parses it at build time, validates the frontmatter against a Zod schema, and compiles the body into a React component.
Why MDX
Markdown for prose, JSX for interactive bits — no CMS, no database, no admin UI. Content is code-reviewable, version-controlled, and AI-authorable.
import { posts } from '#site/content'
posts.map((p) => p.title)That's the whole content layer.