Skip to content
All Taste components

Navigation & footer

Website footer

The bottom of every page: brand, link columns, a status line and the legal small print.

brand + 4 link columns · status pill · legal row · 2-column on phones

import { Globe, Mail, Rss } from "lucide-react";

const columns = [
  { title: "Product", links: [["Invoices", "/invoices"], ["Reminders", "/reminders"], ["Payments", "/payments"], ["Pricing", "/pricing"], ["Changelog", "/changelog"]] },
  { title: "Company", links: [["About", "/about"], ["Customers", "/customers"], ["Careers", "/careers"], ["Contact", "/contact"]] },
  { title: "Resources", links: [["Journal", "/journal"], ["Templates", "/templates"], ["Help centre", "/help"], ["API docs", "/docs"]] },
  { title: "Legal", links: [["Privacy", "/privacy"], ["Terms", "/terms"], ["Security", "/security"], ["Cookies", "/cookies"]] },
];

export function SiteFooter() {
  return (
    <footer className="border-t border-border bg-surface font-sans">
      <div className="mx-auto max-w-6xl px-4 py-16 sm:px-6">
        <div className="grid gap-10 lg:grid-cols-[1.6fr_repeat(4,1fr)] lg:gap-6">
          <div className="flex flex-col items-start gap-4">
            <a href="/" className="flex items-center gap-2 text-[15px] font-semibold tracking-tight text-fg">
              <span aria-hidden className="size-6 rounded-sm bg-primary" /> Fernbill
            </a>
            <p className="max-w-xs text-[13px] leading-relaxed text-fg-muted">Invoices and reminders for freelancers and small studios.</p>
            <a href="https://status.example.com" className="inline-flex items-center gap-2 rounded-full border border-border bg-bg px-2.5 py-1 text-xs text-fg-muted">
              <span className="size-1.5 rounded-full bg-success" aria-hidden /> All systems normal
            </a>
          </div>
          <div className="grid grid-cols-2 gap-x-4 gap-y-8 sm:grid-cols-4 lg:contents">
            {columns.map((col) => (
              <nav key={col.title} aria-label={col.title}>
                <h2 className="text-[13px] font-medium text-fg">{col.title}</h2>
                <ul className="mt-3 grid gap-2.5">
                  {col.links.map(([label, href]) => (
                    <li key={href}><a href={href} className="text-[13px] text-fg-muted transition hover:text-fg">{label}</a></li>
                  ))}
                </ul>
              </nav>
            ))}
          </div>
        </div>

        <div className="mt-12 flex flex-wrap items-center justify-between gap-4 border-t border-border pt-6 text-[13px] text-fg-subtle">
          <p>© {new Date().getFullYear()} Fernbill Labs. All rights reserved.</p>
          <div className="flex items-center gap-0.5">
            <a href="mailto:hello@example.com" aria-label="Email us" className="inline-grid size-8 place-items-center rounded text-fg-muted hover:bg-surface-2 hover:text-fg"><Mail className="size-4" /></a>
            <a href="/journal/rss.xml" aria-label="RSS feed" className="inline-grid size-8 place-items-center rounded text-fg-muted hover:bg-surface-2 hover:text-fg"><Rss className="size-4" /></a>
            <button type="button" aria-label="Language: English" className="inline-flex h-8 items-center gap-1.5 rounded px-2 text-fg-muted hover:bg-surface-2 hover:text-fg">
              <Globe className="size-4" aria-hidden /> English
            </button>
          </div>
        </div>
      </div>
    </footer>
  );
}

The code uses the Taste Tailwind preset. Make yours on the Taste page with Export my system.