14 Commits
Author SHA1 Message Date
zeekay d4e0db1673 feat(analytics): docs send through @hanzo/event and the tag manager; the GA4, Pixel, Insights and analytics scripts leave every layout; the one consent banner 2026-09-30 07:15:43 -07:00
zeekayandHanzo Dev 502f131ecf fix(docs-deploy): one registry — ghcr.io/hanzoai/docs (CR pull == CI push)
The docs App CR + pods pull ghcr.io/hanzoai/docs (public), but deploy-docs.yml
built+pushed+patched ghcr.io/hanzo-docs/docs (private) → every operator deploy
ErrImagePull'd (kept alive only by a manual crane-copy). Converge both on the
canonical public ghcr.io/hanzoai/docs per the Hanzo registry rule: CI push target
now equals the CR pull source. Immutable SHA tag only (drop floating :latest).

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-25 07:09:39 -07:00
zeekayandHanzo Dev 54b733538f fix(docs-deploy): declare HANZO_STATIC_CSP so the /reference Scalar API viewer can render
hanzoai/static's default CSP is default-src 'none', which blocks all client JS —
the docs' own interactivity and the Scalar OpenAPI reference at /reference. Set a
secure docs CSP (self + inline/eval for the renderer; object-src/frame-ancestors
still locked) via the App CR env. Already applied live; declaring it here for
durability. (k8s/** is outside the deploy-docs trigger paths, so this is
config-only.)

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-24 17:30:56 -07:00
zeekay 6e51391378 chore(docs): one native deploy path — .hanzo/workflows, drop GitHub-build layers
Consolidate to ONE way (native forge): build+deploy lives in .hanzo/workflows/
deploy.yml (Hanzo Git → act_runner → BuildKit → ghcr.io/hanzoai/docs → App/docs
→ hanzocd). Gut .github/workflows/deploy-docs.yml to a sync-notice (GitHub is a
mirror; .github is sync-only per the native-forge convention). Point docs-app.yaml
at the native image repo (ghcr.io/hanzoai/docs, matching the live deploy). Delete
docs-cd-rbac.yaml (the GitHub-Actions-runner App-patch RBAC — dead now that the
build is native). Removes the duplicate/buggy CF-Pages + GitHub-build layers.
2026-07-24 15:05:45 -07:00
zeekay ece89b2a7b feat(ci): automatic native CD — test gate, operator tag-bump, re-index
Close the loop the docs deploy was missing: push -> build -> TEST -> deploy ->
re-index, no human in it.

- Test gate validates the export (index.html, docs/index.html, docs/services/
  index.html, >=50 pages, /docs carries nav) BEFORE anything ships — exactly the
  empty-export and trailingSlash failures that reached prod before.
- Deploy is operator-driven: patch App/docs .spec.image.tag to the immutable
  built SHA; hanzo-operator reconciles. No floating tag in the cluster, no CI
  kubectl on Deployments. In-cluster runner SA scoped by k8s/docs-cd-rbac.yaml
  to get+patch ONLY app/docs (patch deploy = denied).
- Re-index posts to /v1/index-docs so search + zen-coder-flash chat answer from
  the shipped content (best-effort, never blocks).
- Rips the Cloudflare Pages + docs-router worker path: docs.hanzo.ai serves
  from the in-cluster App via the universe file-provider route. One way.
2026-07-23 02:02:55 -07:00
zeekay 06c8cfb777 feat(docs): canonical hanzo-operator App CR; drop hand-rolled docs-landing
docs.hanzo.ai is now an App CR (like bot-docs/team-docs/analytics) reconciled
by hanzo-operator into Deployment+Service+Ingress. The hand-rolled
docs-landing manifest is superseded: its ingress was never admitted (the
controller routes via the universe file-provider config, not loose ingresses)
and it hard-coded a probe/port the operator derives. Pinned to the built SHA;
CD bumps .spec.image.tag.
2026-07-23 01:57:33 -07:00
zeekay f6de1555b7 fix(docs): trailingSlash export for hanzoai/static + probe / not /health
The native serve 404'd on every /docs/* route: the trailingSlash:false export
writes docs.html AND a docs/ dir, so hanzoai/static opens the dir, finds no
docs/index.html, redirects /docs -> /docs/, and dead-ends 404. CF Pages
tolerated flat .html via its own router; a plain file server needs the
directory-index convention. trailingSlash:true -> docs/services/index.html,
which static resolves in place. One convention, portable across any file server.

Probe hit /health (no such file -> 404 -> httpGet treats 4xx as failure ->
pod killed every ~90s). Point it at / (200, or 301->200) so it passes.
2026-07-23 01:26:08 -07:00
zeekay baa1dd555a fix(ci): push native docs image to ghcr.io/hanzo-docs/docs (own org)
The cross-org push to ghcr.io/hanzoai/docs failed ('permission_denied: The requested
installation does not exist') — the workflow GITHUB_TOKEN can only write packages in
its OWN org (hanzo-docs), not hanzoai. Push to ghcr.io/hanzo-docs/docs instead (same
org as the repo — conventional, self-contained) and point the docs-landing Deployment
at it. Base pull (hanzoai/static:0.4.1, now public) already works; this clears the push.
2026-07-23 00:37:16 -07:00
zeekay 3893a83c56 ingress: drop dead traefik.* annotations (hanzoai/ingress parses ingress.kubernetes.io/* only; these were inert router.tls/entrypoints/v1-redirect syntax) 2026-06-15 11:33:07 -07:00
zeekay 4cf8386851 chore: cleanup k8s + workflow configs 2026-03-25 12:07:05 -07:00
zeekay e649f0c39a chore: cleanup 2026-03-25 01:24:30 -07: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
zeekay e4065ea899 feat: add Docker image build and K8s deployment for docs
Add GHCR image push step to deploy-docs workflow so docs.hanzo.ai
can be served from K8s in addition to Cloudflare Pages.
2026-02-25 00:28:02 -08:00