Waitlist Form
A centered waitlist block: a headline, a one-row email capture and a social-proof footer with overlapping avatars and a running count. On submit it flips to a confirmed state; wire onJoin to your list.
Installation#
Usage#
usage.tsxTSX
"use client"
import { WaitlistForm } from "@/components/ui/waitlist-form"
export function Example() {
async function join(email: string) {
await fetch("/api/waitlist", { method: "POST", body: JSON.stringify({ email }) })
}
return <WaitlistForm count={1284} onJoin={join} />
}API reference#
WaitlistForm
Composes Input, Button, and Avatar. Forwards all <div> props.
onJoin:(email: string) => void | Promise<void>.count: people already joined, shown beside the avatars (tabular-nums).avatars:{ src?, fallback, alt? }[]for the proof stack.badge,title,description,placeholder,action: override the copy.