10 Commits
Author SHA1 Message Date
zeekayandHanzo Dev 5313260909 Every docs site wears the same chrome
One app carried the Hanzo shell and twenty did not, so a reader crossing from
base.hanzo.ai to zen.hanzo.ai left the ecosystem and landed somewhere that only
resembled it. Five of those twenty had hand-rolled a footer of their own —
sixteen lines of copyright and a repo link, written five separate times.

Each app now loads the brand tokens before its own sheet, reports through
docs-analytics under its own product name, and renders HanzoFooter from
@hanzogui/shell — the same 6-column ecosystem footer, defined once, that
apps/docs already used.

A footer written inside a layout was chrome pretending to be content, and it is
gone. A footer written inside a page is content pretending to be chrome: those
keep their words and become sections, so each page has one contentinfo landmark
instead of two.

Three manifests listed @hanzo/font twice in the same object.

Builds verified across the four shapes this repo has: a static export, a
next.config.mjs app, a single-page app with no route groups, and one that
already reported analytics. Every one renders exactly one footer.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-29 14:29:19 -07:00
zeekay f50ba007b5 Merge remote-tracking branch 'origin/main'
Co-authored-by: Hanzo Dev <[email protected]>
2026-08-29 13:28:54 -07:00
zeekay 7218bcd39c fix(type): every app and every template a customer generates starts on Zen
Thirteen shipped apps and every scaffold in packages/create-app pulled their
face from Google at request time — Inter through next/font/google in the
examples and the four Next templates, Geist and Geist_Mono in the apps, and in
the seven react-router roots a bare <link> to fonts.googleapis.com. That last
one never even applied what it fetched: nothing in those trees set a family, so
the browser downloaded Inter, spent two preconnects on it, and rendered
system-ui. So `create-app` handed a customer a new docs site whose first act was
a third-party font request for a face that is not ours.

The apps read the family back through --font-sans and --font-mono, which are
next/font's handles rather than names of anything, so those follow the binding
over to --font-zen-sans and --font-zen-mono. Eight of them had only ever bound
the mono and were leaning on Tailwind's default for the text face; they now name
both, or swapping the binding would have dropped the body copy to system-ui
without a word.

Zen and ZenMono are built faces, not constructors — subsetting, display: swap
and fallback metrics are already in them — so the call and its options go away.
2026-08-28 11:30:07 -07:00
zeekay 3c7a7d6a03 feat(font): replace Geist with Zen 2026-08-23 13:33:43 -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 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 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 1ddc7d883d feat(docs): integrate project sync into build pipeline, add dark theme and CF Pages deploy
Wire project docs sync into pre-build step, add comprehensive dark theme
CSS variables, integrate ProjectSwitcher into sidebar, and add custom
Cloudflare Pages deployment script with batched uploads and retry logic.
2026-02-10 03:15:38 -08:00
zeekay 7f6941317f feat: add dev-docs app for Hanzo Dev CLI documentation
- New Fumadocs-based docs app at apps/dev-docs/ (port 3003)
- Ported 16+ markdown docs from hanzoai/dev as MDX with navigation
- Landing page with terminal preview, features grid, quick start
- 28 docs pages: getting-started, usage, config, integrations, reference
- Static export to out/ with shiki code highlighting
- CI: add GITHUB_PAGES env, NODE_OPTIONS, SKIP_DTS for faster builds
2026-02-08 23:04:07 -08:00