Unblocks app-build-green for the content-docs apps (spec, gui-docs, zen-docs,
base-docs) and advances the docs registry/config app integration.
Root causes (upstream-merge artifacts from the 16.x restructure), with the
authoritative fix matched to upstream [email protected]:
- packages/{base-ui,radix-ui}/src/contexts/i18n.tsx: file was partially
overwritten with an older shape — it referenced `defaultTranslations`,
`use`, `renderTranslation`, `TranslationValue`, `TranslationObject`
without importing/defining any of them, and redeclared a stale local
`Translations`. Restored the upstream 16.9.3 context: import the i18n
primitives from `fumadocs-core/i18n` + `@/i18n`, use React `use`. This was
the `ReferenceError: defaultTranslations is not defined` prerender crash.
- packages/core/src/source/page-tree/builder.ts: item `$ref` was emitted as
an object `{ file: path }`, violating `PageTree.Item.$ref?: string` and
breaking the sort (`aT.localeCompare` on an object → `c.localeCompare is
not a function`). Restored upstream string `$ref: path`.
- packages/shared/registry.ts: `glob` was imported from `node:fs/promises`
(an async generator → `await glob()` is non-iterable → `{} is not
iterable`) and `Component` was double-imported. Restored upstream
`import { glob } from 'tinyglobby'`.
- apps/docs registry codegen aligned to the real `@hanzo/docs-cli/build`
(=`fuma-cli/compiler`) API: `components/registry/index.ts` split the
merged duplicate `export const registry` back into `compileOptions` +
`registry` (restoring the dropped `baseUi`/`sanity` registry imports);
`scripts/build-registry.ts` uses `compile({ root, ...compileOptions })` +
`writeRegistry` instead of a non-existent `RegistryCompiler`/
`combineRegistry`/`writeDocsRegistry` surface. Restored the dropped
`lib/inkeep/inkeep-qa-schema.ts` and declared the inkeep files in the
`ai/hanzo` component.
- apps/docs/next.config.mts: ESM `__dirname` shim via
`fileURLToPath(import.meta.url)`; removed orphaned `createNextStory()`
dead line; declared the `@hanzo/docs` workspace dep the config imports.
- apps/docs/package.json build:pre/post/lint run via `bun` (resolves `@/`
tsconfig aliases) to match every other app — `node` cannot resolve `@/`.
- apps/zen-docs/[[...slug]]/page.tsx: reuse the canonical `getMDXComponents()`
factory instead of an inline components map whose `next/dynamic` wrappers
produced an over-specific `ComponentType` incompatible with
`NestedMDXComponents`.
Verified `next build` GREEN (exit 0, full static gen): spec 245/245,
gui-docs 103/103, zen-docs 129/129, base-docs 19/19. 29/29 packages build
green (fumadocs-preview leaf excluded). The `docs` registry/demo app remains
blocked only on external `@hanzo/iam`/`@hanzo/logo` packages not present in
this tree (the in-flight subject of this branch).
Follow-up to 18f2af90: the package-name normalization covered JS/TS imports +
package.json but missed four other surfaces that name the same phantom packages,
relocating the breakage from 'pnpm install' to 'next/vite/astro build':
- H1: 46 CSS @import strings (@hanzo/docs-{base-ui,ui,openapi}/css/*) → real pkgs
(preserved legit @hanzo/docs-{twoslash,story} CSS)
- H2: examples/astro .astro imports (base-ui/mdx→fumadocs-ui/mdx, docs-core/toc→fumadocs-core/toc)
- L1: .changeset/config.json fixed-array lockstep names
- L2: removed apps/docs/next.config.mts dead phantom→phantom self-alias + dup keys
Found by adversarial red review of 18f2af90.
The fumadocs-fork rebrand left ~13 apps + examples referencing packages under
names that don't exist in the workspace (in BOTH directions: some kept
fumadocs-*, some became @hanzo/docs-*). pnpm install failed outright. Mapped
every reference (deps + imports, 607 source + 61 package.json) to the package
that actually exists, by suffix:
@hanzo/docs-{core,mdx,ui,base-ui} → fumadocs-{core,mdx,ui} / @fumadocs/base-ui
@fumadocs/{story,cli,mdx-remote,tailwind} → @hanzo/docs-{story,cli,...}
fumadocs-{docgen,epub,twoslash,typescript} → @hanzo/docs-{...}
drop phantom eslint-config-custom
Guarded @hanzo/docs-mdx vs -mdx-remote. Also fixes a pre-existing cli bug
(createConfigSchema referenced undefined isSrc) that blocked the package build.
Verified: pnpm install resolves clean (46.8s, was broken); package dist
regenerates phantom-free from the corrected source (hanzo-docs 430→0). Full
app build-green is blocked only by a node v26 toolchain bug in fumadocs-mdx's
config loader (repo targets node >=24.14; CI node builds it).
CF CDN was serving cached JS chunks with old bezier path.
Adding data-v attribute to force a new webpack chunk hash
so the CDN serves the updated circle-based SVG.
Add expert pool specs (3.1T across 6 model families), complexity
tiers (T0-T4), training efficiency (394M/0.013%), model lineup,
training phases, and GitHub link.
Replace hand-drawn bezier path (M256 74 C154...) with SVG <circle>
element. The old path had a visible bend near the top. The new
implementation uses r=172, stroke-dasharray for the draw animation,
and starts drawing from 12 o'clock via rotate(-90).
- packages/zen-models: rename package to @zenlm/models, update all source comments
- zen-docs: fix "Mixture of Distilled Experts" → "Mixture of Diverse Experts" across
all blog posts and docs content (models.mdx, index.mdx, zen-mode-architecture.mdx,
zen4-ultra.mdx, zen5-release.mdx, drop-upcycling-zen-mode.mdx)
- apps/docs: fix brand copy on home page
- Add prominent Zen 5 banner to homepage with live training badge,
three-pillar summary (Zen MoDE / verifiable compute / community data),
and CTAs to research preview, data submission, and live dashboard
- Rewrite docs/models/zen5.mdx: full research preview with architecture
details, Zen MoDE (Mixture of Diverse Experts), open training explainer,
data submission guide with code examples, community rewards, timeline
- Add blog/open-training-hanzo-network.mdx: deep dive on how Hanzo Network
works (TEE, stake bonds, gradient aggregation), what data we want,
submission format + Python API, quality filtering, contributor rewards
- Expand Research section on homepage to feature 3 posts with preview cards
- Add Research footer column: Zen 5, Hanzo Network, Submit data, Blog, Papers
- Import FlaskConical, Network, Database icons for new UI elements
- Replace all 'abliterated/uncensored' language with 'safety research variant'
- Reframe research variants as AI safety research program (red-teaming,
alignment evaluation, robustness testing)
- Fix Zen MoDE scope: Mixture of Diverse Experts, Zen 5 only (not Zen 1-4)
- Remove specific release dates for Zen 5 ('later this year')
- GT-QLoRA blog: remove upstream brand references, reframe as alignment research
- Launch blog: add proper Safety Research Variants section
Auto-generated manifests updated to reflect removal of 37 qwen blog posts.
Browser and server collection manifests now contain only Zen-branded content.
Below the primary CTAs in the hero, add a row of subtle pill-style links
to Hanzo Chat, Hanzo App, API Console, and Hanzo AI. Styled as
rounded-full border pills with muted foreground color and hover state.
Replace fumadocs HomeLayout default nav with a fixed floating pill nav:
- Frosted glass pill (rounded-full) centered at top of viewport
- Logo (ZenEnso 24px) + Zen LM wordmark on left
- Desktop: Models / API / Pricing / Training nav links
- Far right: Login (hanzo.id) + 'Try Zen' CTA (white pill → hanzo.chat)
- Mobile: hamburger → dropdown with same links + CTAs
- Expands to rounded-2xl on mobile open, rounded-full when closed
Launch post covers the full model catalog (100+ models, Apache 2.0),
Zen MoDE architecture, research lineage Zen 1→5, abliterated variants,
and links to hanzo.chat / huggingface.co/zenlm / console.hanzo.ai.
Collaboration post explains the three-org structure: Hanzo AI (infra),
Zoo Labs Foundation (research/governance), Lux Partners (compute layer).
- Remove all qwen*.mdx, qwq*.mdx, qvq*.mdx, codeqwen*.mdx blog posts
which contained verbatim Qwen/QwenLM content with wrong company links
- Update zen-docs to @zenlm/ui@^1.0.6 (perfect SVG circle logo)
- Remove '3x upstream' pricing language from docs index
- Update blog/[slug]/page.tsx to use getAllSlugs() instead of getSortedPosts() for static params
- Sweep all blog MDX files to remove upstream model name references (brand policy compliance)
- Add new blog posts: 7680-dim-embeddings, agent-nfts, bitdelta-behavioral-compression, case-for-decentralized-science
- Delete gspo.mdx and qwen2.5-vl-32b.mdx (consolidated/removed content)
- Remove packages/zenlm-models and packages/zenlm-ui entirely
- Update lib/blog.ts, docs/server.ts, docs/browser.ts for blog infrastructure
- Update pnpm-lock.yaml after package removal
- Remove filled circle that faded in after stroke (pure stroke only)
- Remove cut notch overlay
- Change default color from #A855F7 (purple) to white
- Simplify CSS to single draw animation
- Update zen-docs hero: color="white"
- Bump @zenlm/ui to 1.0.3
- Remove ---Training--- and ---Datasets--- separators from meta.json
to eliminate duplicate "Training > Training" and "Datasets > Datasets"
- Rename training.mdx title to "Fine-tuning Guide"
- Rename datasets.mdx title to "Zen Agentic Dataset"
- Add zen5, zen5-max, zen5-coder model pages with Preview/Request Access
- Add zen5 section to models overview page
- Fix 6 wrong model prices in zen-docs pricing.mdx to match Go billing
controller (zen4-ultra, zen4-max, zen4-pro, zen4-coder-flash,
zen3-nano, zen3-guard)
- Fix zen-models compute tiers to match marketing (Nano $5 through
Power $49, not the old PaaS internal pricing)
- Fix platform AI model prices to include 1.2x third-party markup
(Claude Sonnet $3.60/$18, GPT-5 $1.50/$12, etc.)
- Update base-docs pricing to use marketing tiers matching
platform/visor ($5/$6/$12/$24/$36/$49 instead of PaaS $6-$384)
- Remove hardcoded "14" model counts from MDX docs
- Update to "MCP and ZAP tools" where applicable
- Fix MoDE to MoE for Zen4 architecture references
- Add "Over 1T parameters" to zen-docs landing
- Update zen-models package data
- Replace ⚡ with 🪷 (lotus flower) across nav, footer, docs sidebar
- Add HuggingFace icon link next to GitHub in header nav
- Replace Brain icon: Foundation→Atom, Consumer Line→Orbit, Math→Infinity
- Add proper HF/GitHub SVG icons in footer social links
Replace 126 hardcoded pricing values with DynamicPricing component
that fetches live data from pricing.hanzo.ai/v1/pricing.
Update hero stats: 1M max context, $0.15 starting price.
Update zen4-max flagship card for new specs.
- Landing page: header/footer, pricing, full 49-model catalog, chat widget
- 30 new model MDX pages (44 total across all modalities)
- All code examples updated from openai SDK to hanzoai SDK
- Models index expanded to cover all 10 categories
- API docs and quickstart updated with Hanzo SDK
- Upstream references removed (vLLM/SGLang parsers)
Comprehensive landing page with hero, model tables, architecture
overview, dataset stats, quick start examples, and research papers.
All upstream model references cleaned from docs content.
One canonical package defining every Zen model (45+ models, 14 production API models).
All Hanzo sites (hanzo.ai, hanzo.industries, zenlm.org) import from this package.
No upstream references — Zen MoDE architecture branding only.
Rewrite all 14 model pages and models.mdx to remove third-party
attribution. Position Zen as our own model family with MoDE
(Mixture of Distilled Experts) methodology. Keep factual specs.
- Add Frontier Line (zen-max 671B, zen4-ultra 1.04T, Zen5 2T+) to catalog
- Fix API model context lengths and add zen-max/zen-reranker entries
- Rewrite 9 placeholder model pages with real documentation
- Create zen-reranker.mdx (cross-encoder, Qwen3-Reranker base)
- Add Zen5 coming soon section with research access CTA to homepage
- Add Embedding & Retrieval section to models catalog
- Add API section: index, chat-completions, models, embeddings, pricing
- Update meta.json navigation to include API section
- Update multimodal model names to zen3 generation in models.mdx
Integrate Zen LM documentation as 4th brand in the hanzo/docs monorepo.
16 model docs, getting-started, training, and datasets pages.
Cloudflare Pages deploy workflow at apps/zen-docs.