Final copy for the three automated emails we want live for the September launch, shown in the current v7 brand kit. Subject lines are new — the earlier email-preview.html never had them, and its visual style predates the rebrand.
Scope: welcome email on signup, a nudge after 3 days inactive, a restart email after 7 days inactive. Nothing else changes.
Language: simple B1 English only. The EN | BM toggle row from the old draft is dropped for v1 (it needs hosted web versions of each email anyway).
Voice: upbeat and personal, KJ & Shahril sign-off, short sentences, no idioms, no em dashes. Copy line-edited and approved by Rebekah.
Parked: trial-started, pro-confirmation and cancellation emails wait for the billing decision. Their drafts stay as they are.
CTA link should land inside the Day 1 lesson, not the home screen — same lesson we learned from the speaking pre-check funnel: fewer stops before speaking.
The old draft's secondary line promised "we'll check in after your first session" — that follow-up email doesn't exist, so it's replaced with a reply prompt. This means reply-to must be a real mailbox (the docs note hello@ bounces unless the Workspace mailbox exists).
Transactional category, so no unsubscribe link needed — footer keeps only support.
Email 2 of 3
Day-3 nudge
slug first-inactivetrigger 3 days inactivecategory reengagementmax once per month
Subject
Ready for five minutes today?
Preview text
Continue learning with Kelas Sekejap
Quick check-in
We miss you, {{user.name}}.
It's been a few days since we've seen you on the app. Ready to keep your progress going?
This is the one new template. Today the job emails only at the 7-day tier using first-inactive; the suggestion is to move that slug to tier 3 and add this one at tier 7 — but wire it however you prefer.
Same voice as the day-7 push notification ("A week away? Jump back in…"), and deliberately no exam pressure. The 30-day tier stays push-only for now.
Wiring notes
Variables: greeting uses {{user.name}} from the auto-resolver. If name can be empty, please give it a fallback (e.g. render "Hi there" via {{#if}} or a resolver default) — an empty greeting in the subject or headline looks broken.
Subjects are new: the old preview file had no subject lines; the ones above are final unless you object.
Cadence: inactivity emails inherit the job's existing once-per-tier-per-month dedup, riding alongside the push notifications at tiers 3 and 7.
Old placeholders: the preview's {{USER_NAME}} / {{UNSUBSCRIBE_LINK}} / {{CTA_LINK}} map to {{user.name}}, {{unsubscribeUrl}}, and plain hrefs you set per template.
v7 styling: the cards above show the current brand kit — peach #f9e9dc canvas, paper card with 2px ink #101014 border and 8px offset shadow, flame #e64c09 pill CTA with ink text (the tokens note white fails AA at body sizes), blue #2557ff eyebrow. For email HTML: use font stack 'Plus Jakarta Sans', -apple-system, Arial, sans-serif (most clients block webfonts), keep the 2px border (works everywhere), and treat the offset box-shadow as progressive enhancement — Outlook drops it and the card still holds.
These are email-client-safe versions of the cards above: inline styles only, table layout, system font stacks, Handlebars vars ({{user.name}}, {{unsubscribeUrl}}) already in place. View source (or curl) and paste into the template system.
Each file's header comment lists its slug, subject, preheader, and the two placeholders to replace: REPLACE-LOGO-PNG-URL (hosted logo image — Gmail strips inline SVG) and the CTA deep link.
Things we couldn't verify from the repo
Is the Supabase auth webhook (INSERT on auth.users → /api/webhooks/supabase-auth) actually registered? The handler exists and already calls sendWelcomeEmail.
Do welcome-email / first-inactive template rows exist in email_templates, and with what content?
The template service checks an Unleash flag before sending — is it on in production?
What are the email secrets on Fly (EMAIL_PROVIDER, SMTP/SES vs SendGrid)? Lifecycle mail rides the legacy SES path today; worth considering the SendGrid cutover since the domain auth and tracking are already done.
Parked, on purpose
Trial-started, pro-confirmation, cancellation emails — and a new trial-ending reminder — all wait on the web billing decision.
Weekly progress digest — later.
Question from Rebekah's research side: should focus-group participants be excluded from inactivity emails during the study window, so nudges don't skew the engagement measurement? One-line filter if yes.