Skip to main content
Lucia uses Resend for outbound waitlist welcome emails. Postmark remains focused on inbound operational/system email intake.

Decision

Lucia uses:
Resend → outbound waitlist confirmation / welcome email
Postmark → inbound operational and system email intake
This keeps waitlist email lightweight while preserving Postmark’s existing role in Lucia’s operational intake stack.

Decision Status

Decision made: yes
Implemented: yes
Configured: yes
Tested: yes
Canon updated after implementation: yes
Live milestone:
Resend verified domain: send.hellolucia.ai
Cloudflare Pages env vars: configured
Waitlist endpoint: POST /api/waitlist
Live new-signup email test: passed
Live duplicate no-resend test: passed

Rationale

Resend is preferred for the waitlist because:
the account already exists
the UI is easy to use
the API is lightweight
the product is well suited to simple outbound confirmation emails
it avoids Mailchimp-style platform bloat
This is not a replacement for Postmark’s operational email role.

Service Boundary

Email CategoryOwner
Waitlist confirmation emailResend
Waitlist welcome emailResend
Founder-style launch updatesResend for now
Inbound property/operator emailPostmark
Maintenance / operations intake emailPostmark

Runtime Implementation

Current implementation:
repo: hello-lucia/lucia-marketing
branch: main
hosting/runtime: Cloudflare Pages + Pages Function
function: functions/api/waitlist.js
route: POST /api/waitlist
storage: Supabase table lucia_waitlist_signups
email delivery: Resend Emails API
Current signup flow:
Visitor submits waitlist formLucia stores signup record in SupabaseLucia sends welcome email through Resend for new signupsLucia returns welcome_email.attempted / sent / id in the endpoint response
Duplicate behavior:
duplicate email → ok:true duplicate:true
no new Resend email sent
Failure behavior:
storage failure → signup fails
Resend failure after storage success → signup remains saved and welcome_email.sent:false is returned

Current Stored Fields

Current Supabase waitlist insert captures:
email
source
referrer
user_agent
Current source value:
hellolucia.ai

Current Known Gap

The implementation currently returns the Resend message id from the live endpoint when sending succeeds, but does not yet persist that id or send status back into Supabase. Current truth:
Resend message id returned: yes
Resend message id stored in Supabase: no
welcome email status stored in Supabase: no
welcome email sent_at stored in Supabase: no
This is an intentional known gap, not a blocker for the current waitlist milestone.

Future Audit Fields

Recommended future fields if/when audit tracking is needed:
welcome_email_status
resend_message_id
welcome_email_sent_at
welcome_email_error
Optional growth/attribution fields:
name
role
property_count
interest_area
utm_source
utm_medium
utm_campaign

Truth-State Requirements

Allowed states:
not_configured
send_not_attempted
send_attempted
sent
failed
duplicate_no_resend
Forbidden claims:
email sent
welcome delivered
signup confirmed externally
unless supported by actual system state or Resend success response.
This implementation updates the status of:
50 Infrastructure/Email Services.md
60 Marketing/Waitlist Welcome Email.md
80 Decisions/Resend Waitlist Outbound Email.md
85 Releases/00 - Release Log.md
Start Here ~ Lucia AI/02 - Current System State.md
50 Infrastructure/00 - START HERE - Infrastructure.md
50 Infrastructure/11 - Domains and Live Routing.md
80 Decisions/Lucia Decision Log.md