Skip to content

Waitlist Join

An email input with live social proof that morphs into a personal confirmation card on submit. At rest it is a single dark capsule: email input on the left, social proof in the middle (four overlapping user avatars with names, and a rolling counter: '1,284 joined'), and a primary button on the right ('Join waitlist'). On submit, the entire pill morphs into a compact confirmation card showing the user's waitlist position ('#1,285'), the avatars, an invite link to copy, and a quiet thank-you. It never feels like a form; it feels like joining something.

Dependencies

motionlucide-react

Interaction

Shared-layout pill-to-card container morph with ease-out position odometer, staggered avatar entrance, SVG spinner feedback, and accessible keyboard focus hand-off.

Props

PropTypeDescription
onSubmit(email: string) => Promise<{ position: number } | void> | { position: number } | voidSubmit handler called with the entered email. Can return a custom position. Your app handles the email. This component sends nothing.
countnumberNumber of people currently on the waitlist.
avatars{ name: string; src?: string }[]Recent members shown in the social proof stack (up to 4).
inviteUrlstringPersonal invite link shown in the success confirmation view.
placeholderstringEmail input placeholder text.
buttonLabelstringText label for the submit button.
classNamestringAdditional CSS class names for the container.

MIT License. Free to use in personal and commercial projects. Built for Peel UI.