mirror of
https://github.com/hanzo-apps/hanzo.ai.git
synced 2026-10-30 14:58:08 +00:00
The product pages from /s3 to /zap, /university and its course data, /trust, /security, /sdks, /support, /tasks, /startups, /sms-opt-in, the buying specialist, Zen, Kai's guide, Studio, the settings pages, and the shared sales, solutions, zap and ui pieces. Client code draws with t(), server components with <T>, copy held as data is marked with phrase() and drawn through t() where it lands. A link or a figure inside a sentence is a value, so a translator reorders the whole sentence. Rebased on main: every page main moved onto Fold or Steps keeps main's layout, with its words wrapped (label, title, lede, points). Steps now draws a step's body through t, as it already drew the title. Settings keeps main's usage panel, refresh, rewards wallet and sign-in wallet rows, each label wrapped. Left English: the skills page's install line (a command and two URLs), and the solution eyebrow and sibling heading built from a kind label. Claude-Session: https://claude.ai/code/session_015XYKLjZtDTJEnMo4eK3AFH
83 lines
4.7 KiB
TypeScript
83 lines
4.7 KiB
TypeScript
'use client'
|
|
|
|
import { ArrowRight, Activity, AlertTriangle, Bell, Bug, GitBranch, Users, Zap } from 'lucide-react'
|
|
import { ProductLanding } from '@/components/product/ProductLanding'
|
|
import { ProductFooter } from '@/components/products/ProductFooter'
|
|
import { phrase } from '@hanzo/i18n'
|
|
|
|
/**
|
|
* Hanzo Sentinel, 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 HanzoSentinelPage() {
|
|
return (
|
|
<>
|
|
<ProductLanding
|
|
badge={"sentry.hanzo.ai"}
|
|
badgeIcon={AlertTriangle}
|
|
title={"Hanzo Sentinel"}
|
|
tagline={phrase("Error tracking and performance monitoring")}
|
|
lede={phrase("Sentinel takes the errors your applications throw, groups the identical ones into a single issue, and tells you which issues are new, which came back, and which are getting worse. It speaks the Sentry wire protocol, so the client libraries you already have report to it unchanged — a DSN pointing at your instance is the only line that differs. There is no Sentinel SDK to adopt, and none is planned. The protocol is the interface.")}
|
|
ctas={[
|
|
{ label: phrase("Read the docs"), href: "https://docs.hanzo.ai/docs/guides/migrate/sentry", icon: ArrowRight },
|
|
{ label: phrase("View on GitHub"), href: "https://github.com/hanzoai" },
|
|
]}
|
|
what={{
|
|
title: phrase("Enough context to fix it without asking"),
|
|
sub: phrase("A stack trace tells you where. The rest of this tells you who, how often, since when, and what they were doing."),
|
|
pillars: [
|
|
{
|
|
icon: Bug,
|
|
title: phrase("One issue, not ten thousand events"),
|
|
body: phrase("Identical exceptions collapse into a single issue with a count and a first-seen date. Minified frontend frames are resolved through your source maps, and the breadcrumbs leading up to the throw come with it, so you read what the person did rather than guessing."),
|
|
},
|
|
{
|
|
icon: Activity,
|
|
title: phrase("Traces, and profiles under them"),
|
|
body: phrase("A request that crosses four services is one trace, and the span that took the time is visible in it. Profiles go a level down to the function. Session replay shows the same failure from the browser's side."),
|
|
},
|
|
{
|
|
icon: GitBranch,
|
|
title: phrase("Did this release make it worse"),
|
|
body: phrase("Crash-free sessions per release, so a regression shows up in the first hour of a rollout rather than in a support queue on Monday. Cron monitors catch the opposite failure — the job that stopped running and threw nothing at all."),
|
|
},
|
|
{
|
|
icon: Users,
|
|
title: phrase("Which customers are hitting it"),
|
|
body: phrase("Events carry the identity and the environment they came from, so an issue can be read as a list of affected accounts. That turns triage from a guess about severity into a decision about who to call."),
|
|
},
|
|
{
|
|
icon: Bell,
|
|
title: phrase("Where the alert goes"),
|
|
body: phrase("New issues, regressions and spikes route to Slack, PagerDuty, Opsgenie, Discord, Microsoft Teams, email, or a webhook of your own. It can also open the ticket — GitHub, GitLab, Jira and Bitbucket are wired both ways."),
|
|
},
|
|
{
|
|
icon: Zap,
|
|
title: phrase("A fork, and it says so"),
|
|
body: phrase("Sentinel is a fork of Sentry, used under the Functional Source License with attribution kept current. Sentry is a trademark of Functional Software, Inc., and Sentinel is neither affiliated with nor endorsed by them. Naming what you forked is not the same as branding yourself with it."),
|
|
},
|
|
],
|
|
}}
|
|
finalCta={{
|
|
title: phrase("Get started with Hanzo Sentinel"),
|
|
buttons: [
|
|
{ label: phrase("Read the docs"), href: "https://docs.hanzo.ai/docs/guides/migrate/sentry", icon: ArrowRight },
|
|
{ label: phrase("View on GitHub"), href: "https://github.com/hanzoai" },
|
|
],
|
|
}}
|
|
/>
|
|
<ProductFooter slug={"sentinel"} name={"Sentinel"} />
|
|
</>
|
|
)
|
|
}
|