A light footer with a large serif wordmark, a tagline and a sliding-marker pill on the left, three link groups on the right, and a ruled bottom row with the copyright, social links and a smooth back-to-top control.
A plain light footer: an oversized wordmark, a tagline and a pill on one side, three link columns on the other, and a closing rule with socials and a back-to-top button.
Upgrade to Pro
Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.
Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.
Radix flavor
npx shadcn add "https://ui.beste.co/r/footer125?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/footer125?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/footer125.tsx plus the button22 sliding-marker pill it uses.
The installed file exports footer125Demo alongside the block: the exact props behind the preview above. Spread it to get a working footer in one line.
import { Footer125, footer125Demo } from "@/components/beste/block/footer125";
export default function Page() {
return <Footer125 {...footer125Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Footer125 } from "@/components/beste/block/footer125";
export default function Page() {
return (
<Footer125
brand="Altair"
tagline="A small practice for slow change. Lisbon, Porto soon, and online."
button={{ label: "Start with a call", href: "/call", tone: "dark" }}
groups={[
{
title: "Work",
links: [
{ label: "Therapy", href: "/therapy" },
{ label: "Coaching", href: "/coaching" },
],
},
]}
socials={[{ label: "Instagram", href: "https://instagram.com" }]}
copyright="2026 Altair. All sessions are confidential."
labels={{ top: "Back to top" }}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
brand | string | – | Oversized serif wordmark |
tagline | string | – | Line under the wordmark |
button | ActionButton | – | Pill action under the tagline |
groups | LinkGroup[] | [] | Link columns, three across from md |
socials | FooterLink[] | [] | Social links on the closing rule |
copyright | string | – | Copyright line |
labels | { top?: string } | {} | Back-to-top wording; the button is dropped when unset |
className | string | – | Extra classes for the outer <footer> |
type LinkGroup = {
title: string;
links: FooterLink[];
};
type FooterLink = {
label: string;
href: string;
};
type ActionButton = {
label: string;
href: string;
tone?: "primary" | "light" | "dark" | "outline";
};useReducedMotion before scrolling and passes behavior: "auto" when motion is reduced, so a reader who has asked for less movement is not thrown up the page in a long smooth animation.button with type="button", not an anchor to #top, so it never adds a hash to the URL or leaves a dead entry in the history.motion-safe:, so the affordance is dropped for reduced motion while the button keeps working.text-5xl rising to text-6xl, which makes the brand the largest thing in the footer without needing a heading level it should not have.md, so no column is ever stranded alone on a row.footer127
A light footer with the serif wordmark, a tagline and a rounded newsletter field with a sliding-marker pill on the left, three link groups on the right, and a ruled bottom row with the copyright and legal links.
footer119
A light footer with a lowercase wordmark, a tagline, a newsletter signup, three link columns, and a bottom bar of legal links over a hairline rule.
footer113
Footer led by a full-width oversized wordmark, then a newsletter field with an arrow submit and socials beside four titled link columns, closed by a quiet copyright line.
footer121
A compact centered footer with a lowercase wordmark, a short tagline, an uppercase link row, a social row over a hairline rule, and a copyright line.