Getting Started

Create a campaign and embed the waitlist widget in under 5 minutes.

Step 1 — Deploy your instance

EarlyPass is open source and self-hosted. Stand up an instance first — Docker Compose is the fastest path:

  1. Follow the self-hosting guide to start the stack with Docker Compose or Kubernetes
  2. Open https://your-domain.com/dashboard/login in your browser
  3. Enter your email — EarlyPass uses magic links, no password required
  4. Click the link in your email (or check stdout if you haven't configured an email provider) — you're in

Step 2 — Create a campaign

A campaign is your waitlist. You can have multiple campaigns per account (e.g. one per product).

  1. In the dashboard, click New campaign
  2. Give it a name and a URL-friendly slug (e.g. my-product)
  3. Optionally set a Product URL — if set, the widget will only accept signups from that origin (CSRF protection). Leave blank to allow any origin during development.
  4. Click Create

After creation, you'll see your campaign dashboard with a live API key.

Step 3 — Embed the widget

Paste this snippet into any HTML page, replacing your-slug with your campaign slug:

<script
  src="https://your-domain.com/widget/widget.js"
  data-campaign="your-slug"
  async
></script>

The widget auto-injects at the location of the <script> tag. It's fully self-contained — no extra CSS imports, no npm package.

For customisation options (dark theme, accent colour, custom domain) see the Widget Reference.

Step 4 — Verify it works

  1. Open your page in a browser
  2. You should see the signup form rendered where you placed the script tag
  3. Submit a test email — you'll receive a verification email (or check the dashboard email preview in dev mode)
  4. After verifying, the widget shows your referral link and your position on the leaderboard

Return to the dashboard to see the signup appear in real time.

Step 5 — Invite your early users

When you're ready to grant access, use the Invite top N button in the dashboard. This sends personalised invite emails to your highest referrers first.

Each invite includes a unique token your product backend can verify:

GET  /api/v1/invites/{token}
     → { "status": "active", "email": "[email protected]", ... }

POST /api/v1/invites/{token}/redeem
     → marks the token redeemed (idempotent)

Next steps