Commit Graph
34 Commits
Author SHA1 Message Date
zeekay 3c7a7d6a03 feat(font): replace Geist with Zen 2026-08-23 13:33:43 -07:00
zeekay 699b060a04 name the product, not the engine, where the relational store is described
The data products are Hanzo SQL, Hanzo SQLite, Hanzo DocDB and Hanzo
Datastore. Customer-facing prose named the upstream engine instead, which
reads as a resale rather than a product — and reads that way beside pages
that already say Datastore for the columnar store.

Fifteen lines of prose across base, insights, tasks and platform, plus the
three repo descriptions the project pages are generated from, so the next
sync of orm and sql-vector is a no-op rather than a revert.

Measured over the hand-authored surface: 77 lines matched `postgres`, now
63. Every one of the 63 is a literal that breaks if renamed, and each was
read before it was left — connection-string schemes, POSTGRES_* names, mount
paths, Temporal's postgres12 driver value, image references, a compose
service name and the k8s Service DNS that must agree with it, the
postgresConnectionRef CRD field, the mcp-server-postgres package, the
pg_isready role, and an integration catalog of third-party software.

The rendered export shows both halves: platform prints `sql-prod-data` and
still prints `postgres://`, `postgres:17-alpine` and `pg_isready -U postgres`
byte for byte.

openapi-specs/public.yaml holds five more and is not editable here. It is a
sha256-pinned snapshot of cloud's contract, and that prose has one home — the
handler doc comment that also becomes the SDK docstring, the MCP tool
description and the CLI help.
2026-08-21 09:30:25 -07:00
1e0f2f9bc6 docs: delete the object-store documentation that was never ours
content/docs/projects/hanzoai/s3/ held 218 files of another project's server
documentation, published under our name at /docs/projects/hanzoai/s3: 11 MB,
23 Go files carrying AGPL-3.0 headers, and five go.mod files declaring that
project's module path. Its own meta.json lists exactly one page, `index`, so
none of it was reachable from the nav either -- a snapshot nobody navigated to
and nobody had read since it landed. What stays is the two-file placeholder
every repo without docs gets, so the route still resolves.

The rest is small and first-party: a table row, a retention sentence, a vendor
list, and S3_ENDPOINT in base-platform.yaml, which named a Service that exists
in no namespace -- our object store answers on s3.hanzo.svc:9000.

The two redirect source paths in public/_redirects keep the old spelling on
purpose. They are the URLs the deleted pages were published at, so they have
to match to catch an old link; the comment above them now says what the object
store is instead of what it is not.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-19 21:07:54 -07:00
zooqueen 7df26e55b3 the docs call our services by their names
Datastore, SQL, KV and DocumentDB — the four Kinds HIP-0401 through HIP-0404
define. 112 files.

Left as written: DSN schemes, the env an image reads, package and extension
names, version requirements a reader must match, the wire protocols DocumentDB
and KV implement, and the fork provenance and licence on the pages that are
about the fork.

Box art keeps its width.
2026-08-14 20:57:34 -07:00
zeekayandHanzo Dev 01a12d457b sidebar: give every section separator an icon
Measured across apps/*/content/**/meta.json: 76 separators, 2 with an
icon, 74 without. A bare "---Title---" renders as naked text between
icon-bearing rows, so the majority case looked like the broken one.

72 of 76 now carry one. The remaining 4 are in
content/docs/projects/hanzoai/python-sdk/, which is gitignored upstream
content mirrored by scripts/sync-project-docs.ts — this repo's rule for
ported docs is "port, don't re-author", and an edit there is overwritten
on the next sync anyway.

11 of the 72 could not be fixed by editing the file. services/meta.json
is REGENERATED from the @hanzo/products catalog on every build:pre, so a
hand-added icon survives until the next build and no further. The map
lives in the generator instead. It lives there and not in @hanzo/products
because the catalog owns the taxonomy while how a category is DRAWN is a
docs concern; putting it upstream leaks presentation into the product
catalog. A category with no entry now warns by name rather than quietly
shipping a bare separator again.

One vocabulary, reused on purpose: the same idea takes the same mark
everywhere (Getting Started/Setup -> Rocket, Commands -> Terminal,
Reference -> BookOpen, Security -> ShieldCheck, ...). Every name is a
verified lucide export; an unknown one would not fail the build, it would
warn and render nothing, which is the state this commit removes.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-06 00:36:31 -07:00
zeekayandHanzo Dev bdd873596f docs: restore the platform API pages against cloud's REAL routes
Reverses my own deletion of api/{vms,containers,clusters}.mdx. I deleted them
because platform's dokploy root.ts registers no cluster/vm/container router and
the dotted tRPC form 404s. Both facts are true and the conclusion was still
wrong: those capabilities DO exist, in cloud's visor and platform apps, under
different names. Rewriting beats deleting when the surface is real.

Mapped to source, each probed 403 against a 404 bogus control:
  vm.all       -> GET /v1/machines                        visor.go:143
  vm.one       -> GET /v1/machines/{id}                   visor.go:149
  vm.launch    -> POST /v1/machines {name,size,region,dryRun}  visor.go:148
  vm.destroy   -> DELETE /v1/machines/{id}                visor.go:151
  cluster.all  -> GET /v1/clusters                        visor.go:184
  cluster.one  -> GET /v1/k8s/clusters/{id}               visor.go:208
  cluster.create -> POST /v1/k8s/clusters | POST /v1/clusters (BYO)
  addNode/removeNode -> pool ops: POST /v1/clusters/{id}/pools[/{pool}/scale]
  container.*  -> /v1/platform/projects/{project}/apps...  platform.go:230

Operations with no route are DELETED, not invented: vm start/stop/restart,
vm volumes, web terminal, cluster update/rename, per-cluster access grants.
The pages now say so instead of documenting them.

Two /api/ remain and both are correct: captable.mdx:159 describes the
SELF-HOSTED Next.js route handlers (and states the hosted service serves
neither), and platform api/index.mdx links doc-site routes (/docs/api/...),
which are directory names, not endpoints.

Nav restored for the three pages. Dangling meta.json entries: 15, vs 22 on
origin/main -- still a net improvement, none introduced.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-05 16:06:26 -07:00
zeekayandHanzo Dev 38117c3d98 docs: close the last /api/ and put every proven API call on api.hanzo.ai
ZERO hosted /api/ across apps/ (was 273 on origin/main).

The last three were endpoints nobody serves. Replaced with what is real,
each proven on api.hanzo.ai against a 404/19 bogus control:
  console.hanzo.ai/api/public/metrics/cost -> /v1/billing/usage        (401)
  app.platform.hanzo.ai/api/environment.approveDeployment -> deleted; there is
    no approval op. The block now shows GET /v1/environments (403) and
    POST /v1/platform/projects/:project/apps/:app/deploy (403), which are real.
  app.platform.hanzo.ai/api/volume.create -> deleted; storage has no HTTP surface.

Roles/memberships/orgs are IAM's, not the platform's, so those examples move to
the ops that exist: /v1/iam/update-role, /v1/iam/add-membership,
/v1/iam/get-organizations, /v1/iam/get-user (401 each, bogus 404/34).

Per-service hosts are apps and consoles, never API bases: iam./kms. normalised
onto api.hanzo.ai/v1/{iam,kms}. platform.hanzo.ai/v1/git-webhook stays -- it is
a receiver GitHub POSTs to, not a customer API base, and api.hanzo.ai does not
proxy it (404).

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-05 15:22:07 -07:00
zeekayandHanzo Dev d51ee1a4fb docs: one API host — api.hanzo.ai/v1/<service>, and delete the platform pages for routers that do not exist
Proven against api.hanzo.ai with a discriminating bogus control (404/19):
  /v1/iam/oauth/logout 200 · /v1/esign/documents 403 · /v1/flow/workflows 403
  /v1/kms/health 200 · /v1/o11y/traces 403 · /v1/bot/integrations 403
Per-service hosts (iam./kms./esign./flow.) are apps and consoles, never API
bases, so every API example now points at the one host.

Corrects an earlier claim of mine: iam.hanzo.ai/api/sso-logout -> /v1/sso-logout
was NOT verified. That host returns 200/654 for EVERY path including
/v1/zzz-bogus -- a catch-all page, so the 200 proved nothing. IAM has no
sso-logout route at all; the real one is /v1/iam/oauth/logout (internal/oidc/oidc.go:28).

