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
53 lines
1.8 KiB
TypeScript
53 lines
1.8 KiB
TypeScript
'use client'
|
|
|
|
// Live status is served by status.hanzo.ai — this route only forwards there.
|
|
// The site is statically exported (output: 'export'), so the redirect is
|
|
// client-side with a visible fallback link.
|
|
|
|
import { useEffect } from "react";
|
|
import { Activity, ArrowRight } from "lucide-react";
|
|
import { Box, Text, YStack } from '@hanzo/ui'
|
|
import { Action } from '@hanzo/ui/marketing'
|
|
import { useI18n } from '@hanzo/i18n/react'
|
|
|
|
const STATUS_URL = "https://status.hanzo.ai";
|
|
|
|
export default function StatusPage() {
|
|
const { t } = useI18n();
|
|
useEffect(() => {
|
|
window.location.replace(STATUS_URL);
|
|
}, []);
|
|
|
|
return (
|
|
<Box
|
|
minH="100vh"
|
|
display="flex"
|
|
/* Stated, because a gui Box stacks by default and this row does not. */
|
|
flexDirection="row"
|
|
items="center"
|
|
justify="center"
|
|
px={16}
|
|
>
|
|
{/* A column whose items keep their own width, so the `<a>` sits centred
|
|
rather than stretching the full measure. */}
|
|
<YStack items="center">
|
|
<YStack mb={16}>
|
|
<Activity width={32} height={32} color="var(--muted-foreground)" />
|
|
</YStack>
|
|
{/* A forwarding stub states its own rung rather than taking `Display`,
|
|
which is the role for a page that is one: `--text-2xl` at a 4:3 leading. */}
|
|
<Text render="h1" mb={8} fontSize="$7" lineHeight="1.75rem" fontWeight="500" text="center" color="var(--text-primary)">
|
|
Hanzo Status
|
|
</Text>
|
|
<Text render="p" mb={24} text="center" color="var(--muted-foreground)">
|
|
{t('Redirecting to the live status page…')}
|
|
</Text>
|
|
<Action href={STATUS_URL}>
|
|
{t('Open {host}', { host: 'status.hanzo.ai' })}
|
|
<ArrowRight width={16} height={16} data-i18n-mirror />
|
|
</Action>
|
|
</YStack>
|
|
</Box>
|
|
);
|
|
}
|