Hanzo Docs - Multi-Brand Documentation Platform
Hanzo Docs is the multi-brand documentation platform behind docs.hanzo.ai — a pnpm/turbo monorepo of 35 packages covering MDX processing, UI, search, i18n, and OpenAPI reference generation. Serves Hanzo, Lux, Zoo, and Zen documentation with per-brand theming.
Overview
Hanzo Docs is the multi-brand documentation platform behind docs.hanzo.ai. It is a pnpm/turbo monorepo of 35 packages — MDX processing, two UI component sets (Radix and headless), full-text search, i18n, and reference generators for OpenAPI and TypeScript — composed into Next.js documentation sites. The same packages serve Hanzo, Lux, Zoo, and Zen documentation with per-brand theming.
NOTE: This is a documentation framework, not a plain Next.js MDX site. Content enters a build through exactly one of three routes: authored MDX in content/docs/, generated reference synced from hanzoai/openapi, or ported upstream OSS docs mirrored with attribution.
Why Hanzo Docs?
- Composable framework: 35 packages you compose, not a fixed template
- Multi-brand: 4 brands from one codebase (Hanzo, Lux, Zoo, Zen)
- MDX-powered: Markdown with React components (live code, diagrams)
- Auto-generated API docs: From OpenAPI spec
- Full-text search: Across all documentation sites
- Versioned: Documentation tied to SDK versions
When to use
- Writing or updating documentation for any Hanzo brand
- Adding API reference pages
- Creating tutorials or guides
- Modifying the documentation platform itself
- Adding a new brand/product documentation site
Quick reference
| Item | Value |
|---|---|
| Repo | github.com/hanzo-docs/docs (hanzoai/docs redirects here) |
| Framework | Next.js 16 with MDX, React 19, Tailwind 4 |
| Packages | 35 |
| Apps | 21 |
| Dev | pnpm dev |
| Build | pnpm build |
| Port | 3000 (dev) |
Brand Sites
| Brand | URL | Build |
|---|---|---|
| Hanzo | docs.hanzo.ai | apps/docs/ in this repo — the hub |
| Lux | docs.lux.network | separate deployment of the @hanzo/docs-* packages |
| Zoo | docs.zoo.ngo | separate deployment of the @hanzo/docs-* packages |
| Zen | docs.zenlm.org | separate deployment of the @hanzo/docs-* packages |
A brand site is a standalone deployment only when it needs independent versioning and its own audience. Otherwise it is a section of the hub — the hub links out to standalone sites, it never copies their content.
Project Structure
docs/
├── apps/ # 21 apps
│ ├── docs/ # docs.hanzo.ai — THE hub, one build
│ │ └── content/docs/ # authored MDX + generated + ported sections
│ └── ... # legacy per-product sites, migrating into the hub
├── packages/ # 35 packages, published as @hanzo/docs-*
│ ├── core/ # source loading, search, i18n
│ ├── mdx/ # MDX processing, collections
│ ├── radix-ui/ # @hanzo/docs-ui — full UI with Radix primitives
│ ├── base-ui/ # @hanzo/docs-base-ui — headless UI
│ ├── openapi/ # OpenAPI → reference pages
│ ├── typescript/ # auto type tables from source
│ ├── twoslash/ # TypeScript hints in code blocks
│ ├── cli/ # scaffolding & customization
│ └── ... # tailwind, story, obsidian, python, epub, ...
├── examples/ # runnable starters (Next.js, Astro, React Router, ...)
├── pnpm-workspace.yaml
└── package.jsonDevelopment
git clone https://github.com/hanzo-docs/docs.git
cd docs
pnpm install
# Dev the hub (docs.hanzo.ai)
pnpm dev
# Dev a single package
pnpm dev --filter @hanzo/docs-ui
# Build for production
pnpm build
# Lint MDX
pnpm lint
# Check broken links
pnpm check-linksWriting Documentation
MDX Page
---
title: "Chat Completions"
description: "Create chat completions with the Hanzo API"
---
import { CodeBlock, ApiEndpoint, Callout, SDKTabs } from "@hanzo/docs-components"
# Chat Completions
<Callout type="info">
This endpoint is OpenAI-compatible.
</Callout>
<ApiEndpoint method="POST" path="/v1/chat/completions" />
## Request
<SDKTabs>
<SDKTabs.Tab lang="python" title="Python">
{`from hanzoai import Hanzo
client = Hanzo()
response = client.chat.completions.create(
model="zen-70b",
messages=[{"role": "user", "content": "Hello"}],
)`}
</SDKTabs.Tab>
<SDKTabs.Tab lang="typescript" title="TypeScript">
{`import Hanzo from "hanzoai"
const client = new Hanzo()
const response = await client.chat.completions.create({
model: "zen-70b",
messages: [{ role: "user", content: "Hello" }],
})`}
</SDKTabs.Tab>
</SDKTabs>Adding a Section
The default is a section of the hub, not a new site:
# 1. Add MDX under the hub's content tree
mkdir apps/docs/content/docs/<section>
# 2. Register it in apps/docs/content/docs/meta.json under a movement
# 3. Team-owned sections live in their own hanzo-docs/<team> content repo,
# mounted here as a git submodule at content/docs/<team>/Spin up a standalone site only when a section needs independent versioning, its own release cadence, and its own audience.
Redirects
Service-specific docs have vanity URLs:
orm.hanzo.ai→hanzo.ai/docs/services/ormhanzo.ai/docs/api→ Full API referencehanzo.ai/docs/sdks/python→ Python SDK guide
Related Skills
hanzo/python-sdk.md- Python SDK (documented here)hanzo/js-sdk.md- JS SDK (documented here)hanzo/hanzo-brand.md- Brand guidelines for docs stylinghanzo/hanzo-cloud.md- Cloud dashboard (links to docs)
How is this guide?