The emails one booking gets
Workflows · Workflow 2 of 6
Not synced yet
Not connected
Each email is queued the moment it's decided, with its send time, and rendered from current data when it goes out. Times are Vik's time zone (Toronto). Example: a half day on Saturday, Nov 14 at 1pm, booked well ahead. Today every email is a dry run: saved in full and viewable at /admin/emails, nothing sent until Resend is connected and Vik says go.
Moment in the bookingEmail to the clientCheck at send timeStoppedHeld / dry runSent◷ when it goes
1 · The timeline Five emails from request to aftercare. No touch-up check-in: clients message @cozyinkz for touch-ups.
"Your date wasn't held" Hold expired
The 5-minute cron expires an unpaid hold after 48 hours (or 24 hours before the session) and emails the same private link, if it's still open.
"Booking cancelled" / "About your request" Cancel · Decline
Sent right away by cancel_booking, or when Vik declines a paid request (deposit refunded in full; a card refund goes once Vik OKs it). Says whether the deposit is refunded or kept, with calendar buttons. Every other queued email for that booking is cancelled.
What else stops them Rules
Waiting for Vik's review: nothing but "Deposit received" goes out; the address never does. No-show: aftercare stops. Moved (the client can do it once, 48h+ ahead): "Session moved" with the consent form link, and the schedule is queued again for the new time.
2 · Every email passes these gates at send time Same safety order as chat messages. Nothing can skip a gate.
Turning it on needs all three: DRY_RUN=false, go-live on in Settings (Vik's OK), and EMAIL_PROVIDER="resend" with an API key + the cozyinkz.com domain verified. Test clients (the simulator, burner accounts) skip the dry run so the flow can be checked for real before launch.
Wide diagram: scroll sideways, or pinch to zoom on a phone.