BaryoDev / BaryoDev/barakoCMS

Newsletter: subscriptions with double opt-in, campaigns, one-click unsubscribe and bounces

Open
#846 0 comments 0 reactions 0 assignees View on GitHub
module
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.