Files
hanzo.sh-native/index.html
zeekayandHanzo Dev 7ca95cc63c hanzo.sh on @hanzo/ui + @hanzo/gui: no Tailwind, no shadcn, no Radix
The page was a Lovable export: Tailwind 4, 48 generated `components/ui/*` files,
27 Radix packages, and two of everything — a `Navbar` above a `Hero` that drew
its own header, a hand-written footer of `href="#"` links below the real one, and
two dead sections about a banking app that no route rendered. All of it is gone,
and none of its copy is: the install commands, the per-bundle shims, the language
packages, the bundles, the after-install lines and the "Accelerate Development
with AI" section are the same words, now rendered by the design system.

  @hanzo/products  the launcher and the whole footer index — the estate settles
                   that content once; this property declares only its own four
                   nav links and its one call-to-action
  @hanzo/ui        SiteNav, SiteFooter, BrandMark, Panel, StatusTag, ToastProvider
  @hanzo/gui       every primitive, on @hanzo/ui/gui-config — the scale the
                   console and hanzo/sites render against
  @hanzo/design    monochrome, dark by default, Geist Sans + Geist Mono SELF-HOSTED
                   (the CDN @import is gone, so the CR's CSP can be same-origin)
  @hanzo/logo      the mark, through BrandMark

Direct dependencies go from 49 to 12. Zero tailwind/shadcn/radix strings survive
in src/ or in any config, and zero reach the bundle. React Query, react-router,
sonner, cmdk, vaul, recharts, embla, react-hook-form, zod, next-themes and
lovable-tagger went with them — none was doing anything.

Also fixed, because they were in the way:

- The polyglot's `#!/bin/sh <<\EOF` preamble precedes `<!DOCTYPE html>`, so the
  parser puts it at the top of `<body>`: hanzo.sh has been rendering its own
  shebang above its header. Removed before first paint (it cannot be hidden with
  CSS and cannot move in the file).
- Shell commands were not monospace: `$mono` is not a token in gui-config, so
  `fontFamily="$mono"` resolved to nothing.
- Controls were `<div accessibilityRole="button">`, which on web is no role and no
  tab stop. `src/components/Pressable.tsx` renders a real `<button>`.
- Every destination in the header and the footer now clears 44px, via the `link`
  renderers those two components take for exactly this purpose.

Two @hanzo/[email protected] defects are routed around IN PLACE, each with its delete
condition, both documented in LLM.md: `@hanzo/ui/product` statically imports the
optional, Next-only peer `@hanzogui/next-theme` (one tsup chunk holds both theme
toggles), and `SiteNav` writes `$sm` meaning "phone" where v5 defines it as
`minWidth: 640` — inverted, so the phone got the desktop link row.

Verified: `pnpm build` exits 0, `pnpm typecheck` and `pnpm lint` clean, the
Dockerfile's three polyglot assertions hold and `bash dist/index.html --help`
still prints the installer usage. Playwright at 390x844: no horizontal scroll
(scrollWidth 390), 71 interactive elements, all >=44x44 but the inline `uv` link
in a sentence, no console errors, menu opens, copy writes the command to the
clipboard and toasts. Same at 1280x900.

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-28 16:53:26 -07:00

26 lines
1.1 KiB
HTML

<!DOCTYPE html>
<html lang="en" class="t_dark">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="icon" type="image/png" href="/favicon.png" />
<title>Hanzo.sh - Universal AI Development Platform</title>
<meta name="description" content="Install the complete Hanzo AI toolkit in one command. CLI, MCP, Agents, Dev tools — in Python, Rust, or JavaScript." />
<meta name="author" content="Hanzo AI Inc" />
<meta name="color-scheme" content="dark" />
<meta property="og:title" content="Hanzo.sh - Universal AI Development Platform" />
<meta property="og:description" content="One command to install the complete Hanzo AI toolkit." />
<meta property="og:image" content="/og-image.svg" />
<meta property="og:url" content="https://hanzo.sh" />
<meta name="twitter:card" content="summary_large_image" />
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>