You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Blog: subscribe and unsubscribe from the newsletter #122
POST /api/blog/subscribe — {email}, double opt-in (a confirmation email follows).
GET /api/blog/subscribe/confirm — the public confirmation link; likely belongs in the browser, not the app.
GET/POST /api/blog/unsubscribe — the POST form is the RFC-8058 one-click target.
Acceptance criteria
SubscribeToBlogAsync(email) and the unsubscribe counterpart; shapes verified live (use a throwaway address — do not subscribe the test account's real inbox).
A subscribe control in Settings, pre-filled with the account email, stating that a confirmation email follows.
Implemented in #172 — work continues in the PR from here. Shipped together because #121 is the decision that determines what #122 can be.
#121: browser handoff. No public blog-read endpoint — /api/blog, /api/blog/posts and /api/blog/list all 404, and the only other blog routes are admin-only cookieAuth. Nothing to render in-app.
#122: subscribe works; unsubscribe does not. Both GET and POST /api/blog/unsubscribe take only a ?token= from the email footer, so an app knowing just the address cannot unsubscribe anyone. The panel says where the link lives instead of offering a control that can't work. Subscribe is double opt-in and the UI says so explicitly.
Endpoints
POST /api/blog/subscribe—{email}, double opt-in (a confirmation email follows).GET /api/blog/subscribe/confirm— the public confirmation link; likely belongs in the browser, not the app.GET/POST /api/blog/unsubscribe— thePOSTform is the RFC-8058 one-click target.Acceptance criteria
SubscribeToBlogAsync(email)and the unsubscribe counterpart; shapes verified live (use a throwaway address — do not subscribe the test account's real inbox).