Footer 1
Brand + tagline column alongside Product / Company / Resources link columns, with a copyright row and social icons below a thin rule.
Preview
Installation
npx shadcn@latest add https://hirael.com/r/footer-01.jsonCode
components/blocks/footer-01.tsx
"use client";
import * as React from "react";
import { MessageCircle } from "lucide-react";
type LinkColumn = {
title: string;
links: readonly { label: string; href: string }[];
};
const COLUMNS: readonly LinkColumn[] = [
{
title: "Product",
links: [
{ label: "Registry", href: "#" },
{ label: "Themes", href: "#" },
{ label: "Playground", href: "#" },
{ label: "Changelog", href: "#" },
{ label: "Roadmap", href: "#" },
],
},
{
title: "Company",
links: [
{ label: "About", href: "#" },
{ label: "Manifesto", href: "#" },
{ label: "Customers", href: "#" },
{ label: "Careers", href: "#" },
{ label: "Press", href: "#" },
],
},
{
title: "Resources",
links: [
{ label: "Documentation", href: "#" },
{ label: "Guides", href: "#" },
{ label: "Examples", href: "#" },
{ label: "Support", href: "#" },
{ label: "License", href: "#" },
],
},
];
function BrandMark({ className }: { className?: string }) {
return (
<svg
viewBox="0 0 80 100"
fill="none"
stroke="currentColor"
strokeWidth="2.2"
strokeLinecap="round"
strokeLinejoin="round"
aria-hidden
className={className}
>
<path d="M16 78 V40 a24 24 0 0 1 48 0 V78" />
<path d="M40 44 L43.2 52 L51 55 L43.2 58 L40 66 L36.8 58 L29 55 L36.8 52 Z" />
<path d="M22 86 H58" opacity="0.7" />
<path d="M28 92 H52" opacity="0.45" />
<path d="M34 96 H46" opacity="0.25" />
</svg>
);
}
export default function Footer01() {
return (
<footer className="border-t border-border bg-background">
<div className="container w-full py-16">
<div className="grid grid-cols-2 gap-10 lg:grid-cols-5 lg:gap-16">
<div className="col-span-2">
<div className="flex flex-col gap-4">
<span className="inline-flex items-center font-mono text-sm font-semibold tracking-[-0.02em] text-foreground">
<BrandMark className="me-1.5 size-5" />
Hirael
</span>
<p className="max-w-xs text-sm leading-relaxed text-muted-foreground">
A registry for the dense product components shadcn/ui
doesn't ship. Source-installed via CLI. No runtime
dependency.
</p>
</div>
</div>
{COLUMNS.map((col) => (
<div key={col.title} className="flex flex-col gap-4">
<h4 className="font-mono text-[10px] uppercase tracking-[0.12em] text-foreground">
{col.title}
</h4>
<ul className="flex flex-col gap-2.5">
{col.links.map((l) => (
<li key={l.label}>
<a
href={l.href}
className="text-sm text-muted-foreground transition-colors hover:text-foreground"
>
{l.label}
</a>
</li>
))}
</ul>
</div>
))}
</div>
<div className="mt-14 flex flex-col items-start justify-between gap-4 border-t border-border pt-6 sm:flex-row sm:items-center">
<p className="font-mono text-[10px] uppercase tracking-[0.12em] text-muted-foreground">
© 2026 Hirael Labs · All rights reserved
</p>
<div className="flex items-center gap-1">
<a
href="#"
aria-label="Discord"
className="inline-flex size-8 items-center justify-center rounded-sm border border-transparent text-muted-foreground transition-colors hover:border-border hover:bg-card hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
>
<MessageCircle className="size-4" />
</a>
</div>
</div>
</div>
</footer>
);
}
Dependencies
npm
lucide-react