Skip to content

Synapsr/WaitList-Page

Repository files navigation

Waitlist

A beautiful, dead-simple waitlist page that deploys in seconds. One Docker command, zero configuration required.

License Docker

Features

  • One command deploy - Works out of the box with sensible defaults
  • Fully customizable - Configure everything via environment variables
  • Multiple storage backends - JSON file, webhooks, SMTP notifications
  • Modern UI - Clean, responsive design with dark/light themes
  • Countdown timer - Optional launch countdown
  • Tiny footprint - ~15MB Docker image
  • Production ready - Rate limiting, input validation, health checks

Quick Start

docker run -p 3000:3000 ghcr.io/synapsr/waitlist-page

That's it. Open http://localhost:3000

Customization

docker run -p 3000:3000 \
  -e TITLE="My Awesome App" \
  -e SUBTITLE="Join the revolution" \
  -e PRIMARY_COLOR="#10b981" \
  -e THEME="dark" \
  -e COUNTDOWN_DATE="2024-12-31T00:00:00Z" \
  -v ./data:/data \
  ghcr.io/synapsr/waitlist-page

Configuration

Display

Variable Default Description
TITLE Something awesome is coming Main heading
SUBTITLE Be the first to know when we launch... Subheading
LOGO_URL - URL to your logo image
PRIMARY_COLOR #6366f1 Brand color (hex)
THEME light light or dark
COUNTDOWN_DATE - ISO 8601 date for countdown
BUTTON_TEXT Join Waitlist Submit button text
PLACEHOLDER Enter your email Input placeholder
SUCCESS_MESSAGE You're on the list! Success message

Storage

Variable Default Description
STORAGE_TYPE json json, webhook, smtp, or multi

JSON Storage (Default)

Emails are saved to a JSON file. Mount a volume to persist data:

docker run -p 3000:3000 -v ./data:/data ghcr.io/synapsr/waitlist-page

Emails are stored in /data/emails.json:

[
  {
    "email": "user@example.com",
    "timestamp": "2024-01-15T10:30:00Z",
    "ip": "192.168.1.1"
  }
]

Webhook Storage

Send emails to any HTTP endpoint (Zapier, Make, n8n, your API):

docker run -p 3000:3000 \
  -e STORAGE_TYPE=webhook \
  -e WEBHOOK_URL="https://hooks.zapier.com/hooks/catch/xxx/xxx/" \
  -e WEBHOOK_SECRET="optional-secret" \
  ghcr.io/synapsr/waitlist-page

Payload sent to your webhook:

{
  "email": "user@example.com",
  "timestamp": "2024-01-15T10:30:00Z",
  "ip": "192.168.1.1",
  "user_agent": "Mozilla/5.0..."
}

If WEBHOOK_SECRET is set, requests include an X-Webhook-Signature header with HMAC-SHA256 signature.

SMTP Notifications

Get an email notification for each signup (also saves to JSON):

docker run -p 3000:3000 \
  -e STORAGE_TYPE=smtp \
  -e SMTP_HOST=smtp.gmail.com \
  -e SMTP_PORT=587 \
  -e SMTP_USER=you@gmail.com \
  -e SMTP_PASS=your-app-password \
  -e SMTP_FROM=you@gmail.com \
  -e SMTP_TO=you@gmail.com \
  -v ./data:/data \
  ghcr.io/synapsr/waitlist-page

Multi Storage

Combine multiple backends:

docker run -p 3000:3000 \
  -e STORAGE_TYPE=multi \
  -e STORAGE_BACKENDS="json,webhook" \
  -e WEBHOOK_URL="https://your-webhook.com" \
  -v ./data:/data \
  ghcr.io/synapsr/waitlist-page

Admin API

Access collected emails via API:

docker run -p 3000:3000 \
  -e ADMIN_TOKEN="your-secret-token" \
  -v ./data:/data \
  ghcr.io/synapsr/waitlist-page
curl -H "Authorization: Bearer your-secret-token" http://localhost:3000/api/emails

Docker Compose

services:
  waitlist:
    image: ghcr.io/synapsr/waitlist-page:latest
    ports:
      - "3000:3000"
    volumes:
      - ./data:/data
    environment:
      - TITLE=My Product
      - PRIMARY_COLOR=#10b981
      - THEME=dark
    restart: unless-stopped

API Endpoints

Method Path Description
GET / Waitlist page
POST /api/subscribe Submit email
GET /api/health Health check
GET /api/emails List emails (requires ADMIN_TOKEN)

Development

# Clone
git clone https://github.com/Synapsr/WaitList-Page.git
cd WaitList-Page

# Run with Docker
docker compose up --build

# Or with Go
go run .

Deployment Examples

Railway

Deploy on Railway

Fly.io

fly launch
fly secrets set TITLE="My App" PRIMARY_COLOR="#10b981"
fly deploy

Render

Create a new Web Service, connect your repo, and set environment variables in the dashboard.

Security

  • Email validation (format + length)
  • Rate limiting (5 requests/minute per IP)
  • XSS prevention (escaped outputs)
  • Webhook signature verification (HMAC-SHA256)
  • Non-root container user

License

MIT

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors