mirror of
https://github.com/hanzo-apps/hanzo.ai.git
synced 2026-10-30 14:58:08 +00:00
Calculator, captable, careers, cloud, compare, contact and contact-sales, customers, dashboards, dataroom, datastore, dev, download, enso, enterprise, extension, family, integrations, investors, kai, learn, legal and their components say their words through t() in client code, <T> in server components and phrase() where copy is held as data; one sentence is one key, figures and links its arguments. Rebased on main: in every conflict main's file stands (its copy, layout and styling) and only the wrapping is added back, including copy main added since. Claude-Session: https://claude.ai/code/session_015XYKLjZtDTJEnMo4eK3AFH
82 lines
3.9 KiB
TypeScript
82 lines
3.9 KiB
TypeScript
'use client'
|
|
|
|
import { ArrowRight, GitBranch, Globe, Layers, Route, Server, Shield, Zap } from 'lucide-react'
|
|
import { ProductLanding } from '@/components/product/ProductLanding'
|
|
import { ProductFooter } from '@/components/products/ProductFooter'
|
|
import { useI18n } from '@hanzo/i18n/react'
|
|
|
|
/**
|
|
* Hanzo Ingress, 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 HanzoIngressPage() {
|
|
const { t } = useI18n()
|
|
return (
|
|
<>
|
|
<ProductLanding
|
|
badge={"hanzoai/ingress"}
|
|
badgeIcon={Route}
|
|
title={"Hanzo Ingress"}
|
|
tagline={t("The entry point of a Kubernetes cluster")}
|
|
lede={t("It terminates TLS, matches the hostname, and forwards to the service behind it. It reads the Ingress resources you already write, so there is nothing new to declare and nothing to inject beside your pods.")}
|
|
ctas={[
|
|
{ label: t("View on GitHub"), href: "https://github.com/hanzoai" },
|
|
]}
|
|
what={{
|
|
title: t("What happens at the edge"),
|
|
sub: t("One static binary in front of every hostname the cluster answers for."),
|
|
pillars: [
|
|
{
|
|
icon: Layers,
|
|
title: t("It reads what you already wrote"),
|
|
body: t("Standard networking.k8s.io/v1 Ingress is the primary source, alongside IngressRoute for the things a plain Ingress can't say, Gateway API, and TOML or YAML from disk. It registers as the cluster's default IngressClass, so an Ingress that names none is still picked up."),
|
|
},
|
|
{
|
|
icon: Shield,
|
|
title: t("Certificates it fetches itself"),
|
|
body: t("Let's Encrypt provisioning and renewal, wildcards included. A new hostname gets a certificate without anyone filing a ticket for one."),
|
|
},
|
|
{
|
|
icon: GitBranch,
|
|
title: t("Middleware you compose by annotation"),
|
|
body: t("Rate limiting, retry with exponential backoff, circuit breaking, compression, header rewriting, IP allowlists, redirects, prefix stripping. Name one in an annotation, or chain several into a named pipeline and name that."),
|
|
},
|
|
{
|
|
icon: Zap,
|
|
title: t("Routes change without a restart"),
|
|
body: t("Edit an Ingress and the routing table follows — no reload, no dropped connection. A backend that stops answering health checks is taken out of rotation and put back when it recovers."),
|
|
},
|
|
{
|
|
icon: Globe,
|
|
title: t("It can serve the files itself"),
|
|
body: t("The static middleware serves a site export straight from disk or from object storage — pricing.html, docs/index.html, hashed asset chunks, a 404 page. A SPA or a docs bundle needs no pod of its own."),
|
|
},
|
|
{
|
|
icon: Server,
|
|
title: t("One binary, on the port"),
|
|
body: t("No runtime dependencies. It runs in host-network mode and binds 80 and 443 directly, with every Linux capability dropped except the one that lets it."),
|
|
},
|
|
],
|
|
}}
|
|
finalCta={{
|
|
title: t("Get started with Hanzo Ingress"),
|
|
buttons: [
|
|
{ label: t("View on GitHub"), href: "https://github.com/hanzoai" },
|
|
],
|
|
}}
|
|
/>
|
|
<ProductFooter slug={"ingress"} name={"Ingress"} />
|
|
</>
|
|
)
|
|
}
|