Files
zeekay 510c6862a9 platform: one page at /platform, and /cloud forwards to it
/platform was MOVED to /cloud; now the page lives at /platform and /cloud
forwards there. cloud.hanzo.ai's root is the same page: deploy.yml copies
platform.html over that host's index.html, and the canonical names
hanzo.ai/platform. /cloud keeps its route for go get hanzo.ai/cloud and
draws the same page with its canonical on /platform, so an edge still
forwarding /platform to /cloud cannot bounce a reader between the two.
Every internal link, the nav's Overview and Platform, the landing's stack
link, the local server and the gates now name /platform.
2026-10-29 21:47:06 -07:00

53 lines
2.2 KiB
TypeScript

import type { Metadata } from "next"
import CloudLanding from "@/components/cloud/CloudLanding"
import { ogImages, twitterImages } from '@/lib/constants/og'
// The platform's one page: hanzo.ai/platform, and cloud.hanzo.ai's root, which
// deploy.yml makes by copying platform.html over that host's index.html (and
// scripts/canonical.mjs points that root back here). /cloud forwards to it;
// MOVED in lib/publish says so once. The CloudLanding body is served under the
// shared (marketing) header and footer. This server component owns the SEO.
//
// One title, three places: the page, its share card and its twitter card, so a
// share of either host announces the same page.
//
// IT SELLS THE ABSTRACTION, NOT THE INVENTORY. The description used to count
// the catalog's categories and argue an assembly tax, which was the page's
// argument at the time. The page argues the abstraction now — put a model, an
// agent, a database and a production application somewhere without assembling
// a hyperscaler out of parts first — so the card says that. A share card that
// sells a section the page no longer has is a lie nobody would notice.
//
// NO NUMBER IS BAKED HERE. A description is written at BUILD time and read by
// scrapers months later, which makes it the one place a count cannot be kept
// true: the served catalog's providers are switched on and off between builds.
// The page states its one number where it can ASK for it (`useSummary`), and
// the metadata states the breadth without asserting an arithmetic it has no way
// to recheck.
const TITLE = 'Hanzo Platform — one stack, down to the kernel'
const SUMMARY =
'Models, agents, applications, data and infrastructure on one operating plane, from GPU kernel to autonomous agent. Run it managed or on infrastructure you control.'
export const metadata: Metadata = {
title: TITLE,
description: SUMMARY,
openGraph: {
title: TITLE,
description: SUMMARY,
url: "https://hanzo.ai/platform",
siteName: "Hanzo Platform",
type: "website",
images: ogImages(TITLE),
},
twitter: {
card: "summary_large_image",
title: TITLE,
description: SUMMARY,
images: twitterImages,
},
}
export default function PlatformPage() {
return <CloudLanding />
}