mirror of
https://github.com/hanzo-docs/docs.git
synced 2026-10-28 07:09:50 +00:00
One app carried the Hanzo shell and twenty did not, so a reader crossing from base.hanzo.ai to zen.hanzo.ai left the ecosystem and landed somewhere that only resembled it. Five of those twenty had hand-rolled a footer of their own — sixteen lines of copyright and a repo link, written five separate times. Each app now loads the brand tokens before its own sheet, reports through docs-analytics under its own product name, and renders HanzoFooter from @hanzogui/shell — the same 6-column ecosystem footer, defined once, that apps/docs already used. A footer written inside a layout was chrome pretending to be content, and it is gone. A footer written inside a page is content pretending to be chrome: those keep their words and become sections, so each page has one contentinfo landmark instead of two. Three manifests listed @hanzo/font twice in the same object. Builds verified across the four shapes this repo has: a static export, a next.config.mjs app, a single-page app with no route groups, and one that already reported analytics. Every one renders exactly one footer. Co-authored-by: Hanzo Dev <[email protected]>
44 lines
1.1 KiB
TypeScript
44 lines
1.1 KiB
TypeScript
import type { ReactNode } from 'react';
|
|
import { HomeLayout } from '@hanzo/docs/ui/layouts/home';
|
|
import { baseOptions, linkItems, logo } from '@/lib/layout.shared';
|
|
import { AISearchPanel, AISearchTrigger } from '@/components/ai/search';
|
|
import { MessageCircleIcon } from 'lucide-react';
|
|
import { cn } from '@/lib/cn';
|
|
import { buttonVariants } from '@hanzo/docs-base-ui/components/ui/button';
|
|
import { Footer } from '@/components/footer';
|
|
|
|
export default function Layout({ children }: { children: ReactNode }) {
|
|
return (
|
|
<HomeLayout
|
|
{...baseOptions()}
|
|
links={linkItems}
|
|
nav={{
|
|
title: (
|
|
<>
|
|
{logo}
|
|
<span className="font-bold">Hanzo Bot</span>
|
|
</>
|
|
),
|
|
}}
|
|
>
|
|
{children}
|
|
|
|
|
|
<AISearchPanel />
|
|
<AISearchTrigger
|
|
position="float"
|
|
className={cn(
|
|
buttonVariants({
|
|
variant: 'secondary',
|
|
className: 'text-fd-muted-foreground rounded-2xl',
|
|
}),
|
|
)}
|
|
>
|
|
<MessageCircleIcon className="size-4.5" />
|
|
Ask AI
|
|
</AISearchTrigger>
|
|
<Footer />
|
|
</HomeLayout>
|
|
);
|
|
}
|