Project Structure
A tour of the folders and files in a CamelMind site ā what each one does and which ones you'll actually edit.
Every CamelMind project follows the same directory structure. Most of your work will happen in just a few folders, while the rest powers the framework behind the scenes.
This guide explains what each folder is for and when you'll need to edit it.
my-docs/
āāā app/ # Next.js routes and rendering
āāā components/ # UI and MDX components
āāā content/ # Documentation pages
āāā lib/ # Internal utilities
āāā nav/
ā āāā nav.yml # Sidebar navigation
āāā public/ # Images and downloads
āāā scripts/ # Build utilities
āāā camelmind.config.ts # Site configuration
āāā versions.yml # Documentation versions
āāā next.config.ts # Next.js configuration
āāā .env.example # Configuration template; duplicate to .env.local before running
āāā package.json
āāā tsconfig.json
Most documentation work only involves these folders:
| Want to... | Edit |
|---|---|
| Write documentation | content/ |
| Organize the sidebar | nav/nav.yml |
| Add images or assets | public/ |
| Change the site title | camelmind.config.ts |
For other advanced configurations, we will cover in Advanced Configurations.
The content/ folder
Every documentation page is an MDX file stored under content/. Every page is a .mdx file ā Markdown with optional JSX components ā with YAML frontmatter at the top for title and description.
content/
āāā getting-started/
ā āāā overview.mdx
āāā guides/
ā āāā writing-docs.mdx
āāā reference/
āāā configuration.mdx
Unlike many documentation frameworks, CamelMind does not derive URLs from your folder structure. URLs are defined in nav.yml, giving you complete control over your site's navigation.
The nav/nav.yml file
nav.yml is the single source of truth for what appears in the sidebar and which URL each page is served at. Every entry maps a slug (the public URL) to a file (the MDX source):
nav:
- label: "Getting Started"
dropdown: false
noDropdown: true
items:
- label: "Project Structure"
slug: /getting-started/project-structure
file: content/getting-started/project-structure.mdx
roles: []
A page in content/ that isn't registered here won't be reachable ā and a page can be registered at multiple slugs with different labels or roles. See Navigation and the Nav Schema reference for every field.
The versions.yml file
versions.yml defines the documentation versions your site publishes, such as latest, v1, or v2.
versions:
- id: "latest"
label: "Latest"
stable: true
nav: nav/nav.yml
A fresh scaffold ships with a single latest version. Add entries here when you're ready to publish multiple versions side by side ā see Versioning.
The camelmind.config.ts configuration file
The root config file for site-wide behavior such as title, tagline, auth settings, GitHub link, API reference, and llms.txt output.
const config: CamelMindConfig = {
title: "My Docs",
tagline: "Documentation made simple.",
url: process.env.CAMELMIND_URL ?? "http://localhost:3000",
contentDir: "content",
navFile: "nav/nav.yml",
versionsFile: "versions.yml",
auth: { enabled: false, requireLogin: false, provider: "dev-mock", /* ... */ },
links: { github: "https://github.com/you/your-repo" },
ai: { llmsTxt: { enabled: false, directive: "" } },
}
Most secrets and environment-specific values (auth toggles, the site URL) are read from environment variables defined in .env.example / .env.local, rather than hardcoded here. See the Configuration Reference for every field.
The app/ folder
The app directory contains the Next.js application that powers your documentation site.
| Path | Purpose |
|---|---|
app/[...slug]/page.tsx | The catch-all route that renders every doc page ā resolves the slug against nav.yml, loads the MDX file, and applies auth checks |
app/api-reference/ | Route for the OpenAPI-powered API reference |
app/api/auth/ | Login, logout, and OIDC callback route handlers |
app/api/search/ | Full-text search endpoint |
app/api/llms/, app/llms.txt/ | AI-readable documentation output (/llms.txt and /api/llms) |
app/home/page.tsx | The homepage |
app/layout.tsx | Root layout ā theming, fonts, global providers |
app/globals.css | Global styles (Tailwind) |
Customizing files in app/ is an advanced use case. Changes here can be overwritten or need manual reconciliation when you run camelmind update ā see the CLI Reference for the --ignore-file flag if you need to protect a customized file.
The components/ folder
React components split into two groups:
- Site chrome ā
Nav/,Sidebar/,Toc/,Breadcrumbs/,PageNav/,Search/,SectionCards/,ApiReference/, and similar folders render the surrounding site UI (top nav, sidebar, table of contents, search modal, and so on). components/mdx/ā the components available directly inside your.mdxcontent:Callout,Steps,Tabs,Details,Icon,LLMOnly, andLLMIgnore.
See MDX Components for how to use each one in your content.
The lib/ folder
The engine room: plain TypeScript modules that load and resolve content, with no JSX. You generally won't need to edit these, but they're the layer to look at if you're extending CamelMind's behavior.
| File | Responsibility |
|---|---|
lib/mdx.ts | Reads an MDX file, parses frontmatter, extracts the table of contents |
lib/nav.ts, lib/nav-types.ts | Parses nav.yml, resolves slugs to entries, builds breadcrumbs |
lib/versions.ts | Resolves which version's nav applies to a given URL |
lib/config.ts, lib/config-types.ts | Loads and types camelmind.config.ts |
lib/auth.ts, lib/auth-roles.ts, lib/auth-providers/ | Session handling and role-based access control |
lib/api-reference.ts, lib/api-types.ts, lib/api-utils.ts | OpenAPI spec parsing for the API reference |
The scripts/ folder
Standalone automation tooling for producing specialized release artifacts outside of the normal web deployment pipeline:
| Script | Purpose |
|---|---|
scripts/build-offline.sh | Builds a static, ZIP-packaged offline version of the site |
scripts/build-search-index.ts | Pre-generates the search index used by offline builds |
scripts/generate-pdfs.ts, scripts/generate-master-pdf.ts | Generate per-page and combined PDF exports |
scripts/build-pdf.sh | Wraps the PDF generation scripts into a single build step |
See Offline Export for how these fit into a release workflow.
Root config files
| File | Purpose |
|---|---|
package.json | Project dependencies and CLI script runners (dev, build, start, lint). |
next.config.ts | Next.js compilation options, security headers, and static export toggles. |
tsconfig.json | Global TypeScript compiler settings. |
eslint.config.mjs | Project code quality and linting rules. |
.env.example | Local environment configuration blueprint. Dplicate to .env.local to start. |
vercel.json | Optimized deployment configurations specific to Vercel. |
After running camelmind update, you may see a .camelmind-update-backup/ folder appear ā it holds a timestamped copy of any files the updater overwrote. It's safe to delete once you've confirmed the update looks correct.
Next steps
| Goal | Where to go |
|---|---|
| Write and organize pages | Writing Content |
| Use Callout, Steps, Tabs, and more | MDX Components |
| Change the sidebar and URLs | Navigation |
| Publish multiple doc versions | Versioning |
| Gate pages by user role | Authentication & RBAC |
| Every config option in detail | Configuration Reference |