Skip to content

Email subscription lifecycle: one-click unsubscribe + double opt-in #10

Description

@alloevil

Background

The daily digest email rendered by scripts/main.py contains no unsubscribe link (grep for unsubscribe: zero hits). The only way out is buried in the GAS welcome email: "reply to this email with unsubscribe" — handled manually. There is also no confirmation step, so anyone can subscribe someone else's address.

The GAS endpoint (scripts/subscribe_handler.gs) already handles subscribe writes; adding an unsubscribe action is an extension of the existing handler, not new infrastructure.

User story

As a subscriber, I want a one-click unsubscribe at the bottom of every digest, so that when I no longer want it I don't have to mark it as spam.

Why now

Spam reports poison the sending domain's deliverability for all remaining subscribers. Gmail and Yahoo have required one-click unsubscribe for bulk senders since 2024 — this is a deliverability floor, not a nice-to-have.

Acceptance criteria

  • Every digest email contains an unsubscribe link handled by the GAS endpoint: it removes the address from subscribers and shows a confirmation page.
  • The List-Unsubscribe header (and List-Unsubscribe-Post for one-click) is set on outgoing digests.
  • New subscriptions trigger a confirmation email; the address only becomes active after the confirmation link is clicked.

Effort: M.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestroadmapProject roadmap and direction

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions