A bordered pre-launch offer card with a square eyebrow, a heading, a checked benefit list, a seats-claimed progress bar, and a working rounded email-capture form with a success state.
A bordered pre-launch offer card from the Polaris set that leads with a single accent color, stacking a square eyebrow, a heading, a supporting paragraph, a checked benefit list, a seats-claimed progress bar, and a working rounded email-capture form with its success state.
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/comingsoon23?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/comingsoon23?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/comingsoon23.tsx.
The installed file exports comingsoon23Demo alongside the block: the exact props behind the preview above. Spread it to get a working offer card in one line.
import { ComingSoon23, comingsoon23Demo } from "@/components/beste/block/comingsoon23";
export default function Page() {
return <ComingSoon23 {...comingsoon23Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { ComingSoon23 } from "@/components/beste/block/comingsoon23";
export default function Page() {
return (
<ComingSoon23
label="Founding Offer"
heading="Join as a founder, keep 40% off for good."
description="The first five hundred members set the price they'll always pay."
benefits={[
"40% off every plan, for as long as you stay",
"A direct line to the team building the product",
"First vote on what we ship after launch",
]}
spotsProgress={74}
spotsText="372 of 500 claimed"
labels={{
spotsCaption: "Founding seats claimed",
placeholder: "Enter your email to claim yours",
success: "Seat reserved. We'll email your founder code before launch.",
finePrint: "No charge today. Your rate is locked the moment we open.",
}}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
label | string | – | Square eyebrow rendered via Badge6 |
labels | ComingSoon23Labels | {} | Spots caption plus the form placeholder, success, and fine-print strings |
heading | string | – | Offer heading under the eyebrow |
description | string | – | Supporting paragraph under the heading |
benefits | string[] | [] | Benefit lines rendered as a checked list |
spotsProgress | number | 0 | Seats-claimed percentage, clamped to the 0 to 100 range |
spotsText | string | – | Bold seats-claimed count shown above the progress bar |
className | string | – | Extra classes for the outer <section> |
type ComingSoon23Labels = {
spotsCaption?: string;
placeholder?: string;
success?: string;
finePrint?: string;
};handleSubmit calls preventDefault and only flips when the trimmed email is non-empty, so there is no external callback to wire.spotsProgress value is clamped with Math.max(0, Math.min(100, spotsProgress)) and drives the bar width inline, which animates via a transition-[width] class.benefits is non-empty.spotsText or labels.spotsCaption is set, pairing the caption and bold count above the bar; the finePrint line renders only before submit.bg-card surface with a border in a max-w-2xl column, and every string is plain text with no inline markup parsing, so HTML passed in shows as escaped text.Wiring the form up
The offer form ships with local state and a success message but no backend, so submissions are not sent anywhere until you connect one. Point handleSubmit at your own route handler or email platform, or wire in a form library. For a walkthrough of the options, see React Hook Form, TanStack Form, and Formisch.
comingsoon15
A centered pre-launch section with an eyebrow, a large light heading, a paragraph, an image tile holding a working email-capture form with a success state, and a social-proof note.
comingsoon44
A personal pre-launch section with a square eyebrow, a statement heading, a short founder note in paragraphs, and a signature row with avatar beside a dark seal waitlist button.
comingsoon50
A coming-soon section on a soft muted card with a monospace parenthetical eyebrow, a heading, a launch-readiness percentage that counts up with an animated progress bar, a build-status row, and a working email notify form.
comingsoon43
A pre-launch survey card with a square eyebrow, a heading, a single-choice question with selectable radio options, and a working rounded email-capture form with a success state.