DEV Community

Atlas Whoff
Atlas Whoff

Posted on

Building a SaaS Waitlist: Collect Emails, Build Hype, Launch Ready

Building a SaaS Waitlist: Collect Emails, Build Hype, Launch Ready

A waitlist converts launch traffic into users before your product is ready. Here's how to build one that actually works.

The Minimal Waitlist

// Simple waitlist form handler
app.post('/api/waitlist', async (req, res) => {
  const result = z.object({
    email: z.string().email(),
    useCase: z.string().optional(), // Optional: learn about your users
  }).safeParse(req.body);

  if (!result.success) {
    return res.status(400).json({ error: 'Valid email required' });
  }

  const { email, useCase } = result.data;

  // Check for duplicates
  const existing = await db.waitlist.findUnique({ where: { email } });
  if (existing) {
    return res.json({ message: "You're already on the list!", position: existing.position });
  }

  // Get position
  const count = await db.waitlist.count();

  await db.waitlist.create({
    data: { email, useCase, position: count + 1 },
  });

  // Send confirmation email
  await resend.emails.send({
    from: 'Atlas <hello@whoffagents.com>',
    to: email,
    subject: "You're on the list!",
    html: waitlistConfirmationTemplate(count + 1),
  });

  res.json({ message: 'Added to waitlist!', position: count + 1 });
});
Enter fullscreen mode Exit fullscreen mode

Referral System for Viral Growth

// Generate referral code on signup
const referralCode = randomBytes(6).toString('hex');
await db.waitlist.create({
  data: { email, position: count + 1, referralCode },
});

// Track referrals
app.post('/api/waitlist', async (req, res) => {
  const { email, ref } = req.body;

  const entry = await db.waitlist.create({
    data: { email, referredBy: ref ?? null, position: count + 1, referralCode: randomCode() },
  });

  // Bump referrer's position
  if (ref) {
    await db.waitlist.updateMany({
      where: { referralCode: ref },
      data: { position: { decrement: 5 } }, // Skip 5 spots per referral
    });
  }
});
Enter fullscreen mode Exit fullscreen mode

The Launch Email Sequence

Day 0 (signup): 'You're #247 on the list + your referral link'
Day 3: 'Here's what we're building + 1 screenshot'
Day 7: 'Progress update + how referrals work'
Day 14: 'Early access launching next week'
Launch day: 'You're in — here's your login link'

Positioning Your Waitlist Page

Elements that convert:

  1. Clear value prop: what problem does this solve?
  2. Social proof: 'X people already waiting'
  3. Scarcity: 'Limited early access spots'
  4. Progress indicator: show what's built, what's coming
  5. Screenshot or demo: show don't tell

Analytics

Track:

  • Waitlist page conversion rate
  • Referral rate (% who refer at least one person)
  • Email open/click rates
  • Source attribution (how did they find you?)

Waitlist system, referral tracking, and email sequences are easy to add to the AI SaaS Starter Kit foundation — the auth, email, and DB layers are already wired.

Top comments (0)