Waitly is a modern waitlist application designed for early-stage products and private launches. It provides a clean public signup experience alongside a secure admin panel for managing waitlist entries.
- Public waitlist signup with email validation
- Automatic welcome email delivery after signup
- Secure admin authentication
- Admin-only waitlist management dashboard
- Admin accounts created via CLI for improved security (no public admin signup)
- Fully tested backend with CI support
- Frontend built with Next.js and TypeScript
- Next.js (App Router)
- TypeScript
- Tailwind CSS
- FastAPI
- PostgreSQL
- SQLAlchemy
- JWT-based authentication
- Password hashing with bcrypt
- GitHub Actions (CI)
- Pytest
- Docker (optional / production-ready)
├── .github/
│ └── workflows/ # GitHub Actions CI workflows
│
├── backend/
│ ├── app/
│ │ ├── core/ # App configuration and security utilities
│ │ ├── db/ # Database session and initialization
│ │ ├── dependencies/ # FastAPI dependencies (auth, admin guards)
│ │ ├── models/ # SQLAlchemy models
│ │ ├── routes/ # API route handlers
│ │ ├── schemas/ # Pydantic request/response schemas
│ │ ├── services/ # Business logic (email, auth helpers)
│ │ ├── templates/ # Email HTML templates
│ │ └── main.py # FastAPI application entry point
│ │
│ ├── cli/ # CLI tools (admin creation)
│ ├── tests/ # Backend tests
│ ├── Dockerfile # Backend Docker image definition
│ └── .env.example # Backend environment variables
│
├── frontend/
│ ├── src/
│ │ ├── app/ # Next.js App Router pages
│ │ │ └── _components/ # Reusable UI components
│ │ │
│ │ └── lib/
│ │ ├── api/ # API client and request helpers
│ │ └── auth/ # Auth utilities (tokens, guards)
│ │
│ ├── Dockerfile # Frontend Docker image definition
│ └── .env.example # Frontend environment variables
│
├── docker-compose.yml # Multi-service Docker orchestration
└── README.md
This section explains how to run the application locally. You can either use Docker (recommended) or run the backend and frontend manually.
- Docker & Docker Compose (recommended)
- Python 3.10+
- Node.js 18+
Create environment files from the provided examples:
cp backend/.env.example backend/.env
cp frontend/.env.example frontend/.envFrom the project root run:
docker-compose up --buildRun the following command from the project root:
docker-compose exec backend python -m cli.create_admin| Service | URL |
|---|---|
| Frontend | http://localhost:3000 |
| Backend | http://localhost:8000/docs |
python -m venv .venv
source .venv/bin/activate # Linux / macOS
# .venv\Scripts\activate # WindowsInstall backend dependencies:
pip install -r backend/requirements.txtCreate environment file:
cp backend/.env.example backend/.envRun the backend server:
cd backend
uvicorn app.main:app --reloadBackend will be available at: http://localhost:8000
In a new terminal:
cd frontend
npm install
cp .env.example .env
npm run dev
Frontend will be available at: http://localhost:3000
With the virtual environment activated and on new terminal:
cd backend
python -m cli.create_adminContributions are welcome. Please open an issue or submit a pull request with a clear description of your changes.
This project is licensed under the terms described in the LICENSE file.