Pre-launch screens: an early-access waitlist that turns into a queue card whose position rolls down as referrals land, and a blueprint-grid launch page with an exploded drawing, rolling countdown and a reserve-a-seat ticket stamp.
Early access
early-access.tsxEmail capture with a live join counter over breathing rings, then a queue card: rolling position, people-in-line strip, copyable invite link and progress toward skipping the line.
| Prop | Type | Default | Description |
|---|---|---|---|
productName | string | "Kestrel Copilot" | Header lockup. |
eyebrow | string | — | Pill above the headline. |
headline | string | — | Main headline. |
subcopy | string | — | Paragraph under the headline. |
joinedCount | number | 4812 | Starting value of the live join counter. |
spotsPerReferral | number | 120 | Spots gained per referral. |
referralGoal | number | 3 | Referrals needed to skip the line. |
onJoin | (email: string) => Promise<{ position; referralUrl } | void> | — | Joins the list. Return nothing to use a generated position and link. Throw to show an error. |
referralBase | string | — | Prefix for generated referral links. |
referrals | number | — | Controlled referral count; hides the simulate button. |
simulateReferrals | boolean | true | Show a button that simulates a friend joining. |
className | string | — | Classes for the outer container. |
Blueprint launch
blueprint-launch.tsxLaunch page drawn on a blueprint grid: drawing-sheet frame with ruler and title block, exploded isometric plates that draw themselves, a rolling countdown and a seat ticket that gets an Approved stamp.
| Prop | Type | Default | Description |
|---|---|---|---|
productName | string | "Kestrel Engine 3" | Shown on the dimension line and title block. |
drawingNo | string | "KST-ENG-003" | Drawing number in the title block. |
headline | string | — | Main headline. |
subcopy | string | — | Paragraph under the headline. |
launchAt | string | number | — | Launch moment (ISO or epoch ms). Defaults to about 9 days after the page opens. |
layers | [string, string, string] | ["Copilot", "Query engine", "Collector"] | Labels for the exploded plates, top to bottom. |
onReserve | (email: string) => void | Promise<void> | — | Reserves a seat. Throw to show an error. |
className | string | — | Classes for the outer container. |
Install the whole set
Installs every waitlist pages variant at once. Each section above has its own command for a single variant.
Pro installs use your private registry token. Add the @geturui-pro registry once — setup guide. The command works after you get Pro.
Also installs: Button, Copy Button, Input
Accessibility
- Email fields are labelled and validated with inline errors; focus returns to the field on error.
- Queue position and countdown changes are exposed as text (aria-live and role=timer with a full-sentence label).
- Looping backdrop and drawing animations stop under reduced motion; digits fade instead of rolling.