Waitlist Form
ProA 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#
This example is part of Koala UI Pro
The preview is yours to explore. Its code comes with a Pro license, paid once and used in every project.
Have a license? Unlock it here
API reference#
WaitlistForm
The whole block: badge, headline, a one-row email capture (Input and Button) and an Avatar proof stack. It owns its email and status, validates the address on submit and flips to a confirmed state. Forwards all native <div> props; className is merged last.
| Prop | Type | Default | Description |
|---|---|---|---|
| onJoin | (email: string) => void | Promise<void> | - | Called with the entered email on a valid submit. Return a promise to drive the button spinner. |
| count | number | 1200 | People already on the list, shown beside the avatars as 1,200+ with tabular-nums. 0 hides the proof row. |
| avatars | WaitlistAvatar[] | 4 initials | The proof stack, each { src?, fallback, alt? }. |
| badge | ReactNode | "Early access" | Pill above the headline. Pass null to hide it. |
| title | ReactNode | "Join the waitlist" | The headline, rendered as an <h3>. Pass null to hide it. |
| description | ReactNode | an invite note | Supporting line under the headline. Pass null to hide it. |
| placeholder | string | "you@company.com" | Placeholder of the email field. |
| action | ReactNode | "Join" | Label of the join button, followed by an arrow icon. |
| density | "compact" | "comfortable" | "compact" | Padding, gap and title size: compact is 16px, comfortable 24px. Falls back to the nearest DensityProvider. |