Epic: Member Email Communications & Membership Quests #472

Open
opened 2026-04-16 06:55:33 +00:00 by jjalangtry · 0 comments
jjalangtry commented 2026-04-16 06:55:33 +00:00 (Migrated from github.com)

Epic Goal

Enable SSE officers to send rich communications to members — announcements, election notices, amendment ratifications, event invites, and emergency broadcasts — while giving members a transparent, consent-based opt-in experience through an extensible Membership Quests system.

Problem / Opportunity

SSE currently has no way to reach members en-masse through the website. Critical club communications (elections, constitutional amendments, event announcements) have no reliable, opt-in email channel. Members also have no structured onboarding questionnaire system, making it hard to collect preferences and consent.

Success Criteria

  • Officers can compose and send rich HTML emails to opted-in members from within the website
  • Email categories (Elections, Amendments, Events, Emergency) are individually selectable at send time
  • A dedicated emergency broadcast button sends to all members regardless of preferences, with a confirmation gate
  • Members can grant or revoke email consent per-category through their profile/settings
  • A Membership Quests system exists that is trivially extensible — adding a new quest requires adding one config entry, no schema migrations needed for simple quests
  • Email consent is surfaced as Quest #2 in the onboarding flow
  • All emails comply with CAN-SPAM (unsubscribe link, sender address)

Stories in This Epic

  • Feature: Member Email Broadcasting System — #473
  • Feature: Membership Quests System + Email Consent Quest — #474

Technical Requirements / Constraints

  • Reuse existing Nodemailer/SMTP infrastructure (/next/lib/email/)
  • Prisma schema additions: MembershipQuestCompletion, EmailPreferences, EmailBroadcastLog
  • Officer-gated API routes (existing auth middleware)
  • React rich-text editor for email composition (e.g. Tiptap or react-quill)
  • Rate-limit and audit-log all broadcast sends
  • Emergency sends must require a typed confirmation string ("SEND EMERGENCY EMAIL")

Dependencies

  • SMTP credentials configured in production env
  • Officer auth gateway middleware (already exists)

Risks

  • Spam/abuse if broadcast is not properly gated — mitigated by officer-only access + confirmation modal
  • Email deliverability from sse.rit.edu domain — ensure SPF/DKIM records are configured

Notes / References

  • Existing email lib: /next/lib/email/index.ts, /next/lib/email/smtp.ts
  • Existing email API: /next/app/api/email/send/route.ts
  • Auth middleware pattern: /next/lib/middlewares/
  • Membership model: /next/lib/membershipUtils.ts
# Epic Goal Enable SSE officers to send rich communications to members — announcements, election notices, amendment ratifications, event invites, and emergency broadcasts — while giving members a transparent, consent-based opt-in experience through an extensible Membership Quests system. ## Problem / Opportunity SSE currently has no way to reach members en-masse through the website. Critical club communications (elections, constitutional amendments, event announcements) have no reliable, opt-in email channel. Members also have no structured onboarding questionnaire system, making it hard to collect preferences and consent. ## Success Criteria - [ ] Officers can compose and send rich HTML emails to opted-in members from within the website - [ ] Email categories (Elections, Amendments, Events, Emergency) are individually selectable at send time - [ ] A dedicated emergency broadcast button sends to **all** members regardless of preferences, with a confirmation gate - [ ] Members can grant or revoke email consent per-category through their profile/settings - [ ] A Membership Quests system exists that is trivially extensible — adding a new quest requires adding one config entry, no schema migrations needed for simple quests - [ ] Email consent is surfaced as Quest #2 in the onboarding flow - [ ] All emails comply with CAN-SPAM (unsubscribe link, sender address) ## Stories in This Epic - [ ] Feature: Member Email Broadcasting System — #473 - [ ] Feature: Membership Quests System + Email Consent Quest — #474 ## Technical Requirements / Constraints - [ ] Reuse existing Nodemailer/SMTP infrastructure (`/next/lib/email/`) - [ ] Prisma schema additions: `MembershipQuestCompletion`, `EmailPreferences`, `EmailBroadcastLog` - [ ] Officer-gated API routes (existing auth middleware) - [ ] React rich-text editor for email composition (e.g. Tiptap or react-quill) - [ ] Rate-limit and audit-log all broadcast sends - [ ] Emergency sends must require a typed confirmation string ("SEND EMERGENCY EMAIL") ## Dependencies - [ ] SMTP credentials configured in production env - [ ] Officer auth gateway middleware (already exists) ## Risks - [ ] Spam/abuse if broadcast is not properly gated — mitigated by officer-only access + confirmation modal - [ ] Email deliverability from sse.rit.edu domain — ensure SPF/DKIM records are configured ## Notes / References - Existing email lib: `/next/lib/email/index.ts`, `/next/lib/email/smtp.ts` - Existing email API: `/next/app/api/email/send/route.ts` - Auth middleware pattern: `/next/lib/middlewares/` - Membership model: `/next/lib/membershipUtils.ts`
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
SSE/WebsiteTheSSEquel#472
No description provided.