Waitlist and interest lists
Some templates collect a second kind of list besides the newsletter: people who want to be told when something opens up. They work like the newsletter and use the same Supabase project, in their own table, or the same Mailchimp audience.
Service: Supabase or Mailchimp stores the
sign-ups; Resend sends the welcome email where there is one. Every template takes either
(a site made earlier gets it with npx wptom update).
If both are set, Mailchimp is used.
Which templates
Section titled “Which templates”| Template | The list | Form on | Welcome email | Default table |
|---|---|---|---|---|
| Aurora | Waitlist | Waitlist page and the home page’s closing section | Yes (waitlist welcome) | waitlist |
| Swell | Beta testers | Beta page | Yes (beta welcome) | waitlist |
| Tiny Town | Interest in new homes | Homes page | Yes (interest email) | interest |
| Bloom | Workshop dates | Workshops page | No | interest |
| Fold | Workshop dates | Events page | No | interest |
| Hush | Special nights | Bar page | No | interest |
| Lantern | Workshop dates | Workshops page | No | interest |
| Putty | Class dates | Classes page | No | interest |
| Razor | Apprentices | Apprentices page | No | interest |
| Tuck | New sitters | Join page | No | interest |
The table name comes from WAITLIST_TABLE; set it only if you name the table differently.
What happens on sign-up
Section titled “What happens on sign-up”The address is checked, lowercased and added to the table with a source (which form it came
from). An address that is already there isn’t added twice, and the form says so. Where the
template has a welcome email, it goes only to new addresses. Without JavaScript the visitor is
sent to a thank-you page (Aurora: /waitlist/thanks, Swell: /beta/thanks) or back to the
form’s page.
Without keys
Section titled “Without keys”Sign-ups are kept in the running server’s memory and are lost when npm run dev stops. Welcome
emails without a Resend key are printed in the terminal as
[email] to someone@example.com: Subject. Nothing else is logged for interest lists, so check
the form’s “joined” text.
1. Create the table
Section titled “1. Create the table”With Mailchimp, skip to Mailchimp instead of Supabase.
Use your existing Supabase project (or create one: see Newsletter → Create a Supabase project). Open SQL Editor, paste the statement for your template and click Run.
Aurora and Swell:
create table public.waitlist ( email text primary key, source text, created_at timestamptz not null default now());alter table public.waitlist enable row level security;Tiny Town, Bloom, Fold, Hush, Lantern, Putty, Razor and Tuck:
create table public.interest ( email text primary key, source text, created_at timestamptz not null default now());alter table public.interest enable row level security;The site writes exactly these three columns. email must stay the primary key: that is how a
second sign-up is ignored. Row level security stays on with no policies, so only your site’s
secret key can read or write the list.
All templates except Aurora also have a newsletter: create the subscribers table from the
Newsletter guide too.
2. Add the settings to .env
Section titled “2. Add the settings to .env”SUPABASE_URL=https://abcdefgh.supabase.coSUPABASE_SECRET_KEY=your-secret-keyWAITLIST_TABLE=interestSUPABASE_URLandSUPABASE_SECRET_KEY: the same as for the newsletter (Project Settings → Data API for the URL, Project Settings → API Keys for a secret key).WAITLIST_TABLE: the table’s name. The.env.exampleof each template already has the right default (waitlistorinterest).
For the welcome emails in Aurora, Swell and Tiny Town, also set RESEND_API_KEY and
EMAIL_FROM (see Contact form). Restart npm run dev.
3. Try it on your computer
Section titled “3. Try it on your computer”- Open the page with the form (table above) and sign up with an address you can check.
- The form shows its “joined” text (Aurora and Swell without JavaScript: the thank-you page).
- In Supabase, Table Editor → waitlist (or interest): a new row with the email, the
sourceand the time. - Aurora, Swell, Tiny Town: the welcome email arrives (or the
[email]line appears in the terminal). - Sign up again with the same address: “already on the list”, no new row, no second email.
4. Put it online
Section titled “4. Put it online”- In Vercel, Settings → Environment Variables: add
SUPABASE_URL,SUPABASE_SECRET_KEYandWAITLIST_TABLE(plusRESEND_API_KEYandEMAIL_FROMfor the welcome emails). - Redeploy, sign up once on the live site and check the row.
Mailchimp instead of Supabase
Section titled “Mailchimp instead of Supabase”Set the same three Mailchimp settings as for the newsletter (how to find them: Newsletter → Mailchimp instead of Supabase):
MAILCHIMP_API_KEY=0123456789abcdef0123456789abcdef-us21MAILCHIMP_AUDIENCE_ID=a1b2c3d4e5MAILCHIMP_DOUBLE_OPT_IN=false- The list and the newsletter go to the same audience. Each contact is tagged with the form’s
source, so you can tell the waitlist or interest list apart from the newsletter (filter or segment by tag in Audience → All contacts). - An address already in the audience is left as it is, even if it joined through the other form: the form says “already on the list”, no new tag is added and no welcome email is sent. If you need the lists fully separate, use Supabase instead.
MAILCHIMP_DOUBLE_OPT_IN=truemakes Mailchimp send its confirmation email first; the contact stays Pending until they confirm.
To try it, sign up on the form’s page and look for the address in Audience → All contacts, with its tag. Online: add the three settings in Vercel and redeploy.
Changing the texts
Section titled “Changing the texts”- The form’s labels and messages: in the content editor, on the page that shows the form, or under Interface texts (Aurora: the waitlist form; Swell: Beta sign-up form; Tiny Town: Register interest form).
- The welcome email: Interface texts → Emails. See Emails.
Troubleshooting
Section titled “Troubleshooting”| What you see | Why, and what to do |
|---|---|
| The “something went wrong” text | Supabase refused the row: the log shows [waitlist] store failed with the reason. Usually the table doesn’t exist under the name in WAITLIST_TABLE, or the key isn’t a secret key |
An error about on_conflict |
email isn’t the primary key. Recreate the table with the SQL above |
| Newsletter works, interest list fails | They are two tables. Create the interest (or waitlist) table as well |
| Sign-ups vanish after a restart | Neither Supabase nor Mailchimp is configured; the list was in memory |
Mailchimp error … in the log |
See the Mailchimp rows in Newsletter → Troubleshooting |
| Someone on the newsletter can’t join the interest list | With Mailchimp both lists share one audience, and an existing contact is left as it is. Add the tag by hand in Mailchimp, or use Supabase for separate lists |