Skip to content
Sendora Cloud
Create account
2026-05-30 · Docs

Email — Liquid / platform-wide suppression / audience-targeted send retracted; Wave 1a consent gate surfaced

  • Audit of `email/service.ts` + `email/suppression.ts` + `email_suppressions` schema surfaced 3 over-claims. (1) "Template library with Liquid interpolation" — actual `renderTemplate` is regex `{{var}}` replace; no Liquid `{% if %}`, no helpers. (2) "Suppression list enforced platform-wide" — `email_suppressions` table is `(org_id, email)` keyed; an unsubscribe on org A does NOT propagate to org B. (3) "Audience-targeted sends — pick an audience from Customers, send" — `sendEmail` takes one `to: string` recipient; audience fan-out happens via Automation workflow, not a single-call audience send.
  • Wave 1a consent gate (shipped earlier this session) was missing from the product page. Now surfaced as a top-line feature: opt-in `enforce_consent` toggle on org settings; when on, broadcast + workflow categories check the most-recent `marketing` consent for `input.to` before dispatch. No record OR revoked → `email_sends` row with `status='failed' provider='suppressed' suppressed_reason='no_consent'`.
  • Resend comparison rewritten honest. New rows for React Email templates (Sendora ❌), single-call audience broadcast (Sendora ❌), recipient dedup (Sendora ✅ 60s window — Resend ❌), consent enforcement at send time (Sendora ✅ Wave 1a — Resend manual). whyStay LEADS with React Email + Resend Audiences Broadcast as the two real misses.
  • Real wins kept + emphasised: BYOD via real Resend Domains integration, 4-mode category routing (Cloudflare for platform-critical / Resend for customer mail), content scanner, probation pool, recipient-dedup, RFC 8058 unsubscribe, 4-source bounce/complaint webhook fan-in (Svix + SNS + CF synchronous + CF GraphQL poller).