/modules/ · waitlist Shipping

waitlist

Per-product waitlists with confirmation, queue position, referral codes and admin export.

What it is

waitlist.

A visitor joins a named waitlist and confirms by email; on confirmation the module assigns a dense queue position inside a single atomic batch, so two people confirming at once never share a place. Referral codes credit a confirmed referrer on the same product. It answers identical bytes for every row state, so the endpoint reveals nothing about who is on the list.

Positions are dense at assign time per product and never recomputed on delete, and the referrer credit and the position update run in one Database::batch — atomic on D1, a transaction on SQLite and Postgres.

Ports

Database · Mailer · Signer · Captcha and RateLimiter optional

Routes

  • POST /v1/waitlist — join, answers 202 whatever the state
  • GET /v1/waitlist/confirm — confirm and take a position
  • GET /v1/waitlist/status — a signed status token: position, referrals, share link
  • GET /v1/waitlist/admin/export.csv — admin token, the full list

UI surface

A join form, a status page, and an admin export table, rendered at /ui from the handler's own types.

Emits

waitlist.joined, waitlist.confirmed

This is the module Cratefield runs for its own early-access list. The form on this site posts to it.