Transactional emails
Nine messages built on one table-based layout ( src/lib/email/layout.ts) and one token mirror ( src/lib/email/tokens.ts). Inline styles carry the light scheme so a client with no dark support still renders a finished email; clients that report prefers-color-scheme: dark swap palette through the class overrides in the document head. Switch your OS appearance to see it — the iframes follow the system, not the app theme toggle.
Privacy rule, visible in every template: no email ever contains a food, a severity or a guest-level detail. Links only.
Magic link
Someone asks for a passwordless sign-in link.
src/lib/email/templates/auth-magic-link.ts
- Subject
- Your sign-in link for Picky Eaters
Plain-text version
Sign in to Picky Eaters Use this link to sign in as maya@example.com. No password to remember. The link expires in 15 minutes and works once. Didn't request it? Ignore this email — nobody can sign in without the link. Sign in: https://www.picky-eaters.app/auth/callback?token=sample-magic-link-token — Picky Eaters — your food list stays private.
Welcome / confirm signup
A new account is created and still needs email confirmation.
src/lib/email/templates/auth-welcome.ts
- Subject
- Confirm your email and start your list
Plain-text version
Welcome, Maya Picky Eaters keeps one private list of the food you avoid — allergies, intolerances, ARFID, and plain dislikes — and applies it for you when you join a meal. Confirm your address to finish setting up your account. How the first list works: add a food, pick how it affects you, done. An allergy blocks a dish. An intolerance warns. A dislike only suggests. Nothing you add is public. You are never 'the difficult one': hosts see what works for the whole group, not who said what. If you didn't create this account, you can safely ignore this email. Confirm your email: https://www.picky-eaters.app/auth/callback?type=signup&token=sample-confirm-token — Picky Eaters — your food list stays private.
Event invite
A host invites someone to an event by link or email.
src/lib/email/templates/event-invite.ts
- Subject
- Nora invited you to Sunday roast
Plain-text version
Nora invited you to Sunday roast Accept the invite and your food list is applied automatically — you don't have to explain anything to anyone. Event: Sunday roast When: Sunday 27 September, 2:00 PM Where: Nora's place, 14 Alder Street Group: Alder Street dinners Nora never sees your list. The app only shows which dishes work for the group as a whole. Can't make it? Open the invite and decline — it takes one tap. Accept invite: https://www.picky-eaters.app/invite/AX7K2M — Picky Eaters — your food list stays private.
Event reminder
The day before an event, to everyone who accepted.
src/lib/email/templates/event-reminder.ts
- Subject
- Tomorrow: Sunday roast
Plain-text version
Sunday roast is tomorrow If your list changed since you accepted, update it now and the event picks it up on its own. When: Tomorrow, 2:00 PM Host: Nora Where: Nora's place, 14 Alder Street Plans changed? Update your answer in the app so the host's count stays right. Open the event: https://www.picky-eaters.app/events/evt-sunday-roast — Picky Eaters — your food list stays private.
Event reminder (host)
Same reminder, host variant: review the menu result.
src/lib/email/templates/event-reminder.ts
- Subject
- Tomorrow: Sunday roast
Plain-text version
Sunday roast is tomorrow Open the event to check how the menu lands for everyone who accepted. Dishes are marked as safe, worth a warning, or blocked — no names attached. When: Tomorrow, 2:00 PM Host: Nora Plans changed? Update your answer in the app so the host's count stays right. Review the menu: https://www.picky-eaters.app/events/evt-sunday-roast — Picky Eaters — your food list stays private.
Group invite
Someone adds you to a persistent group.
src/lib/email/templates/group-invite.ts
- Subject
- Theo added you to Alder Street dinners
Plain-text version
Join Alder Street dinners Theo invited you to a group on Picky Eaters. Join once and every meal the group plans already accounts for your list. Group: Alder Street dinners Members: 6 people Joining shares nothing: other members see the group's combined result for a menu, never your list or your reasons. Not your group? Ignore this email and nothing happens. Join the group: https://www.picky-eaters.app/groups/join/GRP42Q — Picky Eaters — your food list stays private.
Friend request
Someone sends a friend request. Mutual acceptance required.
src/lib/email/templates/friend-request.ts
- Subject
- Theo wants to connect on Picky Eaters
Plain-text version
Theo wants to connect Theo sent you a friend request on Picky Eaters (you are both in Alder Street dinners). Being friends makes planning a meal together quicker — invites, groups and menu checks skip the back and forth. Both sides have to accept. Until then neither of you can see anything about the other's list. Don't know them? Ignore the request and they are never told why. See the request: https://www.picky-eaters.app/groups/friends — Picky Eaters — your food list stays private.
Friend accepted
The other side accepts your friend request.
src/lib/email/templates/friend-accepted.ts
- Subject
- Theo accepted your request
Plain-text version
You and Theo are connected Theo accepted your friend request. You can now invite each other to groups and events, and a shared menu is checked against both lists automatically. You can disconnect at any time from their profile in the app. Plan something together: https://www.picky-eaters.app/groups/friends/theo — Picky Eaters — your food list stays private.