e956f14f860daef9d6ea5e2b57e94ef1261afdfe
Every rule in the app asks for Geist. On live console.hanzo.ai `document.fonts.size`
was **0**: the two `@import url('https://cdn.jsdelivr.net/npm/geist@1.3.1/…')` were
refused by the browser as cross-origin (ERR_BLOCKED_BY_ORB), so every customer read
the entire product in system-ui. The import ORDER was already fixed once for this
same symptom — the remaining cause was the CDN itself, which is a dependency we do
not control sitting on our own critical render path.
Now served from public/fonts. One VARIABLE file per family spans weights 100-900, so
eighteen static cuts collapse to two requests (56K + 58K) and any weight the design
reaches for already exists — no second place to add a face.
Verified on the real `build:embed` export, not asserted: fonts 0 -> 2,
"Geist 100 900: loaded", document.fonts.check('16px Geist') true, woff2 served 200.
(Geist Mono reports unloaded on the landing page because nothing there sets mono —
correct lazy behaviour.)
fix(console): COPY src/config/build-id.mjs into runtime image (v8.4.90 CrashLoopBackOff: next.config.mjs imports it at boot, was missing -> ERR_MODULE_NOT_FOUND) (#100)
Hanzo Cloud Console
Unified admin console for Hanzo Cloud and all Hanzo cloud products. Built on
@hanzo/gui (cross-platform UI) over the unified /v1
backend (hanzoai/cloud). Dark theme, OIDC sign-in via Hanzo IAM.
Manages: Providers · Models · Applications · Stores · Chat — with an extensible product-module registry so every cloud product can be added as a module.
Quick start
npm install
cp .env.example .env.local
# set NEXT_PUBLIC_IAM_CLIENT_ID for live sign-in; defaults point at production.
npm run dev # http://localhost:4000
Scripts
| Script | What |
|---|---|
npm run dev |
Dev server on :4000 |
npm run build |
Production build (type-checks; Gui CSS injected at runtime) |
npm run start |
Serve the production build |
npm run typecheck |
tsc --noEmit (strict) |
Configuration
All config is NEXT_PUBLIC_* (browser app, cookie auth). See .env.example.
| Var | Default | Meaning |
|---|---|---|
NEXT_PUBLIC_CLOUD_URL |
https://cloud.hanzo.ai |
Unified /v1 backend base URL |
NEXT_PUBLIC_IAM_URL |
https://iam.hanzo.ai |
Hanzo IAM OIDC authority |
NEXT_PUBLIC_IAM_APP_NAME |
hanzo-console |
IAM application (<org>-<app>) |
NEXT_PUBLIC_IAM_ORG_NAME |
hanzo |
IAM organization |
NEXT_PUBLIC_IAM_CLIENT_ID |
— | OAuth client id |
Architecture
See LLM.md for the full design (base choice, /v1 client, auth flow, the product-module registry, and the Providers surface). Endpoint reference in docs/endpoints.md.
License
BSD-3-Clause. Copyright (c) 2026-present, Hanzo AI, Inc.
Languages
TypeScript
99.1%
JavaScript
0.5%
CSS
0.4%