Newsletter: subscriptions with double opt-in, campaigns, one-click unsubscribe and bounces
- Dominant language
- C#
- Stars
- 6
- Forks
- 7
- Avg merge
- 4h 42m
- Merged PRs (30d)
- 307
Description
Arnel, 14 September 2026: a newsletter site is one of the systems a barako expert should be able to brew. The pieces exist or are filed (content, email templates #829, schedule trigger #839, email events in barakoBrew, contacts #250), except the parts that make it a newsletter and keep it legal.
## Change
A `BarakoCMS.Newsletter` module:
- **Subscriptions.** A public subscribe endpoint with double opt-in (a confirmation email with a signed link), stored per list, rate limited, honeypot like Forms (#720).
- **Unsubscribe.** A signed one-click link and the `List-Unsubscribe` and `List-Unsubscribe-Post` headers, honoured immediately and never re-subscribed by an import.
- **Campaigns.** A campaign is an entry: a template (#829), a list, a segment filter, and a send time (#839). Sending goes through the Email modules in batches with the provider's limits, one record per recipient.
- **Events back.** Bounces and complaints from the provider suppress the address; opens and clicks are optional and off by default.
- **Consent record.** When and how each address subscribed, exportable for a data request.
## Done when
- Subscribe, confirm, receive a scheduled campaign, and unsubscribe in one click, with a suppressed address never sent to again, covered by tests against a fake provider.
## Where it lives
Module: `BarakoCMS.Newsletter`, owning subscriptions, campaigns and consent records, and sending through the core's email provider interface.
Contributor guide
Research direction
Start with the proposed BarakoCMS.Newsletter module and the core email provider interface, then review email templates #829, schedule trigger #839, contacts #250, and Forms #720. Use a fake provider to cover subscription, confirmation, scheduled campaign delivery, one-click unsubscribe, suppression, consent records, and the stated headers and rate limits.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- csharp
- Domain
- api, backend
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100