Skip to content

feat(admin): communications #1965

@cdcore09

Description

@cdcore09

Summary

Email send capability for the admin app: newsletters, member notifications, event reminders, group announcements. Requires a transactional email provider decision.

Requirements

  • Brainstorming → spec under docs/superpowers/specs/.
  • Pick an email provider during brainstorm: Resend, Postmark, SendGrid, AWS SES, etc. Tradeoffs: cost at member volume (~3,700+), deliverability, bounce/complaint feedback, template management.
  • Worker-side send adapter (packages/api/src/lib/email/) abstracted from the provider so the choice is reversible.
  • Template management: stored as code in the repo (PR-reviewed) OR stored in DB (admin-editable). Decision part of brainstorm.
  • /admin/communications — composition surface, audience selector, send / schedule / preview, send history with delivery status.
  • Audience model: ad-hoc list (paste emails), saved segment ("all org members of tier X"), event-bound ("all attendees of event Y").
  • Suppression list integration: respect bounces, complaints, and member-level marketing-consent flag (users.marketing_consent).
  • Outbound email logged to audit_log for traceability ("who sent what to whom, when").

Context

Foundation must ship first (#1956). This subsystem unlocks event reminders (#1961), election notifications (#1964), and renewal nudges (#1959).

Implementation Notes

  • Volume-pricing math matters: at ~3,700 members × monthly newsletter, providers price differently across the inflection points.
  • Compliance: CAN-SPAM, GDPR if any EU members, plus respect marketing_consent. Audit needs to capture the consent state at send time.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions