Files
zeekayandHanzo Dev 532ce68471 Give zoolabs.io a header, sections and a footer
The chat was the whole site: a reader who did not type had nowhere to go
and no way to learn what Zoo Labs is. The hero keeps the page, and Open
Source, Research and Foundation now sit under it.

One header and one footer, in the layout, so the chat and the repository
listing wear the same chrome instead of each carrying its own. The chat's
inner header went with that — two wordmarks on one screen was the reason
to share it.

The ecosystem column pointed at other organisations' sites; the footer
now names only Zoo's own.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-31 13:28:37 -07:00

34 lines
1.1 KiB
TypeScript

import { config } from '@/lib/config';
const links = [
{ label: 'zoo.ngo', href: config.links.foundation },
{ label: 'zips.zoo.ngo', href: config.links.zips },
{ label: 'github.com/zooai', href: config.links.github },
];
/** The site's one footer. */
export function Footer() {
return (
<footer className="border-t border-border bg-bg-secondary">
<div className="mx-auto flex max-w-7xl flex-col items-center justify-between gap-4 px-6 py-10 sm:flex-row">
<p className="text-sm text-text-muted">
&copy; {new Date().getFullYear()} {config.copyright}
</p>
<nav className="flex flex-wrap items-center justify-center gap-x-6 gap-y-2">
{links.map((link) => (
<a
key={link.href}
href={link.href}
target="_blank"
rel="noopener noreferrer"
className="font-mono text-sm text-text-muted transition-colors hover:text-text-primary"
>
{link.label}
</a>
))}
</nav>
</div>
</footer>
);
}