Skip to content

Commit 1bc0da4

Browse files
committed
update docs
1 parent 958758e commit 1bc0da4

6 files changed

Lines changed: 208 additions & 76 deletions

File tree

.github/TOPICS.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Suggested GitHub Repository Topics
2+
# Add these in: GitHub Repo → Settings → Topics
3+
# These help with discoverability in GitHub search and Google SEO.
4+
5+
waitlist
6+
waitlist-management
7+
waitlist-platform
8+
launch-page
9+
landing-page
10+
email-marketing
11+
subscriber-management
12+
self-hosted
13+
open-source
14+
saas
15+
golang
16+
react
17+
postgresql
18+
docker
19+
smtp
20+
oauth2
21+
api
22+
embeddable-widget
23+
single-binary
24+
multi-tenant

README.md

Lines changed: 184 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,151 +1,259 @@
11
<p align="center">
2-
<img src="https://img.shields.io/badge/license-MIT-blue?style=flat-square" />
3-
<img src="https://img.shields.io/badge/go-1.25+-00ADD8?style=flat-square&logo=go" />
4-
<img src="https://img.shields.io/badge/bun-1.2+-fbf0df?style=flat-square&logo=bun" />
5-
<img src="https://img.shields.io/badge/PostgreSQL-16-4169E1?style=flat-square&logo=postgresql" />
2+
<img src="docs/screenshots/dashboard.png" alt="Waitless Dashboard" width="720" />
63
</p>
74

85
<h1 align="center">⚡ Waitless</h1>
96

107
<p align="center">
11-
Open-source waitlist platform — self-hosted, your own SMTP, no lock-in.
8+
<strong>Open-source waitlist & launch platform — self-hosted, your own SMTP, zero lock-in.</strong>
9+
</p>
10+
11+
<p align="center">
12+
<a href="#-quick-start"><img src="https://img.shields.io/badge/get_started-→-6366f1?style=for-the-badge" /></a>
13+
<a href="#-features"><img src="https://img.shields.io/badge/features-→-22c55e?style=for-the-badge" /></a>
14+
<a href="https://github.com/waitlss/waitless/releases"><img src="https://img.shields.io/badge/download-latest-f59e0b?style=for-the-badge" /></a>
15+
</p>
16+
17+
<p align="center">
18+
<img src="https://img.shields.io/badge/go-1.25+-00ADD8?style=flat-square&logo=go&logoColor=white" alt="Go" />
19+
<img src="https://img.shields.io/badge/react-19-61DAFB?style=flat-square&logo=react&logoColor=black" alt="React" />
20+
<img src="https://img.shields.io/badge/PostgreSQL-16+-4169E1?style=flat-square&logo=postgresql&logoColor=white" alt="PostgreSQL" />
21+
<img src="https://img.shields.io/badge/docker-ready-2496ED?style=flat-square&logo=docker&logoColor=white" alt="Docker" />
22+
<img src="https://img.shields.io/badge/license-MIT-green?style=flat-square" alt="License" />
23+
<img src="https://img.shields.io/badge/PRs-welcome-brightgreen?style=flat-square" alt="PRs Welcome" />
1224
</p>
1325

1426
---
1527

16-
## Features
28+
Waitless lets you launch beautiful waitlist pages, collect signups, and manage subscribers — all from a single self-hosted binary. No third-party email lock-in, no monthly fees, no limits.
29+
30+
## ✨ Features
31+
32+
<table>
33+
<tr>
34+
<td width="50%">
35+
36+
### 🚀 Launch
37+
- **Public waitlist pages** — branded `/w/:slug` pages, ready to share
38+
- **Embeddable widget** — drop a `<script>` tag into any website
39+
- **Referral system** — unique codes for viral growth
40+
- **Coupon engine** — reward early adopters
41+
42+
</td>
43+
<td width="50%">
44+
45+
### 📊 Manage
46+
- **Analytics dashboard** — signup trends, growth metrics, charts
47+
- **Subscriber management** — search, filter, sort, bulk actions
48+
- **CSV import/export** — migrate data in and out freely
49+
- **Multi-project** — unlimited waitlists from one install
50+
51+
</td>
52+
</tr>
53+
<tr>
54+
<td width="50%">
55+
56+
### 📧 Email
57+
- **OAuth email** — Gmail & Zoho Mail (OAuth2, no app passwords)
58+
- **Any SMTP** — Mailgun, SES, SendGrid, Postmark, self-hosted
59+
- **Professional templates** — beautiful HTML welcome emails
60+
- **Custom from name** — send as your brand
1761

18-
- 🔐 **Your own SMTP** — Gmail, Mailgun, SES, or any SMTP server
19-
- 🏢 **Multi-tenant** — create unlimited waitlist projects
20-
- 👥 **Access control** — admin and user roles
21-
- 📊 **Analytics** — signup trends and platform-wide metrics
22-
- 📋 **Subscriber viewer** — search, filter, sort, bulk actions, CSV export
23-
- 🔌 **REST API** — API key authentication for programmatic access
24-
- 🧩 **Embeddable widget** — drop a form into any website
25-
- 🚀 **Single binary** — Go + embedded frontend, Docker-ready
26-
- 🌐 **Public pages** — beautiful, branded `/w/:slug` landing pages
62+
</td>
63+
<td width="50%">
2764