Deleted apps/platform/content/docs/api/{vms,containers,clusters}.mdx: platform's
root.ts registers no cluster, vm, container, volume or orgTeam router, and the
dotted procedure form 404s on the API host. They documented an API that does not
exist. Nav pruned to match.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-05 15:17:30 -07:00
zeekayandHanzo Dev cbc7903b9b docs: collapse the KMS Infisical mirror to the surface we actually serve
The KMS docs were a 549-file vendored Infisical mirror documenting a v2/v3
API that exists nowhere in our estate. Ground truth, from source:

  cloud/apps/kms/mount.go registers exactly seven routes --
    GET/POST   /v1/kms/health, /config, /auth/login
    GET/POST/DELETE /v1/kms/secrets[/+]
  lux/kms (the standalone binary) registers ZERO /api/ routes in Go; the
    only /api/v3 strings live in a vendored SPA under cmd/kms/web/assets,
    JS calling an API nobody serves.

So rewriting /api/v3/secrets/raw to /v1/kms/secrets/raw would have
fabricated a surface: probed live, /v1/kms/secrets/raw and
/v1/kms/secrets/zzz-not-real both return 403, i.e. secrets/* is a wildcard
behind an auth wall and "raw" is not demonstrated to exist. A doc that says
nothing beats a doc that 404s -- so the mirror is deleted, not translated.

549 files -> 7, and both meta.json nav files pruned to pages that exist.
This also retires app.kms.hanzo.ai, an NXDOMAIN host the mirror cited 351
times.

Two edits here look like damage and are not; both verified against source:
  - base-docs k8s probe /api/health -> /healthz is CORRECT. base
    apis/health.go:14 binds /healthz at root ("platform standard"), with
    /health only under the API group.
  - the ported ingress docs /api -> /v1/ingress is CORRECT. hanzoai/ingress
    is our Traefik fork and it renamed the prefix: pkg/api/handler.go:94-120
    serves /v1/ingress/rawdata, /overview, /entrypoints, ...

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-05 15:07:33 -07:00
zeekayandHanzo Dev ded3c68611 platform docs: the org and environment curls hit a route that answers
Ten curl examples on app.platform.hanzo.ai pointed at /api/<procedure>.
That prefix 404s. The same procedure under /v1/ answers 401 — the route is
there, it just wants the token the example already passes.

Probed each one before and after: 404 -> 401 on all ten. Only endpoints
verified that way are touched; the rest of the /api/ curls on this host are
left as found rather than guessed at.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-05 14:17:00 -07:00
zeekayandHanzo Dev 012a1a2d4e fix(collections): generate the content collections into one place
`@hanzo/docs-mdx` writes the collection modules to its outDir, `.docs/`.
Nothing read them there. Apps read a committed `docs/` copy instead, reached
three different ways:

  13 apps  `@hanzo/mdx:collections/server` + a webpack alias -> ./docs/*.ts
   3 apps  `@/docs/server`, straight into the committed copy
   2 apps  the alias, with no committed copy at all

The two with no copy — bootnode-docs and tasks-docs — could not build:

    ./lib/source.tsx
    Module not found: Can't resolve '@hanzo/mdx:collections/server'

and four more built from a copy that no longer matched the content beside it:

    ./docs/server.ts
    Module not found: Can't resolve
      '../content/docs/reference/templates/USER.mdx?collection=docs&only=frontmatter'

That is what committing generated code buys: the build reads a snapshot of
the content rather than the content.

One name, one location, every app: `@hanzo/mdx:collections/*`, resolved to
`.docs/` — the generator's own output, rewritten on every build, gitignored.
`tsconfig` gains the matching `paths` entry so the specifier type-checks
instead of relying on `ignoreBuildErrors`; apps/docs stops overriding outDir
in both `next.config.mts` and `gen:collections`; turbo caches `.docs/**`. The
16 committed mirrors are deleted. Examples already did it this way.

`.source` goes with them — this fork's outDir has been `.docs` for a while,
leaving `.source` in the vite plugin's JSDoc, an example's import map, an
oxlint ignore and `.gitignore` pointing at a directory nothing writes.

Also declares in `globalEnv` the env vars the build scripts actually read
(HANZO_DOCS_SYNC, HIPS_REPO_DIR, DOCS_SECTION, the search vars...). Turbo
does not forward undeclared vars, so `HANZO_DOCS_SYNC=0 turbo run build` had
no effect on the sync it names.

  turbo run build --filter='./apps/*' --continue
    before  Tasks: 33 successful, 40 total
            Failed: bootnode-docs, docs, engine-docs, ml-docs, router-docs,
                    spec, tasks-docs
    after   Tasks: 38 successful, 40 total
            Failed: docs, spec        (both for unrelated reasons, fixed next)

(cherry picked from commit 3d11394b092530489b60931e46b4938a88a2bdd5)

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-04 18:39:19 -07:00
zeekayandHanzo Dev bd5f994a05 wip: preserve agent work interrupted by session limit
(cherry picked from commit e7522b71172874f6624eb45e09a78f013f287270)

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-04 18:39:19 -07:00
zeekayandHanzo Dev 409784ec52 docs: stop describing our own models as someone else's
Zen and enso are Hanzo's own families. Several surfaces described them by
whose API they imitate, or filed them under a competitor's namespace.

- zen-docs embeddings: drop the "Upstream: text-embedding-3-large by OpenAI"
  row that presented zen-embedding as a rebadge; correct dimensions to the
  1024 the gateway actually returns.
- zen-docs pricing: Zen was priced as "3x the upstream Fireworks inference
  cost", with a claim that every model page discloses its upstream model and
  provider. Rates are per model; state that instead. Same framing removed
  from platform pricing.
- bot-docs gateway config: "anthropic/zen5" -> "hanzo/zen5"; hanzo is the
  provider id Bot actually uses (src/commerce/tier-model.ts).
- zen-docs: curl and the Hanzo SDKs lead; upstream-SDK samples move below a
  labelled wire-compatibility section. Anthropic Messages page keeps its
  substance, loses the drop-in framing.
- Marketing sites: replace provider/model resell counts used as positioning
  with what the product is. Our families lead the model grid; third-party
  rows stay, since those integrations are real.
- Neutral placeholder for a proxy key in our own samples.

Provider lists Bot genuinely connects to (LM Studio, vLLM, LiteLLM) are left
alone, as is the zen5 expert-pool table, which is real architecture lineage.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-01 16:09:01 -07:00
zooqueenandHanzo Dev b86b6f1f97 ui: one spelling of the fork in apps/docs, and a types:check that runs
apps/docs imported the same component library under three names — 11 files
from `@hanzo/docs/ui/*` (a pure re-export shell), 10 from `@hanzo/docs-ui`
(the Radix fork), plus 5 hand-copied shadcn files under components/ui.
All of it now resolves to `@hanzo/docs-base-ui`.

The 5 local copies are deleted. badge, hover-card, select and the container
card move into base-ui on `@base-ui/react` — preview-card is the hover-card
analog and Select.Value already takes `placeholder`, so the swap is 1:1 and
introduces no Radix. buttonVariants gains `xs`/`md`/`lg` and `link`, purely
additive, so no existing caller changes. Three Radix packages leave
apps/docs; `presence` and `tooltip` stay because non-shadcn code uses them.

global.css now takes base-ui's preset rather than the Radix fork's. The two
are not duplicates: `neutral.css` defines the colours, `preset.css` carries
base styles plus the `@source inline` safelists. Only `default-colors.css`
declares a `--color-fd-*` value, and it is byte-identical across both forks,
so no colour moves.

`types:check` never ran. pnpm installs the mdx bin scope-stripped as
`docs-mdx`, so `@hanzo/docs-mdx &&` died at `sh: no such file` and took
`tsc` with it — silently, in every app, for `lint` too. Fixed in all 32
scripts. apps/docs reports 107 first-party errors; that is the real number,
unchanged by this commit.

Also unbreaks two undefined references in openapi's server entry that a
large upstream merge left behind: PlaygroundAuthProvider was used but never
imported, and pickSchema/encodeInternalRef were orphaned utilities. Both
crashed the docs export. More remain in that package (renderResponse is a
missing function, not an import) — noted, not guessed at.

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-31 18:42:18 -07:00
zooqueenandHanzo Dev ed3285d93d deps: one set of versions, and a transpile list that actually applies
Three things the workspace disagreed with itself about.

Versions. apps/docs ran ahead on next 16.2.6 / react 19.2.6 / TS 6, the other
21 apps trailed on next 16.1.6 / react 19.2.3 / TS 5.9.3, and the packages sat
somewhere between with five different @types/react pins. Everything is now on
the newest patch of the line it was already on — react 19.2.8, next 16.2.12,
@types/react 19.2.18, @types/react-dom 19.2.4 — and the TS-5 stragglers join
the TS 6.0.3 the root and every package already used. No majors were invented:
6.0.3 IS the top of the 6.x line, and TS 7 is blocked because [email protected]
declares `typescript: ^5.5.0 || ^6.0.0`.

The duplicate key. next.config.mts declared `transpilePackages` twice in one
object literal, so the later list won and @hanzogui/shell and @hanzo/brand had
never been transpiled — the comment explaining why they must be outlived the
setting it described. tsc had been reporting this the whole time as
next.config.mts(193,3) TS1117; the app's `types:check` never reaches tsc (its
script starts with a bare `@hanzo/docs-mdx`, which is not the bin's name and
fails immediately), so nobody saw it. One list now, both groups in it.

Dead weight. Twelve packages apps/docs declared and no file, config, script or
browserslist field referenced: @radix-ui/react-dialog, @floating-ui/react-dom,
@mixedbread/sdk, @orama/orama, openapi-sampler, react-remove-scroll,
algoliasearch, gray-matter, tinyexec, tinyglobby, @types/three (types for a
package that isn't installed) and shadcn (no components.json exists anywhere in
the repo, so the CLI was never initialized). The ones that are real
dependencies of packages/openapi, packages/core and packages/cli keep their own
copies — pnpm's node_modules is isolated, so nothing lost a resolution.
@orama/core stays: apps/docs/app/static.json/route.ts pulls OramaDocument
through @hanzo/docs-core/search/orama-cloud, which types against it.

Verified against a clean worktree at HEAD, since the working tree carries
gigabytes of untracked synced project docs that CI never checks out:

  turbo build, apps + packages    43/52 before, 43/52 after, same 9 failures
  docs export                     1764 html pages, byte-identical page count
  deploy.yml gate                 index/docs/services present, /docs has nav
  tsc --noEmit in apps/docs       325 errors before, 324 after (the TS1117)
  vitest                          169 passed / 13 failed, both sides

The 9 build failures and 13 test failures are unchanged from HEAD and none are
version-related: 7 sibling apps cannot resolve @hanzo/mdx:collections/server
under `next build --webpack`, zen-docs has a committed docs/server.ts importing
a deleted zen5-coder-flash.mdx, and packages/preview cannot resolve its own
@/lib/source alias under waku/vite.

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-31 17:41:08 -07:00
zeekayandHanzo Dev eec172cbc2 feat(analytics): every docs site on the ONE /v1/event door, not the Umami tag
The <script src="analytics.hanzo.ai/script.js" data-website-id> tag is a shim:
it talks to a read LENS instead of the one ingestion front door, so a docs site
could only ever produce pageviews — no errors, no product events, and a separate
per-site id to keep in sync. Replaced across all 12 sites with @hanzo/event
POSTing api.hanzo.ai/v1/event, which Cloud fans server-side into the web
(analytics), product (insights) and error (sentry) lenses. `product` is the only
per-site knob; Cloud resolves the tenant, so no site carries an id any more.

One implementation, not twelve: packages/analytics (@hanzo/docs-analytics)
mounts the provider, adds a pageview per client-side route change, and honors
Global Privacy Control / Do-Not-Track by disabling the client outright. The main
hub's inline Insights snippet goes too — that lens is already fed by the one
stream.

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-25 13:34:22 -07:00
zeekay 8e231e92ee fix(brand+serve): docs is not an AI gateway; pin canonical static v0.5.1
Our own docs branded a Hanzo product as an 'AI Gateway' (/docs/llm title+H1,
skills index, and ~90 files across docs/bot-docs/cloud). Renamed to 'AI API'
to match hanzo.ai/app/bot. Third-party product names are facts about someone
else's product and are NOT rewritten: 'Vercel AI Gateway' restored verbatim
(same carve-out as LiteLLM); HanzoBot's own 'Gateway' transport untouched.

Pins ghcr.io/hanzoai/static 0.4.1 -> v0.5.1: only v0.5.1 carries 79ac4f9
(serve directory index in place), so docs was the last host 301ing /docs/x/
-> /docs/x/index.html, which poisons Next's router into prefetching
.../index.html/__next._tree.txt — 8 failed requests per page load.
2026-07-25 12:56:52 -07:00
zeekayandHanzo Dev 2f166e678c docs(brand): reframe "LLM Gateway"/LiteLLM copy → Hanzo AI Gateway; canonical SDK links
Purge "LLM gateway" / "unified proxy" / vs-LiteLLM framing across all
Hanzo-authored docs, marketing, and skill copy per SDK-ARCHITECTURE brand
rules. Hanzo is a full AI SDK / AI cloud, not a proxy.

- "LLM Gateway" → "AI Gateway"; hero/positioning copy → "one API for every
  model". "unified proxy"/"unified gateway" removed from Hanzo copy.
- Drop "Fork of LiteLLM" / LiteLLM-as-backbone positioning. Keep genuine
  third-party LiteLLM integration docs, the bot's own WebSocket Gateway
  protocol, and functional config keys (litellm_params, LITELLM_MASTER_KEY)
  intact.
- SDK links → canonical homes: zen-docs API table (go get
  github.com/hanzo-go/sdk, pip install hanzo, npm i @hanzo/ai, cargo add
  hanzo); org preset SDK entries point js-sdk→hanzo-js/sdk,
  python-sdk→hanzoai/python-sdk (flagship).

Generated/synced trees (apps/spec/content/docs HIP corpus and
projects/hanzoai/bot, both gitignored) are out of this repo's committable
scope — their brand fix belongs in the source repos.

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-24 12:56:00 -07:00
zeekay ada2f3d2ab rebrand: complete white-label — all packages @hanzo/docs-* (one brand)
Finish the fumadocs→Hanzo Docs rebrand: rename the remaining fuma-named
workspace packages and every reference so the framework is uniformly
@hanzo/docs-*. One brand, no Fuma in package names or product surface.

Package renames (name field + all refs: deps, imports, CSS @import,
configs, .changeset, next/vite build config):
  fumadocs-core        → @hanzo/docs-core
  fumadocs-mdx         → @hanzo/docs-mdx
  fumadocs-ui          → @hanzo/docs-ui          (packages/radix-ui)
  fumadocs-openapi     → @hanzo/docs-openapi
  fumadocs-preview     → @hanzo/docs-preview
  @fumadocs/base-ui    → @hanzo/docs-base-ui
  @fumadocs/basehub    → @hanzo/docs-basehub
  @fumadocs/language   → @hanzo/docs-language
  @fumadocs/local-md   → @hanzo/docs-local-md
  @fumadocs/sanity     → @hanzo/docs-sanity
  @fumadocs/shadcn     → @hanzo/docs-shadcn
  @fumadocs/vite       → @hanzo/docs-vite
  @fumari/stf          → @hanzo/docs-stf
  create-fumadocs-app  → @hanzo/create-docs
  create-fumadocs-versions → @hanzo/docs-create-versions

Stale @fumadocs/{cli,story,tailwind,mdx-remote,...} references collapsed to
their existing @hanzo/docs-* canonical packages (no dup created).

De-branded product strings: Fumadocs/Fuma prose → Hanzo Docs/Hanzo; site
branding, CLI output, doc copy, AI-assistant name, metadata. URLs
fumadocs.dev → docs.hanzo.ai, repo fuma-nama/fumadocs → hanzoai/docs.
Filesystem renames: packages/python/fumapy → hanzodocs_py, preview config,
what-is-fumadocs.mdx → what-is-hanzo-docs.mdx, api/fumadocs-ui route.

KEPT (real external npm deps / attribution — NOT renamed):
  fuma-cli, fuma-content, @fumari/json-schema-ts (published upstream pkgs),
  typesense-/trieve-fumadocs-adapter (3rd-party search adapters),
  LICENSE "Copyright (c) 2023 Fuma" (OSS attribution, all 7 LICENSE files
  untouched), CHANGELOG.md history (accurate release records, left as-is).

Build: node 24, pnpm install clean; all 4 target apps next build GREEN
(spec, gui-docs, zen-docs, base-docs) + full package closure (18/18 turbo).
Gate: zero @hanzo-package fumadocs-/@fumadocs/ references remain.
2026-06-24 23:21:42 -07:00
zeekay c49aa996fd fix(docs): normalize phantom names in CSS/astro/changeset/next-config (red review)
Follow-up to 903b1c38: 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 903b1c38.
2026-06-24 15:52:22 -07:00
zeekay 868938c48b fix(docs): normalize phantom workspace package names — monorepo installs again
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).
2026-06-24 15:17:27 -07:00
zeekay 97ef1409e4 fix: /healthz in all docs, remove nginx/caddy/PocketBase refs 2026-04-09 18:35:46 -07:00
zeekay 4cf8386851 chore: cleanup k8s + workflow configs 2026-03-25 12:07:05 -07:00
github-actions[bot] 148489dc34 Version Packages 2026-03-25 01:42:39 +00:00
zeekay 47185dba0a docs: update IAM documentation and service guides 2026-03-03 20:59:18 -08:00
zeekay fc278dffc2 fix(docs): neutralize amber warning colors and force dark fd- vars across all apps
- Add --color-fd-warning/idea/info/error/success: hsl(0,0%,96%) to all 7 apps
  to override neutral.css @theme static amber (oklch 76.9% 0.188 70.08)
- base-docs, zap-docs, zt-docs: add full dark :root { color-scheme: dark; --color-fd-* }
  block (were missing dark fumadocs variable overrides, defaulted to light)
- bot-docs, dev-docs, platform, visor: amber fix only (already had dark overrides)
- Fix base-docs sitemap.ts: add export const dynamic = 'force-static' for static export
2026-02-28 18:24:37 -08:00
zeekay 49e891b461 feat: add Hanzo Analytics tracking to all docs apps 2026-02-28 11:33:04 -08:00
zeekay 42f167196d Make all model pricing dynamic via pricing.hanzo.ai API
Replace hardcoded model prices across all docs surfaces with
client-side fetches from pricing.hanzo.ai/v1/pricing. Static
fallback values remain in zen-models for SSR/build time.

Changes:
- zen-models: fix 10 wrong static prices, add fetchPricing() API
- zen-docs: new DynamicModelTable component for MDX pages
- zen-docs: pricing.mdx, models.mdx, api/models.mdx, index.mdx
  all use dynamic tables instead of hardcoded price columns
- platform: extract DynamicAiModels component, remove static array
- bot-docs: extract DynamicTokenPricing, fetch live per-1K rates
2026-02-27 11:44:28 -08:00
zeekay bbf7157338 Align all pricing across Hanzo ecosystem
- 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)
2026-02-27 11:27:25 -08:00
zeekay 2056631148 Update auto-generated doc collection imports 2026-02-27 10:44:53 -08:00
zeekay b56beb082f Remove stars/nebula effects from platform and visor sites 2026-02-27 10:43:18 -08:00
zeekay 8cdc1c0022 fix: update SDK docs and platform pricing to current model names
claude-sonnet-4-5-20250929 → claude-sonnet-4-6, gpt-4o → gpt-5,
llama-3.1-70b → llama-4-maverick across all SDK examples and
billing FAQ.
2026-02-27 10:35:53 -08:00
zeekay 7bceacd071 Add visor.hanzo.ai site + platform pricing page
- New visor-docs app: VM management landing + docs + pricing (41 files)
  - 6 VM tiers, GPU pricing, block storage
  - 11 MDX doc pages (providers, features, API)
  - K8s manifests + Dockerfile + nginx
- Add /pricing page to platform site
  - Cloud VMs, K8s pods, Docker containers, AI models
  - Feature comparison table, enterprise CTA
- Add Pricing nav link to platform layout
- Fix platform Dockerfile to use simple nginx pattern
2026-02-27 10:28:27 -08:00
zeekay 28741c5fd2 feat: add platform docs with full API reference
Adds the Hanzo Platform documentation app with 47 MDX pages covering:
- Getting Started (overview, quickstart, concepts, CLI)
- Deployments (Kubernetes, Docker Swarm, Compose, Git, Registry, Domains)
- Clusters (fleet, registration, provisioning, node pools)
- Virtual Machines (AWS, DigitalOcean, Hetzner, volumes, terminal)
- Access Control (organizations, roles, permissions, invitations)
- Pricing (plans, compute, storage)
- API Reference (authentication, organizations, clusters, containers, VMs)

Also adds team app and K8s deployment manifest for platform-site.
2026-02-26 22:05:27 -08:00