Footer

Muted Footer with Link Grid

Plain footer on a muted band: up to five link categories in a grid that sets its own column count from how many there are, and a copyright line. No dependencies.

Free, MIT licenseOpen in Browse
// The copy: change text here, not in the markup.
const COPY = {
  div: "© 2026 Orbcore, Inc.",
} as const

const CATEGORIES: { title: string; links: string[] }[] = [
  { title: "Product", links: ["Features", "Pricing", "Integrations"] },
  { title: "Company", links: ["About", "Careers", "Blog", "Press Kit"] },
  {
    title: "Resources",
    links: ["Help Center", "API Docs", "Status", "Contact"],
  },
  { title: "Legal", links: ["Privacy Policy", "Terms of Service", "Security"] },
]

export default function SimpleFooter01() {
  return (
    <footer className="pt-16">
      <section className="bg-muted py-16">
        <section className="mx-auto flex max-w-7xl flex-col gap-16 px-6 lg:px-10">
          {/* has-[] counts the categories and sets the column count itself. */}
          <nav className="grid grid-cols-2 gap-6 text-sm/7 sm:has-[>:last-child:nth-child(3)]:grid-cols-3 sm:has-[>:nth-child(5)]:grid-cols-3 md:has-[>:last-child:nth-child(4)]:grid-cols-4 lg:has-[>:nth-child(5)]:grid-cols-5">
            {CATEGORIES.map((cat) => (
              <section key={cat.title}>
                <h3>{cat.title}</h3>
                <ul role="list" className="mt-2 flex flex-col gap-2">
                  {cat.links.map((link) => (
                    <li key={link}>
                      <a href="#">{link}</a>
                    </li>
                  ))}
                </ul>
              </section>
            ))}
          </nav>
          <p className="text-sm/7">{COPY.div}</p>
        </section>
      </section>
    </footer>
  )
}

Installation

pnpm dlx shadcn add @01orbital/simple-footer-01
npx shadcn add @01orbital/simple-footer-01
yarn shadcn add @01orbital/simple-footer-01
bunx --bun shadcn add @01orbital/simple-footer-01

Free under the MIT license. Add the @01orbital registry to components.json once (install guide), then run the command.

It lands at components/blocks/footer/simple-footer-01/index.tsx, as source you own and edit.

Usage

import SimpleFooter01 from "@/components/blocks/footer/simple-footer-01"

export default function Example() {
  return <SimpleFooter01 />
}

Dependencies

No other registry pieces.