Open source MIT licensed and self-hosted →

The waitlist you own, for every product you launch

Lobby gives each product a signup form, double opt-in, a place in line, referral links that move people up and invite waves. It's one binary and one SQLite file, with no monthly bill.

$ docker run -p 8080:8080 -v lobby:/data ghcr.io/rohansx/lobby
A real signup, end to end

Visitor joins from your landing page → confirms by email → sees their place in line → shows up in your dashboard.

14 MBsingle binary
~20 MBmemory at idle
<2 KBembed widget, gzipped
1 fileSQLite holds everything
$0per month, per list
Features

Everything a launch needs, nothing you'll pay for monthly

The parts hosted waitlist tools charge for are included: referrals, invites, webhooks, broadcasts and a dashboard for all your products.

One dashboard for every product

Signups per day, confirm rate, top sources and top referrers. Run the waitlists for all your side projects from one install.

Lobby dashboard overview

Referrals that move people up

Every confirmed friend moves the referrer 10 places up (configurable), or keep a strict first-come line.

Credit only lands after the friend confirms, and it's capped per IP address and per hour, so a script can't farm it.

Spam handled, no CAPTCHA

A honeypot field, timing checks, rate limits, a disposable-domain list and MX lookups keep bots out without annoying people.

Invite waves

Click Invite next 50. The front of the line gets a magic link and a code bound to their address. Your app redeems it with one API call.

Know the moment it happens

An email to you for each new signup, with its source and referrer. Signed webhooks and a Slack preset for everything else.

Emails that land, and look right

Double opt-in, status, invite and launch-broadcast emails through Resend or any SMTP server, with one-click unsubscribe and bounce suppression.

Confirmation email

Private by default

IP addresses are kept only as keyed hashes and cleared after 30 days. Public pages set no cookies. Consent text is versioned per signup. Export to CSV or NDJSON any time.

Signups list
How it works

From first visit to first invite

Sign up

From your widget, a plain HTML form or the hosted page. Gmail dots and +tags fold together, so nobody signs up twice.

Confirm

The confirmation link opens their status page: their place in line, how many are behind them, and a link to share.

Refer

Friends who join and confirm through that link move the referrer up the line. Your dashboard shows who's driving growth.

Invite

Send invites in waves from the front of the line, then a launch broadcast to everyone when you're live.

For your signups

A status page worth sharing

Every confirmed signup gets their own page showing where they stand and a referral link to copy. It's server-rendered, needs no JavaScript and sets no cookies.

  • Place in line and how many people are behind
  • One-click copy of their referral link
  • Your project name, with no Lobby account needed to view it
Status page with place in line and referral link
For you

Every number that matters, in light or dark

See where signups come from, who refers the most, and how many confirmed. Invite, export, broadcast and manage webhooks from the same place.

Lobby dashboard
Embed

Drop it into any site in one line

Every project gives you three ways in. The dashboard shows each snippet with your keys already filled in.

index.html
<div id="waitlist"></div>
<script defer
  src="https://wait.example.com/v1/wl.js"
  data-project="pk_…"
  data-target="#waitlist"
  data-counter></script>

<!-- Theme it with CSS variables -->
<style>
  #waitlist { --wl-accent: #2a78d6; --wl-radius: 10px; }
</style>
The widget embedded on a product landing page
Why self-host

Your launch list is your most valuable list

It's the people who asked to hear from you before you existed. Keep it on your own server.

LobbyTypical hosted waitlist
PriceFree and MIT licensed. Runs on a $5 VPS next to your other appsA monthly plan, often priced per list or per signup
Where your list livesOne SQLite file on your server, with continuous S3 backup via LitestreamTheir database
Multiple productsUnlimited projects in one installOften one list per plan
Referrals and invitesIncluded, with fraud checksOften on higher tiers
Email senderYour domain, through Resend or any SMTP serverVaries, often their domain
LeavingCSV or NDJSON export, or just copy the fileExport, if your plan includes it
Self-host

Running in under a minute

Start the container, open it in a browser, create your admin account and your first project. Then paste a snippet onto your site.

Docker

The image is multi-arch (amd64 and arm64) and includes Litestream for backups.

docker run -d -p 8080:8080 \
  -v lobby-data:/data \
  -e LOBBY_BASE_URL=https://wait.you.com \
  -e RESEND_API_KEY=re_… \
  ghcr.io/rohansx/lobby:latest

Dokploy, Coolify, any VPS

Point your PaaS at the image or the repo, mount a volume at /data and set the public URL. A Dokploy template is included.

git clone https://github.com/rohansx/lobby
cd lobby
LOBBY_BASE_URL=https://wait.you.com \
  docker compose up -d

Drive it from the CLI

The binary is also a CLI, and every instance serves its whole API at /llms.txt for coding agents.

export LOBBY_URL=https://wait.you.com
export LOBBY_KEY=sk_…
lobby stats
lobby invite --next 50
lobby export --format csv > list.csv
FAQ

Questions

Is it really free?

Yes. Lobby is MIT licensed with no paid tier, no signup limits and no phone-home. You pay for the server it runs on and for your email provider, and Resend's free tier is enough for a small launch.

What do I need to run it?

Anything that runs a Docker container: a small VPS, Dokploy, Coolify, Fly.io or Railway. It idles at about 20 MB of memory. Mount a volume at /data so your list survives restarts.

Can I run waitlists for several products?

Yes. Each project has its own form, keys, allowed origins, emails, referral rules and settings, and they all share one dashboard.

How do I stop people gaming referrals?

A referral only counts after the friend confirms their email, credits are capped per IP address and per hour, and addresses are normalized so Gmail dots and +tags can't create duplicates. Disposable domains are rejected.

What about backups?

Set LITESTREAM_REPLICA_URL to any S3-compatible bucket and the database is replicated continuously. On an empty volume Lobby restores from the replica automatically.

How do I let people in when I launch?

Click Invite next N in the dashboard or run lobby invite --next 50. Each person gets a magic link and a code. Your product calls POST /v1/invites/redeem, or you send a launch broadcast to everyone at once.

Start your waitlist today

One command, your own server, and a list that stays yours.