Why This Matters

Notifications are the handoff between the website, the guest, and the operations team. Guests need proof of payment, a reservation reference, event details, and support contact details. Staff need enough visibility to repair failures without blocking payment settlement.
This page describes the implemented Hono notification behavior. Transactional email is sent through Cloudflare Email Sending only.

Guest Emails

These are the emails a guest or customer can receive from the system.
EmailWhen it is sentRecipientWhat it contains
Reservation confirmationAutomatically after a reservation payment is settled as paidReservation customer emailGuest name, reservation reference, show name, event date and time, guest count, booked items, total amount, QR code, calendar link, maps link, WhatsApp, and support email
Payment receiptAutomatically after the same paid reservation settlementReservation customer emailGuest name, reservation reference, show name, event date and time, guest count, amount paid, payment method, transaction id, calendar link, maps link, WhatsApp, and support email
Day-before reminderCron-driven reminder for upcoming paid reservationsReservation customer emailReservation reference, show details, venue address, guest count, pre-ordered visible items, calendar link, maps link, WhatsApp, and support email
Show cancellationWhen staff cancel a showEvent and choose to notify affected guestsAffected reservation customer emailsGuest name, reservation reference, cancelled show details, guest count, cancellation reason, and support context
Waitlist signup confirmationWhen a guest joins a waitlist and confirmation email is enabledWaitlist guest emailGuest name, waitlist/inquiry reference, and confirmation that the request was received
Waitlist availability notificationWhen seats are freed and the waitlist notification flow runsWaitlist guest emailShow details, requested guest count, available seats, booking link, and offer expiry deadline
Inquiry confirmationWhen a contact, private event, venue rental, workshop, artist proposal, host-an-event, or waitlist inquiry is submitted and submission notifications are enabledInquiry submitter emailGuest name, inquiry type, inquiry reference, and confirmation that the team received the request
Inquiry replyWhen staff send a reply from the inquiry follow-up flowInquiry submitter emailStaff-composed reply content, inquiry context, and sender information
Inquiry follow-upWhen staff add a follow-up and choose the standard guest email without custom reply contentInquiry submitter emailFollow-up note, inquiry context, and sender information
For a paid booking, the guest should receive two separate emails: the reservation confirmation and the payment receipt.

After OnePay reports a successful reservation payment, Hono marks the reservation as paid and dispatches post-payment notifications.
1

Payment settles

The reservation transitions to PAID_CONFIRMED with paymentStatus = PAID.
2

Confirmation email is sent

Hono renders and sends RESERVATION_CONFIRMATION through the shared email delivery service.
3

Receipt email is sent

Hono renders and sends PAYMENT_RECEIPT through the same Cloudflare-backed delivery path.
4

Ledger is updated

Each email creates a row in hol_email_messages before delivery and is then marked SENT or FAILED.
Each post-payment email has its own duplicate guard. If OnePay callbacks, return handling, or reconciliation repeat the same paid result, Hono skips existing PENDING or SENT rows and can retry rows that are already FAILED.

Staff And Developer Alerts

Guests do not receive staff alert messages. These are internal notifications created when the system needs operator or developer attention.
AlertWhen it is createdWhere it goes
Post-payment reservation confirmation email failedA paid reservation cannot send the confirmation emailHigh-priority dashboard notification and configured developer channels
Post-payment payment receipt email failedA paid reservation cannot send the payment receipt emailHigh-priority dashboard notification and configured developer channels
Post-payment notification pipeline failedThe post-payment notification job crashes before completing guest notificationsHigh-priority dashboard notification and configured developer channels
Developer channels are optional. ntfy is active when DEVELOPER_ALERT_NTFY_URL is configured. Telegram is active only when both DEVELOPER_ALERT_TELEGRAM_BOT_TOKEN and DEVELOPER_ALERT_TELEGRAM_CHAT_ID are configured.
Developer alerts are best-effort. They never roll back a paid reservation and never block the guest-facing payment success response.

Delivery Source Of Truth

All transactional guest email goes through the same Hono delivery service.
email service -> email ledger -> Cloudflare Email Sending binding
The low-level transport adapter is apps/hono/src/infra/email/cloudflare-email-sending.ts, and it is the only place that should call env.EMAIL.send(...) directly. When investigating a guest who says they did not receive an email:
  1. Find the reservation reference or inquiry reference.
  2. Check hol_email_messages for the expected message_kind.
  3. If the row is SENT, use delivery_message_id and Cloudflare delivery logs.
  4. If the row is FAILED, inspect error_message.
  5. For paid bookings, also check hol_notification_messages and the configured Telegram or ntfy channel.
See also: Confirmation for the guest-facing paid booking screen, and Payment for the settlement state that triggers post-payment emails.