/doc/CLAUDE.md
CLAUDE.md at /doc/CLAUDE.md
Path: doc/
Doc
Documentation site built with zudo-doc — a zfb-based documentation framework with MDX, Tailwind CSS v4, and Preact islands. This project is intentionally minimal: one config file (zfb.config.ts) plus markdown content — layout, chrome, and islands all ship from @takazudo/zudo-doc in node_modules.
Tech Stack
zfb — documentation build framework
MDX — content format, authored under
src/content/Tailwind CSS v4 — via
@tailwindcss/vitePreact — for interactive islands only (with compat mode for React API)
syntect — built-in code highlighting, run by zfb's Rust pipeline at build time (dual light/dark theme, follows the site's color-mode toggle)
@takazudo/zudo-doc — the package that owns everything: layout, chrome, islands, default
@themedesign tokens, and (viapackageOwnedRoutes, on by default) the doc routes themselves
Commands
pnpm dev— zfb dev server (port 4321)pnpm build— static HTML export todist/pnpm check— TypeScript type checkingpnpm preview— serve the builtdist/
Key Directories
zfb.config.ts # THE one config file — zudoDoc({ ...only fields you chose })
pages/
├── index.tsx # 1-line re-export of the package home route
└── docs/[[...slug]].tsx # self-contained doc-route stub (required for `pnpm dev`)
src/
├── content/
│ └── docs/ # MDX content (this project's showcase docs)
└── styles/
└── global.css # @import chain + a token-override slot — that's it Everything else — layout, header, sidebar, footer, doc chrome, islands, and the default design tokens — lives in node_modules/@takazudo/zudo-doc. To customize a specific piece, use the eject CLI: npx zudo-doc eject <component> copies one package component into this project so you can edit it (see @takazudo/zudo-doc's eject-contract docs). Settings you didn't set explicitly in zfb.config.ts use the package's documented defaults — hover zudoDoc's ZudoDocConfig argument in your editor to see every field and its @default.
Content Conventions
Frontmatter
Required:
title(string)Optional:
description,sidebar_position(number),categorySidebar order is driven by
sidebar_position
Admonitions
Available in all MDX files without imports, via directive syntax: :::note, :::tip, :::info, :::warning, :::danger, :::caution, :::details. Each accepts an optional {title="..."} attribute.
Headings
Do NOT use h1 (#) in doc content — the page title from frontmatter is rendered as h1. Start content headings from h2 (##).
Built-in MDX components
@takazudo/zudo-doc ships a few globally-available MDX components — usable in any .mdx file with no import. The seeded getting- already uses one:
<CategoryNav category="..." />— a card-grid list of the pages in a docs category (this is the one seeded intogetting-).started/ index. mdx <CategoryTreeNav category="..." />— the same listing as a compact nested tree, better for deeper hierarchies.<SiteTreeNavDemo />— a full-site documentation tree (the MDX-available wrapper of theSiteTreeNavisland).
Admonitions (above), tabbed content (<Tabs> / <TabItem>, <CodeGroup>), and block math (<MathBlock>) work the same way — no import. Full reference: https://zudo-doc.takazudomodular.com/docs/components/
Enabled Features
search — Full-text search via Pagefind
claudeResources — Auto-generated docs for Claude Code resources
llmsTxt — Generates llms.txt for LLM consumption