mirror of
https://github.com/hanzo-apps/hanzo.ai.git
synced 2026-10-30 14:58:08 +00:00
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.
93 lines
4.4 KiB
TypeScript
93 lines
4.4 KiB
TypeScript
'use client'
|
||
|
||
import { ArrowRight, Apple, Bot, Brain, Cloud, Lock, MonitorSmartphone, Settings, Wifi, Zap } from 'lucide-react'
|
||
import { ProductLanding } from '@/components/product/ProductLanding'
|
||
import { ProductFooter } from '@/components/products/ProductFooter'
|
||
|
||
/**
|
||
* Hanzo Desktop, through the ONE product kit.
|
||
*
|
||
* A fourth cluster of the same duplicated shape — computer, desktop, gallery
|
||
* and world scored 83–97% identical on their className sets. Hero, a six-card
|
||
* grid, a call to action, written out four times. They now pass one typed
|
||
* props object to `ProductLanding` and carry zero layout classes of their own.
|
||
* See LLM.md, "Tailwind is NOT gone".
|
||
*
|
||
* EVERY WORD IS THE ONE THAT WAS HERE, with the same one deletion /node and
|
||
* /network took: a trailing "Get started with X" card whose two links were the
|
||
* docs and GitHub, both of which the hero and the card above it already reach.
|
||
* ProductFooter was nested inside it, so it also rendered narrower than on
|
||
* every other product page; out here it is the width it is everywhere else.
|
||
*/
|
||
|
||
export default function HanzoDesktopPage() {
|
||
return (
|
||
<>
|
||
<ProductLanding
|
||
badge={"Native Desktop Client"}
|
||
badgeIcon={MonitorSmartphone}
|
||
title={"Hanzo Desktop"}
|
||
tagline={"Build agents on your own machine"}
|
||
lede={"A window for making agents and letting them work together. Each one runs on a model you pick — local or on Hanzo Cloud — and what it touches stays on the machine unless you send it somewhere. macOS, Windows and Linux; 4GB of memory and 2GB of disk."}
|
||
ctas={[
|
||
{ label: "Download", href: "https://docs.hanzo.ai/docs/apps/desktop", icon: ArrowRight },
|
||
{ label: "GitHub", href: "https://github.com/hanzoai" },
|
||
]}
|
||
what={{
|
||
title: "What you can build in it",
|
||
sub: "Free and open source. Download it, and the first agent is a few minutes of clicking.",
|
||
pillars: [
|
||
{
|
||
icon: Cloud,
|
||
title: "Nothing to scaffold",
|
||
body: "An agent is made in the window: give it a job, some tools, and a model. There is no project to create first and no file to check in before it exists.",
|
||
},
|
||
{
|
||
icon: Brain,
|
||
title: "Local model or cloud model, per agent",
|
||
body: "Point one agent at a model running on your machine and another at one on Hanzo Cloud. It is a setting on the agent, not a decision about the whole install.",
|
||
},
|
||
{
|
||
icon: Bot,
|
||
title: "They work together",
|
||
body: "Agents share context and hand steps to each other, so a job that needs several of them is one workflow instead of you copying between three chat windows.",
|
||
},
|
||
{
|
||
icon: Wifi,
|
||
title: "It works with the network off",
|
||
body: "With a local model pinned, an agent keeps running when the connection goes. Nothing has to be uploaded for it to do its job.",
|
||
},
|
||
{
|
||
icon: Lock,
|
||
title: "Your keys stay on your machine",
|
||
body: "Keys and the data an agent touches stay local. An agent that has to pay for something spends from a key you hold, on hardware you own.",
|
||
},
|
||
{
|
||
icon: Settings,
|
||
title: "MCP is how it reaches your tools",
|
||
body: "Agents speak the Model Context Protocol, so a tool you have already connected elsewhere works here without a second integration written for this app.",
|
||
},
|
||
],
|
||
}}
|
||
stats={{
|
||
title: "Available everywhere you work",
|
||
sub: "Native installers for macOS (Apple Silicon + Intel), Windows, and Linux.",
|
||
items: [
|
||
{ icon: Apple, value: "macOS", label: "arm64 + intel" },
|
||
{ icon: MonitorSmartphone, value: "Windows", label: "x64 + arm64" },
|
||
{ icon: Zap, value: "Linux", label: "deb + rpm + AppImage" },
|
||
],
|
||
}}
|
||
finalCta={{
|
||
title: "Download it and build one",
|
||
sub: "Pick a model, describe the job, hand it the tools. If the model is a local one, the whole thing runs without an account.",
|
||
buttons: [
|
||
{ label: "View on GitHub", href: "https://github.com/hanzoai" },
|
||
],
|
||
}}
|
||
/>
|
||
<ProductFooter slug={"desktop"} name={"Desktop"} />
|
||
</>
|
||
)
|
||
}
|