Pick your preferred notification channels and we'll let you know the moment we launch.
We respect your privacy. Unsubscribe anytime.
Coming soon section with selectable notification channel cards for email, Slack, Twitter, and more. Perfect for letting users choose how they want to be notified at launch.
A centered coming-soon section that stacks an eyebrow badge, heading, and description above a responsive grid of selectable notification-channel cards, then reveals a per-channel input form and submit button once at least one channel is picked, swapping the whole section for a success panel on submit.
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/comingsoon11?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/comingsoon11?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/comingsoon11.tsx.
The installed file exports comingsoon11Demo alongside the block: the exact props behind the preview above. Spread it to get a working channel picker in one line.
import { ComingSoon11, comingsoon11Demo } from "@/components/beste/block/comingsoon11";
export default function Page() {
return <ComingSoon11 {...comingsoon11Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Bell, Mail } from "lucide-react";
import { ComingSoon11 } from "@/components/beste/block/comingsoon11";
export default function Page() {
return (
<ComingSoon11
badge={{ label: "Get notified", variant: "secondary" }}
heading="Choose how you want to hear from us"
description="Pick your channels and we'll ping you the moment we launch."
channels={[
{
icon: <Mail className="size-6" />,
title: "Email",
description: "A launch note straight to your inbox",
id: "email",
input: { type: "email", placeholder: "you@studio.com" },
},
{
icon: <Bell className="size-6" />,
title: "Push",
description: "Browser notification when we go live",
id: "push",
},
]}
labels={{
selectedCount: "{count} channel(s) selected",
submitButton: "Notify me",
successHeading: "You're on the list!",
successDescription: "We'll reach you via {channels} when we launch.",
footerText: "We respect your privacy. Unsubscribe anytime.",
}}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string; variant?: "default" | "secondary" | "outline" } | – | Eyebrow badge rendered above the heading via the shadcn Badge, defaulting to the default variant |
heading | string | – | Section heading |
description | string | – | Supporting paragraph under the heading |
channels | NotifyChannel[] | [] | Selectable channel cards; each carries an icon, title, description, id, and optional input |
labels | { selectedCount?: string; submitButton?: string; successHeading?: string; successDescription?: string; footerText?: string } | – | Copy for the selection count, submit button, success panel, and footer note |
className | string | – | Extra classes for the outer <section> |
interface NotifyChannel {
icon: React.ReactNode;
title: string;
description: string;
id: string;
input?: {
type: string;
placeholder: string;
};
}useState Set and toggles ids in and out as their cards are clicked, ringing and check-marking the selected ones.selected.size is above zero, and it renders one Input per selected channel that actually declares an input, so purely notification-style channels contribute no field.preventDefault and flips a submitted flag; the entire section is then replaced by a centered success panel with a check badge and pills for each chosen channel, so there is no external callback to wire.selectedCount and successDescription labels are token templates: {count} is replaced with the number selected and {channels} with the comma-joined channel titles.Wiring the form up
The form ships as UI without a backend, so submissions are not sent anywhere until you connect one. Point the submit handler 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.
comingsoon6
Coming soon section with an email waitlist input, stacked subscriber avatars, and a live join count. Perfect for building early traction and social proof before launch.
comingsoon55
A full-bleed image coming-soon hero with a bottom gradient and light text, a square eyebrow, a large heading and a supporting line, beside a solid notify card holding a working email form with a success state.
comingsoon5
Coming soon section with a grid of blurred sneak-peek feature cards and lock overlays that tease upcoming features. Perfect for building anticipation by showing what's coming without revealing full details.
comingsoon58
An e-commerce coming-soon section with a square eyebrow, a heading, a drop-date card, a grid of product teaser cards with blurred prices, and a working email notify form with a success state.