Files
zooqueen 75c4f1f641 One product answers with one name, route, command and docs page
The CLI lines on the product pages were written from the product name -- hanzo
dns zones, hanzo kms keys -- and several were not commands the binary has. So the
command moves into lib/product.ts, which assembles the rest from what is already
stated: the catalog names the product and its route, pages.json names what the
catalog does not carry, and products-metadata answers for docs, where null means
docs publishes nothing and the link drops.

Every CLI line in that table was run against the binary. A product absent from it
has no command and its page prints none; nothing composes a verb out of a name.
Both blocks that draw it import the Product type rather than declaring their own,
which leaves the table the only place a command can be written.

The catalog also moves out of package.json into pnpm-workspace.yaml, where pnpm
reads it, so the versions are stated once.
2026-09-06 23:18:24 -07:00

80 lines
3.8 KiB
TypeScript

'use client'
import { ArrowRight, Boxes, Cpu, Gauge, Layers, Server, Shield, Zap } from 'lucide-react'
import { ProductLanding } from '@/components/product/ProductLanding'
import { ProductFooter } from '@/components/products/ProductFooter'
/**
* Hanzo Engine, through the ONE product kit.
*
* The largest cluster left: TWELVE pages — engine, gateway, guard, ingress,
* jin, metrics, o11y, operator, sentinel, skills, telemetry, visor — at 85%+
* identical className sets, each a hero, a six-card grid and a call to action
* written out again. All twelve pass one typed props object to
* `ProductLanding`. See LLM.md, "Tailwind is NOT gone".
*
* EVERY WORD IS THE ONE THAT WAS HERE. ProductFooter came out of the final
* card's `max-w-3xl` wrapper, where it had been rendering narrower than on
* every other product page.
*/
export default function HanzoEnginePage() {
return (
<>
<ProductLanding
badge={"hanzoai/engine"}
badgeIcon={Cpu}
title={"Hanzo Engine"}
tagline={"The inference engine, in one binary"}
lede={"Name a model on Hugging Face and it runs. Engine quantizes it for the hardware it finds, then serves an HTTP API and a web chat from the same process — text, vision, audio, speech, image and embeddings, without a second stack underneath."}
ctas={[
{ label: "View on GitHub", href: "https://github.com/hanzoai" },
]}
what={{
title: "One process, laptop to GPU cluster",
sub: "Chat, an API server, and a benchmark are three commands on the same binary. There is no Python interpreter under any of them.",
pillars: [
{
icon: Zap,
title: "run, serve, bench",
body: "One binary, three verbs. Chat with a model, put it behind an HTTP API, or measure it — the thing you benchmarked is the thing you shipped.",
},
{
icon: Gauge,
title: "Built to serve, not just to run",
body: "Paged attention and continuous batching keep the card busy across concurrent requests. A disk-first KV cache carries a session across a restart, so an agent that reuses a long prefix does not pay for it twice.",
},
{
icon: Layers,
title: "More than text",
body: "Vision, audio, speech, image and embeddings go through the same modality pipeline as generation, in the same process. A multimodal app is one deployment, not four.",
},
{
icon: Boxes,
title: "It quantizes on the way in",
body: "In-situ quantization of any Hugging Face model, plus GGUF from 2 to 8 bits, GPTQ, AWQ, HQQ, FP8 and bitsandbytes. Ask for a level and it takes a published prebuilt when one exists, or makes one when it doesn't.",
},
{
icon: Server,
title: "The silicon you have",
body: "CUDA with FlashAttention and multi-GPU tensor parallelism, Metal on Apple Silicon, or plain CPU. Same engine and same commands on each, and a doctor command that reports what it found.",
},
{
icon: Shield,
title: "Tools, and a UI to watch them",
body: "It can call MCP servers over a process, HTTP or a WebSocket. The built-in UI at /ui shows reasoning, code execution and plots inline, and edits branch a conversation with its own state. Pass --no-ui and it is a plain API server.",
},
],
}}
finalCta={{
title: "Get started with Hanzo Engine",
buttons: [
{ label: "View on GitHub", href: "https://github.com/hanzoai" },
],
}}
/>
<ProductFooter slug={"engine"} name={"Engine"} />
</>
)
}