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 4b114df1: 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 4b114df1.
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).
- 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
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
- 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
- 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.
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.