Launch Party RSVP

(Launch party)

You're invited to the launch.

Oct 24, 6pm GMTLive, online

A short live show to open the doors: a walkthrough, a few surprises, and first access for everyone watching. Save your spot.

AttendeeAttendeeAttendeeAttendeeAttendee

320 people are coming

About this block

Launch Party RSVPPRO

A launch-event coming-soon section on a soft muted card with a monospace parenthetical eyebrow, a heading, a when and where row, a working RSVP email form, an outline add-to-calendar pill button, and an attendee avatar row.

ComingSoon75: Launch Party RSVP

A monochrome launch-event card that centers a parenthetical eyebrow, an invitation heading, a when-and-where meta row, and a supporting paragraph over a soft muted surface, then pairs a working RSVP email form and its success state with an add-to-calendar button and an attendee avatar row for social proof.

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.

Upgrade Now

Installation

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

bash
npx shadcn add "https://ui.beste.co/r/comingsoon75?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/comingsoon75?email=YOUR_EMAIL&license_key=YOUR_KEY"

This installs the block to components/beste/block/comingsoon75.tsx.

Quick start

The installed file exports comingsoon75Demo alongside the block: the exact props behind the preview above. Spread it to get a working RSVP page in one line.

tsx
import { ComingSoon75, comingsoon75Demo } from "@/components/beste/block/comingsoon75";

export default function Page() {
  return <ComingSoon75 {...comingsoon75Demo} />;
}

Then replace the demo with your own props. Written out, a trimmed setup looks like this:

tsx
import { ComingSoon75 } from "@/components/beste/block/comingsoon75";

export default function Page() {
  return (
    <ComingSoon75
      badge={{ label: "Launch party" }}
      heading="You're invited to the launch."
      description="A short live show to open the doors, with first access for everyone watching."
      button={{ label: "Add to calendar", href: "/launch.ics" }}
      attendees={[
        { src: "/people/ava.jpg", alt: "Ava" },
        { src: "/people/theo.jpg", alt: "Theo" },
        { src: "/people/priya.jpg", alt: "Priya" },
      ]}
      labels={{
        when: "Oct 24, 6pm GMT",
        where: "Live, online",
        placeholder: "[email protected]",
        success: "You're on the guest list. We'll send the link before we go live.",
        proof: "320 people are coming",
      }}
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string }–Eyebrow badge rendered above the heading via Badge7
headingstring–Invitation heading
descriptionstring–Supporting paragraph under the meta row
buttonActionLink–Add-to-calendar link rendered via Button12 with a CalendarPlus icon
attendeesAvatarItem[][]Overlapping avatar stack shown as social proof
labelsComingSoon75Labels{}When and where meta text plus the form placeholder, success, and proof strings
classNamestring–Extra classes for the outer <section>
ts
type ActionLink = {
  label: string;
  href: string;
};

type AvatarItem = {
  src: string;
  alt: string;
};

type ComingSoon75Labels = {
  when?: string;
  where?: string;
  placeholder?: string;
  success?: string;
  proof?: string;
};

Behavior notes

  • The RSVP form owns its email state and swaps to a success panel on submit; handleSubmit calls preventDefault and only flips when the trimmed email is non-empty, so there is no external callback to wire.
  • The button renders as an add-to-calendar link via Button12 asChild wrapping a Next.js <Link href={button.href} /> with the outline tone, and it is hidden once the form is submitted.
  • Every region is optional: the eyebrow, heading, description, the when-and-where row, the button, and the attendee proof each render only when their prop or label is present.
  • The meta row renders whenever labels.when or labels.where is set, with a Clock icon beside the time, and the proof block renders when either attendees or labels.proof is present.
  • The whole card is a centered bg-muted surface in a max-w-3xl column, and every string is plain text with no inline markup parsing, so HTML passed in shows as escaped text.
  • Attendee avatars render as a -space-x-3 overlapping stack of plain <img> elements with border-muted rings that blend into the card surface.

Wiring the form up

The RSVP 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.

More Coming Soon blocks

View all Coming Soon
PRO

comingsoon72

Exhibition Opening RSVP

PRO

comingsoon61

Community Launch Waitlist

PRO

comingsoon50

Launch Readiness Progress

Get Pro access