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.json

Code

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&apos;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