[Notifications] Weekly Email Digest #11

Closed
opened 2026-06-23 00:42:35 +00:00 by rbrooks · 4 comments
Owner

A cross-campaign weekly summary for users who want a lightweight overview, distinct from the existing per-session recap emails.

Scope

  1. Add digest_email_opt_in to User.
  2. Add a weekly Celery Beat task to build one digest per opted-in user.
  3. Include upcoming sessions, recent completions, and unresolved vote-mode sessions.
  4. Add the opt-in control to the Profile page.

Notes

  • Reuse the existing SMTP infrastructure (same path as recap emails).
  • Default opt-out - no behavior change for existing users.

Roadmap: Platform and Delivery ? Weekly Email Digest (P4). Pairs with Notification Preference Granularity in this milestone.

A cross-campaign weekly summary for users who want a lightweight overview, distinct from the existing per-session recap emails. ## Scope 1. Add `digest_email_opt_in` to `User`. 2. Add a weekly **Celery Beat** task to build one digest per opted-in user. 3. Include upcoming sessions, recent completions, and unresolved vote-mode sessions. 4. Add the opt-in control to the Profile page. ## Notes - Reuse the existing SMTP infrastructure (same path as recap emails). - Default opt-out - no behavior change for existing users. _Roadmap: Platform and Delivery ? Weekly Email Digest (P4). Pairs with Notification Preference Granularity in this milestone._
Collaborator

Now builds on #655 (2026-09-15). #12's preferences model was folded into #655, which adds notifications with delivery settings for each person and ships in v4.6.0. When this digest is built, it should be a delivery option in #655's settings, e.g. "email me a weekly digest instead of each alert". It should not get its own digest_email_opt_in column. The digest's content should come from #655's notification records, filtered by the same audience check, so it can never include something the reader cannot see. It stays in v5.4.0.

**Now builds on #655 (2026-09-15).** #12's preferences model was folded into #655, which adds notifications with delivery settings for each person and ships in v4.6.0. When this digest is built, it should be a delivery option in #655's settings, e.g. "email me a weekly digest instead of each alert". It should not get its own `digest_email_opt_in` column. The digest's content should come from #655's notification records, filtered by the same audience check, so it can never include something the reader cannot see. It stays in v5.4.0.
Collaborator

PR #1358 is open for this: the weekly email digest (opt-in column, hourly Beat poll, a Weekly digest row in the notification grid). Defaults and the wording list are in the PR body for the owner to confirm. Not merged.

PR #1358 is open for this: the weekly email digest (opt-in column, hourly Beat poll, a Weekly digest row in the notification grid). Defaults and the wording list are in the PR body for the owner to confirm. Not merged.
Collaborator

Decided (owner, 2026-11-06, Q243–Q245; D340):

  • DG1: each person picks the day. Still 8am local.
  • DG2: contents as built: titles and links only, never a summary.
  • DG3: add a signed one-click stop link now, with the List-Unsubscribe and List-Unsubscribe-Post headers.

PR #1358 is being reworked for DG1 and DG3. The same rework fixes its failing CI check (test_enqueue_off_loop).

**Decided (owner, 2026-11-06, Q243–Q245; D340):** - **DG1:** each person picks the day. Still 8am local. - **DG2:** contents as built: titles and links only, never a summary. - **DG3:** add a signed one-click stop link now, with the `List-Unsubscribe` and `List-Unsubscribe-Post` headers. PR #1358 is being reworked for DG1 and DG3. The same rework fixes its failing CI check (`test_enqueue_off_loop`).
Collaborator

Done in #1358 (merged 2026-11-06, owner's approval and wording, part x). The digest is opt-in (off by default) and goes out at 8am local on each person's chosen day. It covers sessions in the next 7 days with your RSVP, sessions played in the last 7 days as titles and links only, and votes waiting on you. Nothing is sent when all three are empty. It has a one-click stop link with List-Unsubscribe and List-Unsubscribe-Post, using the existing signed stop links. The day choice was render-checked at 390 and 1280 px.

Checks: CI is green, and the full backend suite passed on docker-test (10,788). Migration b0011d1ae570 is the head. Closing.

**Done in #1358 (merged 2026-11-06, owner's approval and wording, part x).** The digest is opt-in (off by default) and goes out at 8am local on each person's chosen day. It covers sessions in the next 7 days with your RSVP, sessions played in the last 7 days as titles and links only, and votes waiting on you. Nothing is sent when all three are empty. It has a one-click stop link with `List-Unsubscribe` and `List-Unsubscribe-Post`, using the existing signed stop links. The day choice was render-checked at 390 and 1280 px. **Checks:** CI is green, and the full backend suite passed on docker-test (10,788). Migration `b0011d1ae570` is the head. Closing.
Sign in to join this conversation.
No project
No assignees
2 participants
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
rbrooks/Quest-Board#11
No description provided.