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

81 lines
3.7 KiB
TypeScript

'use client'
import { ArrowRight, BarChart3, Clock, Database, Gauge, Layers, Search, Zap } from 'lucide-react'
import { ProductLanding } from '@/components/product/ProductLanding'
import { ProductFooter } from '@/components/products/ProductFooter'
import { phrase } from '@hanzo/i18n'
/**
* Hanzo Metrics, through the ONE product kit.
*
* The largest cluster left: TWELVE pages — engine, gateway, guard, ingress,
* jin, metrics, o11y, operator, sentinel, skills, telemetry, visor — at 85%+
* identical className sets, each a hero, a six-card grid and a call to action
* written out again. All twelve pass one typed props object to
* `ProductLanding`. See LLM.md, "Tailwind is NOT gone".
*
* EVERY WORD IS THE ONE THAT WAS HERE. ProductFooter came out of the final
* card's `max-w-3xl` wrapper, where it had been rendering narrower than on
* every other product page.
*/
export default function HanzoMetricsPage() {
return (
<>
<ProductLanding
badge={"metrics.hanzo.ai"}
badgeIcon={BarChart3}
title={"Hanzo Metrics"}
tagline={phrase("The metrics half of Hanzo O11y")}
lede={phrase("Metrics used to be its own database here. It is now a subsystem of Hanzo O11y, which serves metrics, logs and traces from one column store — so a counter and the trace that incremented it are one query. Reach for this page when the question is a number over time; the rest of O11y is where that number leads.")}
ctas={[
{ label: phrase("View on GitHub"), href: "https://github.com/hanzoai/metrics" },
]}
what={{
title: phrase("What a metric is here"),
sub: phrase("A row in a column store rather than a series in a store of its own."),
pillars: [
{
icon: Database,
title: phrase("One store, not four"),
body: phrase("Metrics go where the logs and traces already are — Hanzo Datastore, a column store. Nothing to run beside it and nothing to keep in sync with it."),
},
{
icon: Search,
title: phrase("PromQL, or the builder"),
body: phrase("Bring the PromQL you already wrote, or assemble the query in the UI without learning it. Both compile to the same thing."),
},
{
icon: Zap,
title: phrase("Labels you would not dare add"),
body: phrase("Per-model, per-route, per-tenant. A column store counts distinct values for a living, so a label that would multiply series in a time-series database is just another column here."),
},
{
icon: Layers,
title: phrase("The number leads somewhere"),
body: phrase("A spike on a chart is the start of a question, not the end. Click it and you are in the traces for that window, because they were never in a different system."),
},
{
icon: Gauge,
title: phrase("Alerts are saved queries"),
body: phrase("You write the query, look at it, then keep it as a rule. What pages you is something you have already seen return the answer you expected."),
},
{
icon: Clock,
title: phrase("Scoped to your org"),
body: phrase("Every query carries the org from your token, so one deployment serves many tenants and no panel can read across them."),
},
],
}}
finalCta={{
title: phrase("Send a metric, then follow it"),
buttons: [
{ label: phrase("View on GitHub"), href: "https://github.com/hanzoai/metrics" },
],
}}
/>
<ProductFooter slug={"metrics"} name={"Metrics"} />
</>
)
}