16-Mar-2026 — Customisable email templates, placeholder toolbar, and email routing diagnostics

build 540commit cc7411f


Covers: follow-up notifications, mailing lists, and member priority (#177), improve transactional email deliverability across all environments#186)

User Guide — Booking Email Templates & Reminder Notifications

Email Types

Five email types are supported, each sent automatically at the appropriate point in the booking lifecycle:

Email Triggered when
Confirmation A booking is created
Cancellation A booking is cancelled by the attendee or an admin
Waitlisted A non-member booking is displaced during member priority
Restored A waitlisted booking is restored after a cancellation
Reminder The event is within the configured reminder window

Customising Email Templates

Global Templates

Navigate to Bookings → Configuration → Email Templates. Each email type has a markdown editor where you can write the email body. A live preview is shown alongside the editor.

Per-Event Overrides

Template Resolution Order

When sending an email the system resolves the template as follows:

  1. Per-event override (confirmation and reminder only)
  2. Global template from booking configuration
  3. Built-in default (hardcoded fallback) The first non-empty value wins.

Placeholders

Templates support the following placeholders, which are replaced with real values at send time:

Placeholder Replaced with
{{EVENT_TITLE}} The event title
{{EVENT_DATE}} Formatted date and time (e.g. Wednesday, 15 March…)
{{EVENT_LINK}} URL to the event page
{{ATTENDEE_NAME}} First name of the primary attendee
{{ATTENDEE_LIST}} Markdown list of all attendees with email addresses
{{PLACES_COUNT}} Number of places in the booking
Include them in your template text exactly as shown (with double
braces). Unknown placeholders are left as-is.

Reminder Emails

Configuration

How It Works

A daily cron job runs at 08:00 each morning. It:

  1. Reads the configured reminderDaysBefore value.
  2. Finds all events whose start date falls within the reminder window (today → today + reminderDaysBefore).
  3. For each event, finds active bookings that have not yet received a reminder (no reminderSentAt timestamp).
  4. Sends the reminder email and stamps reminderSentAt on the booking. Each booking receives at most one reminder — the process is idempotent.

Brevo Integration