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.

text
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
Tip

Most documentation work only involves these folders:

Want to...Edit
Write documentationcontent/
Organize the sidebarnav/nav.yml
Add images or assetspublic/
Change the site titlecamelmind.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.

text
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):

yaml
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.

yaml
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.

typescript
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.

PathPurpose
app/[...slug]/page.tsxThe 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.tsxThe homepage
app/layout.tsxRoot layout — theming, fonts, global providers
app/globals.cssGlobal styles (Tailwind)
Warning

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 .mdx content: Callout, Steps, Tabs, Details, Icon, LLMOnly, and LLMIgnore.

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.

FileResponsibility
lib/mdx.tsReads an MDX file, parses frontmatter, extracts the table of contents
lib/nav.ts, lib/nav-types.tsParses nav.yml, resolves slugs to entries, builds breadcrumbs
lib/versions.tsResolves which version's nav applies to a given URL
lib/config.ts, lib/config-types.tsLoads 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.tsOpenAPI spec parsing for the API reference

The scripts/ folder

Standalone automation tooling for producing specialized release artifacts outside of the normal web deployment pipeline:

ScriptPurpose
scripts/build-offline.shBuilds a static, ZIP-packaged offline version of the site
scripts/build-search-index.tsPre-generates the search index used by offline builds
scripts/generate-pdfs.ts, scripts/generate-master-pdf.tsGenerate per-page and combined PDF exports
scripts/build-pdf.shWraps the PDF generation scripts into a single build step

See Offline Export for how these fit into a release workflow.


Root config files

FilePurpose
package.jsonProject dependencies and CLI script runners (dev, build, start, lint).
next.config.tsNext.js compilation options, security headers, and static export toggles.
tsconfig.jsonGlobal TypeScript compiler settings.
eslint.config.mjsProject code quality and linting rules.
.env.exampleLocal environment configuration blueprint. Dplicate to .env.local to start.
vercel.jsonOptimized deployment configurations specific to Vercel.
Note

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

GoalWhere to go
Write and organize pagesWriting Content
Use Callout, Steps, Tabs, and moreMDX Components
Change the sidebar and URLsNavigation
Publish multiple doc versionsVersioning
Gate pages by user roleAuthentication & RBAC
Every config option in detailConfiguration Reference
July 25, 2026
Was this page helpful?