Site footer
A marketing footer with brand blurb, link columns, and legal links.
registry/blocks/footer.tsx
import { Separator } from '@/components/ui/separator'
const columns = [
{ title: 'Product', links: ['Overview', 'Components', 'Tokens', 'Changelog'] },
{ title: 'Resources', links: ['Docs', 'Guides', 'Design kit', 'Support'] },
{ title: 'Company', links: ['About', 'Blog', 'Careers', 'Contact'] },
]
/** A marketing footer with brand blurb, link columns, and legal links. */
export function Footer() {
return (
<footer className="w-full bg-background px-6 py-12 text-foreground">
<div className="flex flex-col gap-10 md:flex-row md:justify-between">
<div className="flex max-w-card-sm flex-col gap-2">
<span className="font-heading text-xl">Quill</span>
<p className="text-sm text-pretty text-muted-foreground">
A calm, editorial design system for building by hand.
</p>
</div>
<div className="grid grid-cols-2 gap-8 sm:grid-cols-3">
{columns.map((col) => (
<nav key={col.title} aria-label={col.title} className="flex flex-col gap-2">
<span className="text-sm font-medium">{col.title}</span>
{col.links.map((l) => (
<a key={l} href="#" className="rounded-sm text-sm text-muted-foreground hover:text-foreground outline-hidden focus-visible:ring-3 focus-visible:ring-ring/50">
{l}
</a>
))}
</nav>
))}
</div>
</div>
<Separator className="my-8" />
<div className="flex flex-col items-center justify-between gap-2 text-xs text-muted-foreground sm:flex-row">
<span>© 2026 Quill. All rights reserved.</span>
<div className="flex gap-4">
<a href="#" className="rounded-sm text-muted-foreground hover:text-foreground outline-hidden focus-visible:ring-3 focus-visible:ring-ring/50">Privacy</a>
<a href="#" className="rounded-sm text-muted-foreground hover:text-foreground outline-hidden focus-visible:ring-3 focus-visible:ring-ring/50">Terms</a>
</div>
</div>
</footer>
)
}
- Where it goes
- footerlogo-cloud
- Visual style
- glass-blur