we got it. you are in.

Someone fills in your waitlist worksheet and then hears nothing. Did it work? Are they in? This step makes your site answer them by email, three times: when their worksheet arrives, when they update it, and when you let them in. The emails come from Loops, an email service your site talks to, and they come from your own address.

EmailWorksheet received
Sent whenSomeone submits a worksheet
KeyLOOPS_IDEA_SUBMITTED_ID
EmailWorksheet updated
Sent whenThey submit again while still waiting for you
KeyLOOPS_IDEA_UPDATED_ID
EmailYou are in
Sent whenYou approve them, in /admin/submissions or in Slack
KeyLOOPS_WAITLIST_APPROVED_ID
  • These go to them, not to you — you hear about new worksheets through Slack and in /admin/submissions
  • Sign-in emails are not these — the codes people get when they sign up or sign in come from Clerk, set up in Add sign-in. You change those in your Clerk dashboard
  • Each one is optional — leave a key out and that email is simply not sent
BUILD.

✓ Success: your test account got all three emails.

this is a work in progress

  • Your own domain — from Your domain. Loops will not send from an address ending in vercel.app
  • The waitlist working — from Let people in. These emails are about it

1️⃣ Prove the Address Is Yours

Email from a new address lands in spam unless the address can prove it is really yours. Loops handles the proof; you add a few lines to your domain's settings, the same place you connected your domain to Vercel.

  1. Sign up at loops.so. When it asks for your sending domain, enter your domain, like yourname.com
  2. In Loops, open Settings → Domain and click View records. It lists a few records, marked SPF, DKIM and MX
  3. In your domain registrar, open the DNS settings for your domain and add each record exactly as shown
  4. Back in Loops, click Verify Records

Verification is often done within a few hours and can take up to 72. Write your emails while you wait: Loops will not send any until the domain is verified.

2️⃣ Write the Three Emails

Loops calls these transactional emails: one email, sent to one person, because of something they did. You write each one once. Your site fills in the person's details every time it sends.

  1. In Loops, open Transactional and create a new email
  2. Write it. Where a detail should go, type it between curly brackets, like {name}, and Loops turns it into a data variable
  3. Click Next. Under API Details, check the data variables listed match the table below
  4. Click Publish. An unpublished email never sends
  5. Copy the transactional ID shown under API Details
  6. Repeat for the other two
EmailWorksheet received
Variables you can use{name}, {ideaName}, {deadline}
EmailWorksheet updated
Variables you can use{name}, {ideaName}, {deadline}
EmailYou are in
Variables you can use{name}, {ideaName}
  • Spell them exactly — capitals count: ideaName, not ideaname or idea_name
  • Use only these — if an email uses a variable your site does not send, Loops refuses to send that email at all, and nobody is told
  • Use fewer if you like — an email that only says {name} is fine

✍️ Words to Start From

text
Worksheet received
  Subject: we got it, {name}.
  Thanks for telling us about {ideaName}. We read every worksheet
  ourselves, and you will hear from us before {deadline}.

Worksheet updated
  Subject: your changes are in.
  We saw your update to {ideaName}. Nothing else to do: you are
  still on the list, and we will read the new version.

You are in
  Subject: you are in, {name}.
  We read about {ideaName} and we would love to have you. Sign in
  and open /party to get started.

Last, your site needs a key to use Loops. In Loops, open Settings → API and create an API key. Put it and the three transactional IDs in .env, and add the same four to Vercel's Environment Variables, then redeploy:

bash
# .env
LOOPS_API_KEY="…"
LOOPS_IDEA_SUBMITTED_ID="…"      # Worksheet received
LOOPS_IDEA_UPDATED_ID="…"        # Worksheet updated
LOOPS_WAITLIST_APPROVED_ID="…"   # You are in

3️⃣ Receive Every One Yourself

  1. In a private window, sign in with your test account. Use an email address you can read
  2. Submit a worksheet at /waitlist/apply. Worksheet received arrives
  3. Change something and submit it again. Worksheet updated arrives, because the first one is still waiting
  4. As yourself, approve it in /admin/submissions, or with the button in Slack. You are in arrives

“Three emails. Each one says: a person read this.”

— unparty-app

⚠️ Good to Know

  • The free plan sends 4,000 emails every 30 days — marketing and transactional together, with Loops branding at the bottom. Upgrading removes the branding
  • Each resubmission counts as an update — while their worksheet waits, every change sends Worksheet updated, and adds a row to /admin/submissions. Approve either row
  • After a decision, it starts over — someone you rejected who submits again gets Worksheet received, as a new application
  • Your computer sends real email — with the keys in .env, testing on localhost emails real people. Test with your own addresses

🧯 If Something Is Off

  • No email arrives — check spam first. Then, in the terminal running npm run dev (or your Vercel logs), look for a line starting with Loops that says an email failed. It includes Loops' reason
  • Missing required data variable(s) — the email uses a variable your site does not send, or spells one differently. Fix it in Loops, publish again
  • Loops says the email is not found or not published — the ID in .env is wrong, or you did not click Publish
  • Nothing in the logs at all — LOOPS_API_KEY or that email's ID is missing where you tested. Restart or redeploy after adding it
  • Updated never arrives, only received — the first worksheet was already approved or rejected, so the new one is a new application

🤖 Ask Your LLM

prompt
My site is for [describe who it is for]. Rewrite these three
waitlist emails in my voice: [paste them]. Keep each under 60
words and keep {name}, {ideaName} and {deadline} exactly as they
are.

Loops shows these DNS records for my domain: [paste them]. My
registrar is [name it]. Walk me through adding them.

✅ You Are Done When

  • Loops shows your domain as verified
  • Three transactional emails are published, each with the variables from the table
  • .env and Vercel both have LOOPS_API_KEY and the three IDs
  • Your test account received Worksheet received, Worksheet updated and You are in

Nobody on your waitlist has to wonder any more. They hear from you the moment they reach out, and again the moment you say yes.

“Silence feels like no. Say we got it.”

— unparty-app
#Email#Loops#Waitlist#Transactional Email#Setup#Non-Technical Founders#Software You Own

🧗🏾‍♂️ in progress

THOUGHTS.

…