28-
## Quick Start
65+
### 🔐 Platform
66+
- **REST API** — full API with key-based auth for integrations
67+
- **Webhooks** — real-time event push to your backend
68+
- **Telegram notifications** — get alerted on new signups
69+
- **Admin panel** — manage users, projects, platform-wide
70+
71+
</td>
72+
</tr>
73+
</table>
74+
75+
## 📸 Screenshots
76+
77+
<p align="center">
78+
<img src="docs/screenshots/dashboard.png" alt="Analytics Dashboard" width="32%" />
79+
<img src="docs/screenshots/subscribers.png" alt="Subscriber Management" width="32%" />
80+
<img src="docs/screenshots/widget.png" alt="Public Waitlist Page" width="32%" />
81+
</p>
82+
<p align="center">
83+
<em>Dashboard Analytics · Subscriber Management · Public Waitlist Page</em>
84+
</p>
85+
86+
## 🚀 Quick Start
2987

3088
### Docker (Recommended)
3189

3290
```bash
33-
git clone https://github.com/waitless/waitless
91+
git clone https://github.com/waitlss/waitless
3492
cd waitless
3593
docker compose -f docker/docker-compose.yml up -d
3694
```
3795

38-
Visit [http://localhost:8080](http://localhost:8080) — the first account you create becomes the platform admin.
96+
Visit **http://localhost:8080** — the first account becomes the admin.
3997

4098
### From Source
4199

42-
**Requirements:** Go 1.25+, Bun 1.2+, PostgreSQL 16+
43-
44100
```bash
45101
# Clone
46-
git clone https://github.com/waitless/waitless
47-
cd waitless
102+
git clone https://github.com/waitlss/waitless && cd waitless
48103

49104
# Configure
50-
cp .env.example .env
51-
# Edit .env with your database settings
105+
cp .env.example .env # Edit with your database settings
52106

53-
# Build & run
107+
# Build & run (single binary!)
54108
make build
55109
./waitless
56110
```
57111

58-
### Development
112+
> **Requirements:** Go 1.25+, Bun 1.2+, PostgreSQL 16+
59113
60-
```bash
61-
# Terminal 1: backend
62-
make dev-backend
114+
### Development Mode
63115

64-
# Terminal 2: frontend (http://localhost:3000 → proxies /api to :8080)
65-
make dev-frontend
116+
```bash
117+
make dev-backend # Terminal 1: Go server with hot reload
118+
make dev-frontend # Terminal 2: Vite dev server → proxies to :8080
66119
```
67120

68-
## Environment Variables
121+
## ⚙️ Configuration
69122

70-
See `.env.example` for all configuration options.
123+
### Environment Variables
71124

72125
| Variable | Description | Default |
73126
|---|---|---|
74127
| `DATABASE_URL` | PostgreSQL connection string ||
75-
| `DB_HOST` | Database host | `localhost` |
76-
| `DB_PORT` | Database port | `5432` |
77-
| `DB_USER` | Database user ||
78-
| `DB_PASSWORD` | Database password ||
79-
| `DB_NAME` | Database name ||
80128
| `PORT` | Server port | `8080` |
129+
| `BASE_URL` | Public URL (for OAuth callbacks) | `http://localhost:8080` |
130+
| `ENCRYPTION_KEY` | 32-byte key for encrypting tokens at rest | auto-generated |
81131

82-
## SMTP Configuration
132+
### Email Providers
83133

84-
Each project can configure its own SMTP server from the dashboard. Common providers:
134+
Each project configures its own email from the dashboard.
85135

86-
| Provider | Host | Port |
136+
| Provider | Type | Setup |
87137
|---|---|---|
88-
| Gmail | `smtp.gmail.com` | 587 |
89-
| Mailgun | `smtp.mailgun.org` | 587 |
90-
| SendGrid | `smtp.sendgrid.net` | 587 |
91-
| Amazon SES | `email-smtp.us-east-1.amazonaws.com` | 587 |
92-
| Self-hosted | your own | any |
138+
| **Gmail** | OAuth2 | One-click connect with Google account |
139+
| **Zoho Mail** | OAuth2 | One-click connect (supports .in/.com/.eu) |
140+
| **Mailgun** | SMTP | `smtp.mailgun.org:587` |
141+
| **SendGrid** | SMTP | `smtp.sendgrid.net:587` |
142+
| **Amazon SES** | SMTP | `email-smtp.{region}.amazonaws.com:587` |
143+
| **Postmark** | SMTP | `smtp.postmarkapp.com:587` |
144+
| **Any SMTP** | SMTP | Your own host & port |
93145

94-
## REST API
146+
### OAuth2 Email (Optional)
95147

96-
All API endpoints require a Bearer token or `X-API-Key` header.
148+
```bash
149+
# Gmail OAuth
150+
GOOGLE_CLIENT_ID=your-google-client-id
151+
GOOGLE_CLIENT_SECRET=your-google-client-secret
152+
153+
# Zoho OAuth
154+
ZOHO_CLIENT_ID=your-zoho-client-id
155+
ZOHO_CLIENT_SECRET=your-zoho-client-secret
156+
ZOHO_DOMAIN=zoho.in # or zoho.com, zoho.eu
157+
```
158+
159+
## 🔌 REST API
160+
161+
All API endpoints use Bearer token or `X-API-Key` authentication.
97162

98163
```bash
99164
# List subscribers
100165
curl -H "X-API-Key: wl_your_key" \
101-
https://your-domain.com/api/v1/projects/:projectId/subscribers
166+
https://your-domain.com/api/v1/projects/:id/subscribers
102167

103168
# Add subscriber
104169
curl -X POST -H "X-API-Key: wl_your_key" \
105170
-H "Content-Type: application/json" \
106171
-d '{"email":"user@example.com","name":"User"}' \
107-
https://your-domain.com/api/v1/projects/:projectId/subscribers
172+
https://your-domain.com/api/v1/projects/:id/subscribers
108173
```
109174

110-
## Architecture
175+
> 📖 **Full API docs:** [docs/rest-api-v1.md](docs/rest-api-v1.md) · [docs/public-api.md](docs/public-api.md)
176+
177+
## 🧩 Embeddable Widget
111178

179+
Drop this into any website to show a waitlist signup form:
180+
181+
```html
182+
<div id="waitless-widget"></div>
183+
<script src="https://your-domain.com/widget.js"
184+
data-project="your-project-slug">
185+
</script>
112186
```
113-
Single binary: ./waitless
114-
├── Go HTTP server (Chi router)
115-
│ ├── /api/auth/* Auth (register, login, logout)
116-
│ ├── /api/dashboard/* Dashboard API (authenticated)
117-
│ ├── /api/admin/* Admin API (admin role required)
118-
│ ├── /api/v1/* REST API (API key auth)
119-
│ └── /api/public/* Public waitlist API
120-
└── Embedded TanStack Start frontend
121-
├── / (landing page)
122-
├── /dashboard (management UI)
123-
└── /w/:slug (public waitlist pages)
187+
188+
## 🏗️ Architecture
189+
124190
```
191+
./waitless (single binary, ~17MB)
192+
├── Go HTTP server (Chi)
193+
│ ├── /api/auth/* → Auth (register, login, sessions)
194+
│ ├── /api/dashboard/* → Dashboard API (authenticated)
195+
│ ├── /api/admin/* → Admin API (role-gated)
196+
│ ├── /api/v1/* → REST API (API key auth)
197+
│ ├── /api/public/* → Public waitlist API
198+
│ └── /api/oauth/* → OAuth2 callbacks (Gmail, Zoho)
199+
└── Embedded React frontend (TanStack Router)
200+
├── / → Landing page
201+
├── /dashboard → Management UI
202+
├── /docs → API documentation
203+
└── /w/:slug → Public waitlist pages
204+
```
205+
206+
**Tech stack:** Go · React 19 · TanStack Router · PostgreSQL · GORM · Recharts
207+
208+
## 🚢 Deploy
125209

126-
## Deploying to VPS
210+
### VPS / Bare Metal
127211

128212
```bash
129-
# Build binary on your machine
130213
make build
214+
scp waitless .env user@server:/opt/waitless/
131215

132-
# Copy to server
133-
scp waitless user@server:/opt/waitless/
134-
scp .env user@server:/opt/waitless/
216+
# On server
217+
cd /opt/waitless && ./waitless
218+
```
135219

136-
# On server — run with systemd or screen
137-
./waitless
220+
### Docker
221+
222+
```bash
223+
docker compose -f docker/docker-compose.yml up -d
224+
```
225+
226+
### Systemd Service
227+
228+
```ini
229+
[Unit]
230+
Description=Waitless
231+
After=postgresql.service
232+
233+
[Service]
234+
WorkingDirectory=/opt/waitless
235+
ExecStart=/opt/waitless/waitless
236+
Restart=always
237+
238+
[Install]
239+
WantedBy=multi-user.target
138240
```
139241

140-
## Contributing
242+
## 🤝 Contributing
141243

142-
Contributions are welcome! See [CONTRIBUTING.md](CONTRIBUTING.md).
244+
Contributions welcome! See [CONTRIBUTING.md](CONTRIBUTING.md).
143245

144-
1. Fork the repository
145-
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
146-
3. Commit your changes
147-
4. Push and open a Pull Request
246+
1. Fork the repo
247+
2. Create a branch (`git checkout -b feature/amazing`)
248+
3. Commit & push
249+
4. Open a Pull Request
148250

149-
## License
251+
## 📜 License
150252

151253
MIT — see [LICENSE](LICENSE)
254+
255+
---
256+
257+
<p align="center">
258+
<sub>Built with ❤️ for the open-source community</sub>
259+
</p>

docs/screenshots/dashboard.png

441 KB
Loading
355 KB
Loading

docs/screenshots/subscribers.png

490 KB
Loading

docs/screenshots/widget.png

445 KB
Loading

0 commit comments

Comments
 (0)