Files
zeekayandGitHub 949608fd9d i18n: pages and components c–l draw their copy through @hanzo/i18n (#67)
Calculator, captable, careers, cloud, compare, contact and contact-sales,
customers, dashboards, dataroom, datastore, dev, download, enso,
enterprise, extension, family, integrations, investors, kai, learn,
legal and their components say their words through t() in client code,
<T> in server components and phrase() where copy is held as data; one
sentence is one key, figures and links its arguments.

Rebased on main: in every conflict main's file stands (its copy, layout
and styling) and only the wrapping is added back, including copy main
added since.

Claude-Session: https://claude.ai/code/session_015XYKLjZtDTJEnMo4eK3AFH
2026-10-30 01:15:31 -07:00

95 lines
4.5 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
'use client'
import { ArrowRight, Apple, Bot, Brain, Cloud, Lock, MonitorSmartphone, Settings, Wifi, Zap } from 'lucide-react'
import { useI18n } from '@hanzo/i18n/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() {
const { t } = useI18n()
return (
<>
<ProductLanding
badge={t("Native Desktop Client")}
badgeIcon={MonitorSmartphone}
title={"Hanzo Desktop"}
tagline={t("Build agents on your own machine")}
lede={t("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: t("Download"), href: "https://docs.hanzo.ai/docs/apps/desktop", icon: ArrowRight },
{ label: "GitHub", href: "https://github.com/hanzoai" },
]}
what={{
title: t("What you can build in it"),
sub: t("Free and open source. Download it, and the first agent is a few minutes of clicking."),
pillars: [
{
icon: Cloud,
title: t("Nothing to scaffold"),
body: t("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: t("Local model or cloud model, per agent"),
body: t("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: t("They work together"),
body: t("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: t("It works with the network off"),
body: t("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: t("Your keys stay on your machine"),
body: t("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: t("MCP is how it reaches your tools"),
body: t("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: t("Available everywhere you work"),
sub: t("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: t("Download it and build one"),
sub: t("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: t("View on GitHub"), href: "https://github.com/hanzoai" },
],
}}
/>
<ProductFooter slug={"desktop"} name={"Desktop"} />
</>
)
}