mirror of
https://github.com/hanzo-apps/hanzo.ai.git
synced 2026-10-30 14:58:08 +00:00
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
100 lines
4.9 KiB
TypeScript
100 lines
4.9 KiB
TypeScript
'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" />
|
||
</>
|
||
)
|
||
}
|