Features

Waitlist & Invites

Collect emails before launch, invite users in batches, and transition from invite-only to public signup.

MoveFast has a built-in system for managing pre-launch access. You can collect emails via a waitlist, invite users selectively, and switch to open signup when you are ready.

Platform Access Modes

The access mode is set in src/config/platform.config.ts:

typescript
import { PlatformAccessMode } from "@/config/platform.config";
 
export const PLATFORM_ACCESS_MODE = PlatformAccessMode.WAITLIST_WITH_INVITES;

WAITLIST_WITH_INVITES

This is the default mode. It is designed for pre-launch:

  • A waitlist form appears on the landing page
  • New users cannot sign up unless they have an invite
  • Existing users (already in the database) can still log in
  • Admins manage access through the invite system

OPEN

This is for when you are ready to go public:

  • Anyone can sign up freely
  • No waitlist form is shown
  • No invite required
  • Standard SaaS signup experience

The Waitlist Flow

1. User Joins the Waitlist

When in WAITLIST_WITH_INVITES mode, the landing page shows a waitlist form. When a user submits their email:

  • Their email is stored in the waitingList collection/table
  • They receive a welcome email confirming they are on the list
  • Duplicate submissions are blocked

2. Admin Reviews Waitlist

In the admin dashboard at /admin/dashboard/waitlist, you can see all emails that signed up for the waitlist.

3. Admin Sends Launch Emails

When you are ready to let users in, select waitlist entries and send launch emails. The launch email includes:

  • A message that the product is live
  • A link to the sign-in page

The system tracks who received the launch email to avoid sending duplicates.

4. Admin Sends Reminder Emails

For users who got the launch email but have not signed up, you can send a reminder. Reminders only go to users who:

  • Already received the launch email
  • Have not yet received a reminder
  • Are still on the waitlist (have not signed up)

5. User Signs Up

When a user signs up through the normal flow:

  • They are automatically removed from the waitlist
  • Their invite (if one exists) is marked as used

The Invite Flow

Invites give specific people permission to sign up, even before you send a mass launch email.

Creating an Invite

From the admin dashboard (/admin/dashboard/invites):

  1. Enter the email address
  2. Choose expiry (1 to 90 days, defaults to 7)
  3. Click "Send Invite"

The system:

  • Generates a unique token
  • Stores the invite record
  • Sends an email with a sign-up link

What the User Sees

The invite email contains a link like:

text
https://yourdomain.com/auth/invite?token=abc123def456

When they click it:

  1. The token is verified (checks it exists, is not expired, not used, not revoked)
  2. They are shown the sign-in page
  3. They sign in with Google or magic link
  4. The invite is marked as used
  5. They now have a full account

Invite Protection Rules

  • Cannot create an invite for someone who already has an account
  • Cannot create a duplicate invite for the same email (if one is already active)
  • Expired invites cannot be used
  • Revoked invites cannot be used
  • Admins can revoke any active invite at any time

Transitioning to Open Signup

When you are ready to let everyone in:

  1. Open src/config/platform.config.ts
  2. Change the mode:
typescript
export const PLATFORM_ACCESS_MODE = PlatformAccessMode.OPEN;
  1. Deploy the change

That is it. The waitlist form disappears from the landing page, and anyone can sign up without an invite. Existing waitlist data remains in the database (you can clean it up later if you want).


API Endpoints

These endpoints power the waitlist and invite system:

EndpointMethodAccessWhat it does
/api/waiting-listPOSTPublicJoin the waitlist
/api/waiting-list/send-emailsPOSTAdminSend launch or reminder emails
/api/admin/waiting-listGETAdminList all waitlist entries
/api/admin/invitesGETAdminList all invites
/api/admin/invitesPOSTAdminCreate a new invite
/api/admin/invites/[email]DELETEAdminDelete an invite
/api/admin/invites/[email]/revokePOSTAdminRevoke an invite
/api/auth/verify-inviteGETPublicVerify an invite token
/api/auth/signup-with-invitePOSTPublicSign up using an invite token

Tips

  • Start with WAITLIST_WITH_INVITES mode. It creates urgency and lets you control early access.
  • Use waitlist emails to build anticipation. Send launch emails in batches rather than all at once.
  • Invites are great for beta testers. Give them access early and collect feedback.
  • The waitlist welcome email is a good place to set expectations (timeline, what to expect).
  • When you switch to OPEN, consider sending one final launch email to remaining waitlist members.