Mockup · not live

Academy › Payments › Reminders. One queue for every message the billing cadence produces, on whichever channel is actually working that week. New versus today: reminders are email-only rows queued against due_date with WhatsApp reported back as reminders_skipped_channels — this ties the schedule to the billing states, adds the Cloud API lane beside the existing sent_manual wa.me fallback, and surfaces payment_reminders.error. Primary action: send the queued messages.

Frame 1 · Desktop, 1280 px

Email · ResendActive
WhatsApp · Cloud APIPending Meta approval
wa.me manual laneFallback

Schedule

Tied to the billing state, not to a free-form date.

DayBilling stateTemplateCategory
Day 26Renewal due nextpackage_renewal_noticeutility
Day 1Request issuedpackage_payment_reminderutility
Day 3Past duepackage_past_due_noticeutility
Day 7Freeze noticepackage_freeze_noticeutility

Rendered body

Nattaya P. · package_payment_reminder · WhatsApp

Hi Nattaya, your Growth plan at Pad Thai Padel renews on 1 October. Amount due: THB 9,500.00 for 1 – 31 October. Pay by link: setpoint.app/p/9f3a2c Or pay at the club — cash, transfer or PromptPay.

Approved utility template. Variables are filled from the payment request, never typed by staff.

Queue

12 queued · 1 failed · 26 Aug – 7 Oct 2026

StudentTemplateChannelScheduledStatus
Mika S.package_renewal_noticeEmail26 Aug · 09:00Sent
Arisa T.package_renewal_noticeWhatsApp · wa.me26 Aug · 09:00Sent manual
Nattaya P.package_payment_reminderWhatsApp · Cloud API1 Oct · 09:00Queued
Tom W.package_payment_reminderEmail1 Oct · 09:00Queued
Ben K.package_past_due_noticeWhatsApp · Cloud API3 Sep · 09:00 Failed template not approved
Priya R.package_freeze_noticeWhatsApp · Cloud API7 Oct · 09:00Queued

Frame 2 · Abby on a phone, 390 px

Nattaya P.
Queued
Renewal · THB 9,500.00 · 1 Oct
Ben K.
Failed
Past due · THB 4,500.00 · 3 Sep · template not approved
Arisa T.
Sent manual
Renewal · 26 Aug · sent by Abby at 09:14

Done. Nothing to do on this one.