Files
zeekayandGitHub e20dc71ad8 i18n: /s* to /z*, the app's rooms and settings read their copy through t (#69)
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
2026-10-29 23:51:44 -07:00

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>
);
}