Codapult includes two content systems — a blog and a help center — both powered by MDX files on disk. No CMS or database required; just write Markdown with optional JSX components.
After purchase, replace all
content/blog/andcontent/docs/files with your own product's content.
MDX Blog
File Location
Blog posts live in content/blog/ as .mdx files.
Frontmatter
Every post starts with YAML frontmatter:
---
title: Launching Our API v2
description: A faster, more reliable API with breaking change migration guide.
date: 2026-03-15
author: Jane Doe
tags: [api, release]
image: /images/blog/api-v2.png
published: true
---
Your markdown content here...
| Field | Required | Description |
|---|---|---|
title | Yes | Post title |
description | Yes | Short summary for SEO and listing cards |
date | Yes | Publication date (YYYY-MM-DD) |
author | Yes | Author name |
tags | No | Array of tags for filtering |
image | No | Cover image path |
published | No | Set to false to hide from listings |
Internationalization
Blog posts support per-locale translations using a filename convention:
| File | Locale |
|---|---|
my-post.mdx | Default (English) |
my-post.ru.mdx | Russian |
my-post.de.mdx | German |
If a translation is unavailable for the current locale, the default-locale version is shown.
Utilities
The src/lib/blog/ module provides server-side functions:
| Function | Description |
|---|---|
getAllPosts(locale?) | List all published posts (newest first) |
getPostBySlug(slug, locale?) | Get a single post with full MDX content |
getAllTags(locale?) | Get all unique tags |
getPostsByTag(tag, locale?) | Filter posts by tag |
getPostsByAuthor(author, locale?) | Filter posts by author |
getAllAuthors(locale?) | List all authors with post counts |
getAllSlugs() | Get all post slugs (for static generation) |
Components
| Component | Description |
|---|---|
BlogSearch | Client-side search across post titles and descriptions |
TagCloud | Tag list with post counts, links to filtered views |
LocaleSwitch | Language switcher for translated posts |
MdxContent | Renders MDX content with custom component mappings |
RSS Feed
An RSS feed is automatically generated at /rss.xml from published blog posts.
Help Center / Documentation
File Location
Documentation articles live in content/docs/<category>/<slug>.mdx, organized into category folders.
Frontmatter
---
title: Getting Started
description: Install and configure the app in under 5 minutes.
category: getting-started
order: 1
published: true
---
Your documentation content here...
| Field | Required | Description |
|---|---|---|
title | Yes | Article title |
description | Yes | Short summary for SEO and navigation |
category | Yes | Folder name (e.g. getting-started, billing) |
order | Yes | Sort position within the category |
published | No | Set to false to hide from navigation |
Auto-Generated Navigation
The help center builds its sidebar navigation automatically from the file structure:
- Categories are derived from folder names
- Articles are sorted by
orderwithin each category - Category order is determined by the lowest
ordervalue among its articles
No configuration file is needed — add a folder and an MDX file, and it appears in the sidebar.
Full-Text Search
The searchDocs(query) function searches across article titles, descriptions, and content:
import { searchDocs } from '@/lib/docs';
const results = searchDocs('authentication');
// [{ title, description, category, slug, order, published }, ...]
The HelpDocSearch component provides a ready-made search UI with instant results.
Utilities
| Function | Description |
|---|---|
getDocCategories() | List all categories with their articles |
getDocArticle(category, slug) | Get a single article with MDX content |
getAllDocSlugs() | Get all { category, slug } pairs (for static generation) |
searchDocs(query) | Full-text search across all articles |
Adding Content
New Blog Post
Create a file in content/blog/:
touch content/blog/my-new-post.mdx
Add frontmatter and content. The post appears on the blog page after a dev server reload (or production rebuild).
New Documentation Article
Create a file in content/docs/<category>/:
mkdir -p content/docs/integrations
touch content/docs/integrations/webhooks.mdx
Add frontmatter with the category matching the folder name and an order value. The article appears in the help center sidebar automatically.
New Documentation Category
Simply create a new folder under content/docs/ and add at least one .mdx file. The category name in the sidebar is derived from the folder name (e.g. getting-started → "Getting Started").