Web App · version 1.0

Waiting Lists

A self-hosted waiting-list web app with an included command-line client. Run it from your terminal or let a coding agent create lists, connect forms, inspect subscribers, and export data through the private API.

AstroCloudflare WorkersD1HTMXAlpine.jsTypeScriptNode.js CLI

The full source, tests, and documentation live in the public repository. MIT licensed. Issues and pull requests are off: fork it and make it yours.

Join the Flavio Copes newsletter

Join the newsletter to access my complete download library of books and courses. I’ll also email you when I publish new software, and about building products with AI and my courses. You can unsubscribe anytime.

Your email is stored on a secure server in the EU. Every email has an unsubscribe link. Unsubscribing stops future emails; you can keep using the public download library.

Why I built this

A waiting list should be one of the smallest pieces of a product launch, but it often turns into a pile of forms, email tools, spreadsheets, consent questions, and glue code. I wanted one focused service that could collect an email safely, prove consent, and stay easy to operate.

Waiting Lists is the real, working result: a public collection endpoint, deliberate double opt-in, a private dashboard, export formats, delivery status, cleanup rules, and a private interface that AI agents can use without putting keys in a project repository.

From form to confirmed subscriber

The whole waiting-list lifecycle is already connected.

  1. Create a list in the dashboard or included CLI.
  2. Drop the generated form into any site.
  3. Confirm ownership through double opt-in.
  4. Review or export subscribers in the dashboard or terminal.

Features

Double opt-in

Keep new requests pending until the address owner reviews and confirms through a single-use 24-hour link.

Private dashboard

Create lists, inspect confirmed and pending subscribers, review delivery problems, and manage settings.

Drop-in forms

Post email and explicit consent from any approved website using generated HTML or JavaScript.

Included CLI and private API

Create, inspect, update, integrate, and export lists from a terminal or coding agent. The CLI source and its complete guide are in the repository.

Useful exports

Download consent archives, universal email files, and Sendy, Kit, or Mailchimp-ready CSVs.

Privacy-minded lifecycle

Minimize collected data, avoid storing IP addresses, support signed removal links, and clean up expired records.

Use cases

Product launches

Give each upcoming product its own endpoint, consent wording, origin rules, and export.

Client projects

Run one private service for several sites while keeping every list separately manageable.

Agent-built sites

Let a coding agent create the list and connect the form through a documented command-line contract.

Self-hosted lead capture

Own the source, deployment, subscriber database, retention policy, and email delivery path.

Email-provider staging

Collect and confirm interest before moving approved addresses into the newsletter system you prefer.

SaaS starting point

Add accounts, organizations, billing, or hosted onboarding to turn the single-owner tool into a service.

Tech stack

Application

Astro

Renders the public site, private dashboard, confirmation flow, and server endpoints.

Runtime

Cloudflare Workers

Runs HTTP requests, the Queue consumer, scheduled cleanup, and static asset delivery.

Persistence

D1

Stores lists, consent records, subscriber state, sessions, API keys, settings, and delivery events.

Transactional email

Email Service

Sends confirmation and removal links from a restricted sender binding.

Interaction

HTMX and Alpine.js

Add focused form and dashboard behavior without a separate client application.

Verification

Vitest

Covers authentication, tokens, API behavior, validation, exports, Turnstile, and email events.

Command line

Node.js CLI

Uses the private API to create, inspect, update, integrate, and export lists without putting credentials in a project repository.

CLI

The repository contains the CLI source, package scripts, the authenticated API it calls, and a dedicated CLI guide in the README. It runs directly from a clone. Nothing depends on a separately published CLI package.

npm run waitinglists -- init

Create a list and link it to the current project.

npm run waitinglists -- lists

List waiting lists and confirmed subscriber counts.

npm run waitinglists -- integration

Print the exact endpoint and form markup for a linked list.

npm run waitinglists -- export

Save a private CSV export with restricted file permissions.

Screenshots and demos

Waiting Lists dashboard showing confirmed subscribers and active waiting lists
Waiting Lists dashboard showing confirmed subscribers and active waiting lists. Open the full-size image.
Agent-ready form setup guide with the endpoint contract and implementation brief
Agent-ready form setup guide with the endpoint contract and implementation brief. Open the full-size image.
Waiting-list settings for the list name, endpoint slug, and allowed website origins
Waiting-list settings for the list name, endpoint slug, and allowed website origins. Open the full-size image.
Waiting Lists agent access screen for creating API keys and configuring the included CLI
Waiting Lists agent access screen for creating API keys and configuring the included CLI. Open the full-size image.

What’s included

  • Waiting Lists version 1.0 with the complete CLI in code/cli/, its private JSON API, and a dedicated CLI guide
  • Sanitized source snapshot with production resources, subscriber data, credentials, and analytics removed
  • D1 migration history and Cloudflare Worker configuration with portable placeholders
  • Public collection endpoint, confirmation and removal flows, private dashboard, API, and CLI
  • Cloudflare Email Service, Queue delivery events, Turnstile, rate limits, and scheduled cleanup
  • Automated unit tests and production build configuration
  • A plain-language human quick start, versioned changelog, and dedicated AI-agent instructions
  • Architecture, decisions, customization, configuration, security, deployment, and build guides

Documentation

The documentation lives in the repository, in one README: setup and usage, why I built it, how it was built, architecture, configuration, deployment, customization, security, the technical decisions, and the changelog. AGENTS.md gives coding agents the project context and operating rules.

Read the README on GitHub →

Why use this

  • Skip the consent, token, session, export, delivery, and cleanup groundwork
  • Start with a complete working product instead of a signup-form demo
  • Give an AI agent enough context to set it up or rewrite it safely
  • Own the subscriber database and deployment decisions
  • Keep the public integration tiny while the difficult lifecycle rules stay server-side
  • Replace the framework or platform without starting from a blank repository

Customize it

Use the working source as a foundation. Keep it small, change it for your own workflow, or turn it into a different product.

  1. Grow it into the waitlist product you run for every launch—or white-label for agencies that need double opt-in done right.
  2. Rebrand pages, emails, and consent copy until it feels like part of the product you are announcing.
  3. Add teams, billing, webhooks, and newsletter sync when a single list turns into a small SaaS.
  4. Swap email and database providers behind the existing boundaries without rewriting the core flow.
  5. Port Astro to the stack your team already ships, keeping the product contract intact.
  6. Deploy on Workers today, or move to a VPS/container later when your traffic story changes.

MIT license

The repository includes an MIT LICENSE file. You can use, copy, change, publish, distribute, sublicense, or sell the code, including as part of a commercial product.

Keep the copyright and license notice with copies or substantial portions of the code. Third-party dependencies and assets keep their own licenses.

Keep learning

Solo Lab

Connect a self-hosted waiting list to the work of finding customers and launching your own products.

Explore Solo Lab →

Join the newsletter to access my complete download library of books and courses. I’ll also email you when I publish new software, and about building products with AI and my courses. You can unsubscribe anytime.

Your email is stored on a secure server in the EU. Every email has an unsubscribe link. Unsubscribing stops future emails; you can keep using the public download library.