thejayman77
|
cf5cbb33c0
|
Daily digest (opt-in) + finite "you're caught up" ending
Reader-retention as ritual, not capture (Codex's framing). Opt-in calm morning
email of today's brief; the on-site twin is the finite end-of-feed nudge.
* Schema: users.digest_enabled + digest_unsub_token; digest_sends (dedupe +
visibility). auth.get_user now returns the digest fields.
* goodnews/digest.py: build (dated calm subject, items w/ summary + "why it's
here" + UB/source links + one-click unsubscribe, "you're caught up" sign-off)
and send_due_digests (morning-window gated, >=4-item floor or skip quietly,
deduped, reuses SMTP). No streaks/urgency/"you missed".
* API: /auth/me exposes digest_enabled; POST /api/account/digest toggle;
GET /api/digest/unsubscribe (token, no login, calm confirmation page).
* CLI: cycle gains a morning-gated digest step (--no-digest) + a send-digests
command (--force).
* Frontend: digest toggle on the Account profile; the Highlights end-cap now
says "you're caught up — see you tomorrow" with a one-tap "Get tomorrow's
brief by email" (signed-in → enable; anon → sign in).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-09 16:17:46 -04:00 |
|