Files
zeekayandGitHub 3df66c3990 i18n: /m* through /r* and the product kits draw their words through t (#70)
Pages from /machines to /risk, the model pages, and the kits they are made of
(page-kit, ProductLanding, LayerPage, Stack, the models kit, band's Head) mark
authored copy where it is written and draw it in the reader's language. A server
page marks a literal phrase('…') or wraps it in <T>; a client page calls t. The
kits translate a string prop through useSay (components/marketing/say), so a
page passes phrase('…') and markup passes as written. An arrow that points
turns over right to left (data-i18n-mirror).

Rebased on main: the fold-based heroes (Fold, PageHero, MachinesHero, the
product and layer pages) keep main's structure and copy, with their label,
title and lede marked phrase. /platform is main's CloudLanding; the deleted
/platform/layers and the old referral components stay deleted.

Claude-Session: https://claude.ai/code/session_015XYKLjZtDTJEnMo4eK3AFH
2026-10-30 00:18:44 -07:00

90 lines
4.3 KiB
TypeScript

'use client'
import { Activity, Coins, Cpu, Globe, Shield, Zap } from 'lucide-react'
import { ProductLanding } from '@/components/product/ProductLanding'
import { ProductFooter } from '@/components/products/ProductFooter'
import { KEYS } from '@/components/home/nav-data'
import { phrase } from '@hanzo/i18n'
/**
* Network, through the ONE product kit — /node's other half.
*
* See app/(marketing)/node/page.tsx for why this pair takes six pillars under
* one heading where the /ledger trio took 3 + 3: this page has ONE card
* section, so splitting it would need a second heading nobody wrote.
*
* EVERY WORD IS THE ONE THAT WAS HERE. Same deletion as /node, same reason:
* the trailing "Get started with Network" card offered the docs and GitHub,
* which the hero and this final card already reach, so the card that survives
* is the one carrying a destination of its own — "Two ends of the same
* fabric", which is how a reader gets from buying compute to providing it.
*/
const DOCS = 'https://docs.hanzo.ai/docs/network'
const GITHUB = 'https://github.com/hanzoai'
export default function NetworkPage() {
return (
<>
<ProductLanding
badge={phrase("Compute Marketplace")}
badgeIcon={Globe}
title="Hanzo Network"
lede={phrase("hanzo.network is the fabric that hanzod nodes form. Put a machine on it and it serves models to whoever the cluster routes there. Ask the fabric for a model and it finds a peer that already has it loaded.")}
ctas={[
{ label: phrase('Buy Compute'), href: DOCS },
{ label: phrase('Run a Node'), href: '/node' },
]}
what={{
eyebrow: phrase('The Fabric'),
title: phrase('How the Network Works'),
sub: phrase('Machines join, declare what they can serve, and the cluster routes on what is actually loaded'),
pillars: [
{
icon: Globe,
title: phrase('Peers, not regions'),
body: phrase('There is no region menu to choose from. A node discovers its peers over the fabric, and the topology is whatever is connected right now — you can ask it and read the answer.'),
},
{
icon: Coins,
title: phrase('Metered by the work'),
body: phrase("A tenth of the block reward funds AI compute, and a provider's share is scaled by the level of the work it did. No subscription, no seat, nothing billed while a machine sits idle."),
},
{
icon: Shield,
title: phrase('Proof of AI'),
body: phrase("A node's confidential-compute tier is attested rather than declared, and what it earns is scaled by that attestation and by a trust score. A claim about a machine is worth nothing on its own."),
},
{
icon: Cpu,
title: phrase('Whatever the peers have loaded'),
body: phrase('Ask the cluster which models it serves, which node would answer for one, and where a model nobody has loaded should be placed. Routing follows what is really in memory.'),
},
{
icon: Zap,
title: phrase('One command to join'),
body: phrase('hanzo fabric join names a network and starts the node on it. If you would rather lend the machine to builds than to inference, hanzo runner offers the same box as a CI runner.'),
},
{
icon: Activity,
title: phrase('Anchored, not asserted'),
body: phrase('Work is ordered on the Hanzo L2 and committed to Lux as a Merkle root, under a stake-weighted validator set. What you can check is what settled, not what a status page says.'),
},
],
}}
finalCta={{
icon: Globe,
title: phrase('Two ends of the same fabric'),
sub: phrase('Take a key and call it, or bring a machine and serve it. Most people who do the second started by doing the first.'),
buttons: [
{ label: phrase('Get an API Key'), href: KEYS },
{ label: phrase('Provide Compute'), href: '/node' },
{ label: phrase('View on GitHub'), href: GITHUB },
],
}}
/>
<ProductFooter slug="network" name="Network" />
</>
)
}