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

88 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, Eye, Keyboard, Laptop, MousePointer2, Shield, Workflow, Zap } from 'lucide-react'
import { useI18n } from '@hanzo/i18n/react'
import { ProductLanding } from '@/components/product/ProductLanding'
import { ProductFooter } from '@/components/products/ProductFooter'
import { Line } from '@hanzo/ui/marketing'
/**
* Hanzo Computer, 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 HanzoComputerPage() {
const { t } = useI18n()
return (
<>
<ProductLanding
badge={"computer.hanzo.ai"}
badgeIcon={Laptop}
title={"Hanzo Computer"}
tagline={t("An agent that uses the computer in front of it")}
lede={t('It takes a screenshot, decides where to click, and clicks — the same inputs and outputs a person has. Say what you want in a sentence and it works through the apps already on the machine, with no API and no integration for any of them. Install it with pip, run {operate}, and type an objective.', { operate: <Line render="code" color="inherit">operate</Line> })}
ctas={[
{ label: t("Try Hanzo Computer"), href: "https://computer.hanzo.ai", icon: ArrowRight },
{ label: t("Documentation"), href: "https://docs.hanzo.ai" },
]}
what={{
title: t("If a person can click it, so can this"),
sub: t("The screen is the interface. That is the whole trick, and it is why the app you need to automate does not have to know anything about it."),
pillars: [
{
icon: Eye,
title: t("It reads pixels"),
body: t("No DOM, no accessibility tree, no selectors to maintain. A native app, a canvas, a remote desktop and a web page all look the same to it — like a screenshot."),
},
{
icon: MousePointer2,
title: t("Mouse and keyboard"),
body: t("Mac, Windows, and Linux with an X server. On macOS the terminal asks for Screen Recording and Accessibility the first time, because those are exactly the permissions this needs."),
},
{
icon: Keyboard,
title: t("OCR when clicking is hard"),
body: t("Add -with-ocr to the model and it reads text off the screen to build a map of clickable elements — the fix for a button a model can see but keeps missing by twenty pixels."),
},
{
icon: Workflow,
title: t("Set-of-Mark prompting"),
body: t("Add -with-som and the screenshot arrives pre-labelled, so the model names a marked element instead of guessing a coordinate."),
},
{
icon: Zap,
title: t("Say it out loud"),
body: t("operate --voice takes the objective by microphone. Needs the audio extras and portaudio installed; it is not in the base install."),
},
{
icon: Shield,
title: t("It has whatever you have"),
body: t("This runs as you, on your machine, with your logged-in sessions. Give it a fresh user account or a VM before you give it anything that matters — and remember that text on a web page can try to redirect it."),
},
],
}}
finalCta={{
title: t("For the software with no API"),
sub: t("The vendor portal that exports one CSV at a time. The desktop tool from 2009. The internal app nobody will reopen. Those."),
buttons: [
{ label: t("Try Hanzo Computer"), href: "https://computer.hanzo.ai", icon: ArrowRight },
{ label: t("View on GitHub"), href: "https://github.com/hanzoai/computer" },
],
}}
/>
<ProductFooter slug={"computer"} name={"Computer"} />
</>
)
}