Skip to main content
Lucia uses separate email services for distinct jobs: Postmark for inbound operational/system email intake, and Resend for outbound waitlist and guest verification emails.

Current Service Roles

ServiceRoleStatus
PostmarkInbound operational/system email intakeActive / existing infrastructure
ResendOutbound waitlist welcome emailImplemented / configured / tested live
ResendGuest booking verification emailImplemented in live-development

Postmark

Postmark remains responsible for inbound email surfaces such as:
property/operator email intake
maintenance / operations email intake
system email parsing paths
Current Canon status:
Postmark inbound body: working
Postmark attachment metadata: working
Postmark API attachment retrieval: deferred
Postmark is not the waitlist outbound provider.

Resend

Resend is responsible for Lucia outbound product emails currently recorded in Canon:
waitlist welcome email
waitlist confirmation behavior
founder-style launch updates for now
guest booking verification email
Current implementation status:
waitlist selected: yes
waitlist configured: yes
waitlist implemented: yes
waitlist tested: yes
guest verification implemented: yes, live-development
Live proof:
Resend domain: send.hellolucia.ai verified
Cloudflare Pages env vars: configured
Waitlist function: wired
New signup live test: passed
Duplicate signup live test: passed with no resend

Sending Domain

Current verified Resend sending domain:
send.hellolucia.ai
Current sender identity:
From: Lucia from HelloLucia.ai <hello@send.hellolucia.ai>
Reply-to: hello@hellolucia.ai
Resend receiving is not enabled and is not required for this path.

Guest Verification Email

Current guest verification email behavior:
provider: Resend
purpose: booking-link verification for guest-facing Lucia
destination: booking email already on file
guest-entered email: never trusted as destination
design: matches HelloLucia.ai waitlist email design
The verification email must not expose:
booking ID
booking email
payment details
stay dates
private booking details
The guest-facing chat must not expose the token, magic URL, destination email, or private booking details. See 04 - Guest Verification Email for the full privacy contract.

Runtime Implementation

Current waitlist runtime owner:
repo: hello-lucia/lucia-marketing
branch: main
runtime: Cloudflare Pages Function
file: functions/api/waitlist.js
route: POST /api/waitlist
Current behavior:
visitor submits waitlist formCloudflare Pages Function validates email server-sidesignup is inserted into Supabase table lucia_waitlist_signupsif insert is new, Resend welcome email is sentif insert is duplicate, signup returns ok:true duplicate:true and no email is resentif Resend send fails after storage succeeds, signup remains saved and response reports welcome_email.sent:false
Storage remains the source of truth. Email delivery must not control whether the waitlist signup succeeds once storage has accepted the record.

Environment Variables

Current Cloudflare Pages environment variables:
SUPABASE_URL
SUPABASE_SERVICE_ROLE_KEY
RESEND_API_KEY
RESEND_WAITLIST_FROM
RESEND_WAITLIST_REPLY_TO
RESEND_WAITLIST_AVATAR_URL
Current values by role:
RESEND_WAITLIST_FROM = Lucia from HelloLucia.ai <hello@send.hellolucia.ai>
RESEND_WAITLIST_REPLY_TO = hello@hellolucia.ai
RESEND_WAITLIST_AVATAR_URL = https://hellolucia.ai/lucia-avatar-golden-border.png
Secrets must remain server-side only.

Current Known Gap

The endpoint currently returns the Resend message id in the JSON response after a successful send, but it does not yet persist the Resend message id or welcome-email status back into Supabase. Current truth:
Resend send path: implemented
Live email delivery: tested
Duplicate no-resend behavior: tested
Message id persistence: not yet implemented
Send status persistence: not yet implemented
This is acceptable for the current waitlist milestone. Add persistence later if/when auditability becomes necessary.

Implementation Status Checklist

  • Resend domain configured
  • Resend domain verified
  • Sender identity approved
  • Environment variables added to Cloudflare Pages runtime
  • Waitlist signup record storage implemented
  • Resend send path implemented
  • Success path tested live
  • Duplicate path tested live
  • Duplicate signup does not resend email
  • Canon current-state docs updated after proof
  • Resend message id persisted to Supabase
  • Send status persisted to Supabase

See Also