Staaarter

Waitlist Signup Counter

A centered coming-soon screen with a square eyebrow and a bold heading with an accent-highlighted phrase, followed by a working email waitlist form. Below the form, an avatar row and a signup counter update live as the counter's number increments each time a visitor successfully joins.

By Staaarter Team
Coming Soon
Docs
Live preview

Docs

Installation

A real shadcn registry command, not a copy-paste stand-in: it fetches this block plus its avatar, avatar-initials dependencies and any missing npm packages, and installs them straight into your project.

npx shadcn add https://staaarter.com/r/waitlist-signup-counter.json

Prefer not to use the CLI? Copy the source from the Code toggle above into src/components/blocks/coming-soon/comingsoon21.tsx instead.

Usage

The file also exports comingsoon21Demo, the exact props behind the preview above. Spread it to get a working section in one line, then replace it with your own data.

import { ComingSoon21, comingsoon21Demo } from "@/components/blocks/coming-soon/comingsoon21";

export default function Page() {
  return <ComingSoon21 {...comingsoon21Demo} />;
}

Props

PropTypeDefaultDescription
eyebrowstring"Coming soon"Small label above the heading.
headingPrefixstring"Be one of the"Heading text before the highlighted phrase.
highlightstring"first 1,000"Accent-colored phrase in the middle of the heading.
headingSuffixstring"to get access"Heading text after the highlighted phrase.
descriptionstring"We're opening things up gradually..."Supporting copy under the heading.
avatarsSignupAvatar[]noneStacked avatars rendered next to the signup counter.
signupCountnumbernoneStarting signup count the counter increments from.
classNamestringnoneExtra classes for the outer section element.

Types

interface SignupAvatar {
  name: string;
  image?: { src: string; alt: string };
}

Behavior notes

  • The email field and submit are real client state (useState): submitting swaps the form for a confirmation message and increments the signup counter by one, nothing is sent to a server.
  • The signup counter is seeded from the `signupCount` prop and only ever increases from real submissions in this session, it does not persist or sync across visitors.
  • Avatars fall back to initials (via AvatarFallback/initialsFromName) when no `image` is supplied per entry, same pattern as the chat blocks.