CTA + Footer Set
A call-to-action section that reveals in sequence as it enters the viewport, paired with a multi-column and a minimal animated footer.
This is a WebberUI Pro component
Free during the launch campaign: sign up or sign in, then hit “Copy install command” in the preview above and it installs straight away — no payment, no credit card. The command below returns 401 while you are signed out.
npx shadcn@latest add "https://webberui.com/r/cta-footer-set.json?t=<install token>"Playground
Tune the props live — the code snippet updates as you go, so you can dial in the look you want before copying it.
<CtaFooterSet />
Installation
npx shadcn@latest add "https://webberui.com/r/cta-footer-set.json?t=<install token>"Or, once registries are configured in components.json, install it as @webberui/cta-footer-set.
Usage
CtaSection and SiteFooter are two independent page sections that can be used together. Both reveal their children in sequence when they enter the viewport.
import { CtaSection, SiteFooter } from "@/components/ui/cta-footer-set";
<CtaSection
eyebrow="Start now"
title="Bring every section to life with motion"
description="React components you install by copying and pasting."
actions={
<>
<a href="/docs">Get started</a>
<a href="/components">Browse components</a>
</>
}
/>
<SiteFooter
variant="columns"
brand="WebberUI"
tagline="An animation-first React component library."
columns={[
{ heading: "Product", links: [{ label: "Components", href: "#" }] },
{ heading: "Resources", links: [{ label: "Docs", href: "#" }] },
]}
copyright="© 2026 WebberUI"
/>SiteFooter offers two layouts: columns (brand + multi-column links + a social row along the bottom) and minimal (a centered brand with inline navigation and social links). Just switch variant.
<SiteFooter
variant="minimal"
brand="WebberUI"
navLinks={[
{ label: "Docs", href: "#" },
{ label: "Components", href: "#" },
]}
social={[{ label: "GitHub", href: "#", icon: <Github className="size-4" /> }]}
copyright="© 2026 WebberUI"
/>CtaSection Props
| Prop | Type | Default | Description |
|---|---|---|---|
title | React.ReactNode | — | The main heading (required) |
eyebrow | React.ReactNode | — | A small label above the title |
description | React.ReactNode | — | Explanatory text below the title |
actions | React.ReactNode | — | The action button area, usually holding 1–2 buttons |
align | "center" | "left" | "center" | Content alignment |
glow | boolean | true | Whether to show the flowing background glow |
delay | number | 0 | Delay before the reveal starts (seconds) |
stagger | number | 0.12 | Stagger interval between children (seconds) |
once | boolean | true | Play only the first time the element enters the viewport |
SiteFooter Props
| Prop | Type | Default | Description |
|---|---|---|---|
variant | "columns" | "minimal" | "columns" | Footer layout |
brand | React.ReactNode | — | Brand name or logo node |
tagline | React.ReactNode | — | Tagline below the brand (the columns layout) |
columns | FooterColumn[] | [] | Link columns (the columns layout) |
navLinks | FooterLink[] | [] | Inline navigation links (the minimal layout) |
social | FooterLink[] | [] | Social links, best paired with an icon |
copyright | React.ReactNode | — | Copyright text |
delay | number | 0 | Delay before the reveal starts (seconds) |
stagger | number | 0.1 | Stagger interval between children (seconds) |
once | boolean | true | Play only the first time the element enters the viewport |
FooterLink / FooterColumn
interface FooterLink {
label: string; // Link text; serves as the accessible name when icon-only
href: string; // Link target
icon?: React.ReactNode; // Optional icon
}
interface FooterColumn {
heading: string; // Column heading
links: FooterLink[];
}How it works
- Both sections are triggered with
whileInViewand usestaggerChildrento reveal their children in sequence; thecolumnslayout uses a nested stagger so that the brand area, each link column, and the bottom row form one continuous ripple of rhythm. - The background glow in
CtaSectionis made of two neutral-colored blurred blobs drifting slowly in a loop; it is purely decorative. - Everything uses neutral colors (
neutral-*) plusdark:variants, which makes it easy to carry over your own theme; the hover transition duration can be overridden through--wb-duration-fast.
Accessibility
- When the user has "reduce motion" enabled at the system level, both sections render their static version directly and the glow stops drifting.
CtaSectionuses<section aria-labelledby>pointing at the title, which makes it a named landmark.SiteFooteruses the native<footer>tag (with its implicitcontentinfolandmark), all links are real<a>elements, and icon-only social links get theiraria-labelfromlabel.- Every link has a
focus-visibleoutline and can be operated with the keyboard.
Feature Section Set
One set of feature data, three finished layouts — an asymmetric bento grid, a sticky side-by-side scroll, and a row of equal-width cards — applied by switching the variant.
Auth Pages
A sign-in / sign-up page pair with form motion — fields expanding and collapsing, heading and button text morphing, and a submit loading state.