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

100 lines
4.9 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 { Activity, Coins, Container, Cpu, Server, Shield } from 'lucide-react'
import { ProductLanding } from '@/components/product/ProductLanding'
import { ProductFooter } from '@/components/products/ProductFooter'
import { phrase } from '@hanzo/i18n'
/**
* Node, through the ONE product kit.
*
* The fifth and sixth hand-rolled copies of the layout `ProductLanding` owns
* were /node and /network — one shape, as a token-blind diff of the two shows
* (tokenise every word to X in both and diff: one line differs). They are gone
* the same way /ledger, /docdb, /database and /billing went.
*
* WHERE THIS DIFFERS FROM THAT TRIO, AND WHY. Those four each had TWO card
* sections, so splitting their six cards into 3 pillars + 3 features carried
* the source's own two headings. This pair has ONE section of six under ONE
* heading, so a 3+3 split would need a second heading nobody wrote. All six
* are pillars instead, which is one section, one heading, six cards — what the
* page said. The kit numbers them 01–06; the hand-rolled grid did not, and
* that is the only visible addition.
*
* EVERY WORD IS THE ONE THAT WAS HERE.
*
* The one deletion, with its reason: the page ended with a "Get started with
* Node" card whose two buttons were the hero's two buttons at the same two
* addresses — a heading and no destination. The final card is the section that
* carried a destination the reader could not otherwise reach, "Put a machine
* on the fabric", and it keeps its link to /network.
*/
const DOCS = 'https://docs.hanzo.ai/docs/proof-of-ai/node-operator'
const GITHUB = 'https://github.com/hanzoai'
export default function NodePage() {
return (
<>
<ProductLanding
badge={phrase("Decentralized AI Compute")}
badgeIcon={Server}
title="Hanzo Node"
lede={phrase("hanzod is the node that runs hanzo.network. It joins the fabric over a peer-to-peer transport, serves models to whatever the cluster routes to it, and settles the work on Lux. One Rust binary, started with hanzo fabric up.")}
ctas={[
{ label: phrase('Run a Node'), href: DOCS },
{ label: phrase('View Source'), href: GITHUB },
]}
what={{
eyebrow: phrase('Node Operator'),
title: phrase('Why Run a Hanzo Node'),
sub: phrase('What a machine starts doing once it is on the fabric'),
pillars: [
{
icon: Server,
title: phrase('The hardware you already have'),
body: phrase('Consumer cards, datacenter accelerators, or Apple Silicon. The node reports what it can serve and the cluster routes to it on that basis.'),
},
{
icon: Coins,
title: phrase('Paid out of the block reward'),
body: phrase("A tenth of the block reward is set aside for AI compute. A provider's share is scaled by the level of the work — embeddings and small models, chat-sized models, large and multimodal, training, or specialized compute like proofs."),
},
{
icon: Cpu,
title: phrase('The cluster knows who has what'),
body: phrase('Ask it for models and it lists everything served across the peers your node can see. Ask it to route and it names who would answer; ask for placement and it says where a model nobody serves should be loaded.'),
},
{
icon: Shield,
title: phrase('Attested, then trusted'),
body: phrase("A node's confidential-compute tier is attested rather than declared, and its share is scaled by that tier and by a trust score. Claiming a capability is not the same as proving one."),
},
{
icon: Container,
title: phrase('Three commands, no orchestration'),
body: phrase('up starts it on the active network, join switches network and starts it, stop signals the process this CLI started by its recorded pid — and never anything else that happens to share the name.'),
},
{
icon: Activity,
title: phrase('Settled on Lux'),
body: phrase('Work is ordered on the Hanzo L2 and committed to Lux as a Merkle root, so what a node did is anchored where it cannot quietly be rewritten later.'),
},
],
}}
finalCta={{
icon: Container,
title: phrase('Put a machine on the fabric'),
sub: phrase('Install the CLI, pick a network, run hanzo fabric up. The node binary is resolved from your PATH or an env var — the CLI runs it and never builds it for you.'),
buttons: [
{ label: phrase('Quickstart'), href: DOCS },
{ label: phrase('About the Network'), href: '/network' },
{ label: phrase('View on GitHub'), href: GITHUB },
],
}}
/>
<ProductFooter slug="node" name="Node" />
</>
)
}