A closing call to action with centered copy above two image tiles, one floating a live countdown and the other an inline email capture, closing on a line of fine print.
A closing call to action with centered copy above two image tiles, one floating a live countdown and the other an inline email capture, closing on a line of fine print.
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/cta81?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/cta81?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/cta81.tsx, the event12 countdown and form36 capture pieces it floats on the two tiles (installed to components/beste/piece/{name}.tsx), and the badge23 component it uses for the eyebrow.
The installed file exports cta81Demo alongside the block: the exact props behind the preview above. Spread it to get a working call to action in one line.
import { Cta81, cta81Demo } from "@/components/beste/block/cta81";
export default function Page() {
return <Cta81 {...cta81Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Cta81 } from "@/components/beste/block/cta81";
import { Event12 } from "@/components/beste/piece/event12";
import { Form36 } from "@/components/beste/piece/form36";
export default function Page() {
return (
<Cta81
badge={{ label: "Early access" }}
heading="The doors open in twelve days"
description="When the counter reaches zero it opens to everyone, and the first hundred workspaces keep launch pricing for good."
countdown={{
media: (
<Event12
title="Opens to everyone in"
units={[
{ value: "12", label: "days" },
{ value: "06", label: "hrs" },
{ value: "48", label: "min" },
]}
caption="Launch pricing stops when the counter does."
/>
),
image: { src: "/backdrops/green.jpg", alt: "Deep green gradient backdrop" },
}}
capture={{
media: (
<Form36
label="Get the launch note"
placeholder="you@practice.com"
submitLabel="Join"
finePrint="One email when we open the doors. Nothing else, ever."
/>
),
image: { src: "/backdrops/blue.jpg", alt: "Soft blue gradient backdrop" },
}}
note="Already on the list? We will write to the address you signed up with."
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string } | – | Centered eyebrow above the heading, rendered through Badge23 |
heading | string | – | Section heading, centered and capped at max-w-2xl |
description | string | – | Centered supporting paragraph, capped at max-w-xl |
countdown | Panel | – | Left tile, carrying its own asset and optional backdrop |
capture | Panel | – | Right tile, same shape as countdown |
note | string | – | Centered fine print under the tiles |
className | string | – | Extra classes for the outer section |
type Panel = {
media: ReactNode;
image?: TileImage;
};
type TileImage = {
src: string;
alt: string;
};capture leaves a single tile in the left grid column rather than centering it, so pass both or adjust the grid yourself.media is required on a panel while image is optional, so a tile can float its asset on the plain muted surface.form36 piece. This block holds no form state and has no submit handler, so wiring the subscribe call is done on the piece.h-64, then md:h-72) and sit in a plain md:grid-cols-2, so both stay the same size regardless of what the pieces inside them contain.note is capped at max-w-xl and centered independently of the tiles, which keeps the fine print at a readable measure under a much wider row.Wiring the form up
The email capture is a presentational piece with no submit handling of its own. When you connect it to a real list, the patterns in React Hook Form, TanStack Form, and Formisch cover validation and submission for exactly this shape of single-field form.
cta26
Urgency-driven call-to-action with countdown numbers and limited-time offer messaging. Perfect for launches and time-sensitive promotions.
cta91
A closing call to action that leads with a narrow portrait tile floating a live phone frame, then sets centered copy and two actions beneath it over three hairline promises.
cta76
A centered call to action led by a floating plan price card on an image tile, followed by an eyebrow, a large light heading, a paragraph, two accent buttons, and a reassurance note.
cta74
A centered call to action with an eyebrow pill, a large light heading, a short paragraph, and two accent buttons on a clean surface.