LaunchQ Docs
Everything you need to build, embed, and grow a viral waitlist — from your first signup to launch day.
Quick Start
Get a live waitlist in under 5 minutes. No engineering required.
1. Create your account
Go to launchq.co/auth/signup and create a free account with your email.
2. Create a waitlist
From the dashboard, click New Waitlist. Give it a name — this sets your public URL slug (e.g. launchq.co/w/your-app).
3. Embed or share
Copy your hosted page link and share it directly, or grab the embed snippet and drop it on your website. Your waitlist is live immediately.
React Component
The recommended way to add a LaunchQ waitlist to any React app. Ships as launchq-react — zero runtime dependencies, ~9KB, supports React 17+.
Install
npm install launchq-react
Basic usage
import { LaunchQWaitlist } from 'launchq-react'
export default function Waitlist() {
return (
<LaunchQWaitlist
slug="your-slug"
onSuccess={(data) => console.log('Joined!', data)}
/>
)
}The component fetches your waitlist config, renders the signup form, handles submissions, and shows a success state with position, referral link, and social sharing — all out of the box.
Props
With custom theme
<LaunchQWaitlist slug="your-slug" theme="light" accentColor="#6366f1" buttonText="Get Early Access" placeholder="Enter your email" />
Render prop (full control)
Pass a function as children for complete rendering control while still getting all the logic handled for you:
<LaunchQWaitlist slug="your-slug">
{({ email, setEmail, submit, submitting, result }) => (
result ? (
<p>You're #{result.position}!</p>
) : (
<form onSubmit={(e) => { e.preventDefault(); submit() }}>
<input value={email} onChange={(e) => setEmail(e.target.value)} />
<button disabled={submitting}>
{submitting ? 'Joining...' : 'Join'}
</button>
</form>
)
)}
</LaunchQWaitlist>Works with
Next.js, Vite, Remix, Gatsby, Create React App, and any React 17+ project.
?ref= from the URL to track referrals. No extra setup needed.Headless Hook
For when you want full UI control but don't want to wire up API calls yourself. The useWaitlist hook handles config fetching, email state, form submission, error handling, and referral tracking.
Install
npm install launchq-react
Usage
import { useWaitlist } from 'launchq-react'
export default function CustomWaitlist() {
const {
config, loading,
email, setEmail,
submit, submitting,
error, result,
} = useWaitlist({ slug: 'your-slug' })
if (loading) return <p>Loading...</p>
if (result) {
return (
<div>
<h2>You're #{result.position}!</h2>
<p>Share your link: {result.referralLink}</p>
</div>
)
}
return (
<form onSubmit={(e) => { e.preventDefault(); submit() }}>
<input
value={email}
onChange={(e) => setEmail(e.target.value)}
placeholder="you@email.com"
/>
<button disabled={submitting}>
{submitting ? 'Joining...' : 'Join waitlist'}
</button>
{error && <p style={{ color: 'red' }}>{error}</p>}
</form>
)
}Hook options
Return values
<LaunchQWaitlist> component. Use it when you need a fully custom design.Script Embed
For non-React sites — WordPress, Webflow, Squarespace, Framer, Shopify, or any HTML page. Drop two lines and you're live.
Usage
<!-- Place where you want the form --> <div data-launchq="your-slug"></div> <!-- Before </body> --> <script src="https://cdn.launchq.co/w/embed.js"></script>
The data-launchq attribute value is your waitlist slug. The script auto-sizes the form — no fixed dimensions needed.
Custom height
Override the default height with data-height:
<div data-launchq="your-slug" data-height="560"></div>
Works on
Framer, Webflow, WordPress, Squarespace, Shopify, Ghost, Notion embeds, and any platform that allows custom HTML or script injection.
Hosted Page
Every waitlist gets a public URL at launchq.co/w/your-slug. Share it directly on Twitter, in your bio, or via email — no website or coding required.
Features
- Fully branded with your app name, logo, colors, and copy
- Signup form with referral tracking built in
- Success screen with position number, referral link, and social sharing
- Responsive — works on mobile, tablet, and desktop
- Live status shown — Live, Paused, or Closed
Referral System
The referral system is what makes LaunchQ waitlists grow on autopilot. Every subscriber gets a unique referral link. When someone signs up through it, both the referrer and the new subscriber benefit.
How position bumps work
Each successful referral moves the referrer up by a configurable number of positions. You set this in the waitlist settings under Positions per referral (default: 5).
Referral links
Every subscriber's referral link looks like this:
https://launchq.co/w/your-slug?ref=ABC123
The ref parameter is the subscriber's unique 6-character referral code. It's shown to them on the success screen and in their confirmation email.
Viewing referrals
In your dashboard, go to Referrals to see a leaderboard of your top referrers, total referral count, and which subscribers brought the most value.
Milestone Rewards
Milestones are the gamification layer. When a subscriber hits a referral count threshold, they unlock a custom reward — and get notified automatically.
Creating a milestone
Go to Rewards in the sidebar. Click Add milestone. Set:
- Referrals required (e.g. 3, 10, 25)
- Reward label (e.g. "Lifetime deal", "Early access")
- Icon / emoji to display
What happens when a milestone is hit
The subscriber is shown a celebration message in their referral dashboard. A notification email is queued if email flows are configured.
Email Automation
LaunchQ sends automated emails via AWS SES. Three flows fire out of the box — no configuration required for basic sending.
Flow 1 — Confirmation (immediate)
Fires the moment someone joins. Contains their position number, a congratulations message, and their personal referral link to start sharing immediately.
Flow 2 — Day-2 referral nudge
Fires automatically 47–49 hours after signup. Reminds the subscriber that they can climb higher by sharing their referral link. Includes the link again.
Flow 3 — Launch blast
Manually triggered from the dashboard. Sends a custom message to your entire active subscriber list. Use it when you actually go live.
Default sending address
By default, all emails are sent from noreply@launchq.co. To send from your own domain, see .
Bounce and complaint handling
Hard bounces, repeated soft bounces (3+), and spam complaints are automatically suppressed. Subscribers can unsubscribe via a one-click link in every email (RFC 8058 compliant).
Custom Domain
Send emails from your own domain (e.g. hello@yourapp.com) instead of noreply@launchq.co. This improves deliverability and brand trust.
Setup steps
- 1. Go to Settings → Custom sending domain
- 2. Enter your domain (e.g. yourapp.com) and a from-address
- 3. LaunchQ generates 5 DNS records to add to your domain
- 4. Add the CNAME and TXT records in your DNS provider
- 5. Click Verify — LaunchQ polls AWS SES until DKIM is confirmed
DNS records added
LaunchQ provisions:
- 3 DKIM CNAME records (for AWS SES email signing)
- 1 SPF TXT record (authorize SES to send for your domain)
- 1 DMARC TXT record (protect from spoofing)
Subscriber Management
Every subscriber is stored with rich metadata captured at signup time. View, filter, and export from the Subscribers tab.
Captured automatically
CSV export
Click Export CSV from the Subscribers view. The download includes all columns: email, position, referral count, location, device, and join date.
Subscriber statuses
- Active — on the list and receiving emails
- Unsubscribed — opted out via email link, no further emails
- Bounced — hard bounced, suppressed from future sends
Customization
Every visual aspect of your waitlist page and embed is configurable from the Widget Design tab in your dashboard.
Branding
- App name — shown above the waitlist form
- App logo URL — displayed alongside your app name
- Accent color — drives the button, highlights, and pulse dot
Copy
- Headline — the large serif title above the form
- Subtext — supporting copy below the headline
- Button text — the CTA on the submit button
Theme
Choose between Dark, Light, or Gradient background styles. The form inherits the theme whether embedded or on the hosted page.
Referral mechanics display
Toggle Show position to show or hide a subscriber's queue number on the success screen. Toggle Show referral link to control whether referral sharing is surfaced post-signup.
Settings
Waitlist status
Control whether your waitlist is accepting signups:
- Live — accepting signups, all flows active
- Paused — form shows a paused message, no new signups
- Closed — waitlist ended, form hidden
Positions per referral
Configure how many positions a referrer moves up per successful referral. Higher values create more aggressive viral incentive.
Danger zone
The Settings page includes a Danger zone for irreversible actions: deleting the waitlist and all associated subscribers. This action cannot be undone.