Summary
Blog is a documented product feature with its own help page (/help/blog) and a nav entry on the website. The app has no blog surface.
Endpoints (non-admin)
| Method |
Path |
Purpose |
POST |
/api/blog/subscribe |
{email} — double opt-in |
GET |
/api/blog/subscribe/confirm |
public confirmation link from the email |
GET |
/api/blog/unsubscribe |
human-facing unsubscribe link |
POST |
/api/blog/unsubscribe |
RFC-8058 one-click unsubscribe target |
Authoring lives under /api/admin/blog* and is out of scope (admin-only).
Priority note
Lowest priority in this parity effort: it is a read-and-subscribe surface that the OS browser already serves well. Filed because the user asked for every feature, with the explicit recommendation to consider the browser-handoff option below.
Repo conventions to follow
- Service: one
partial class InterlinedApiClient file per domain in InterlinedList/Services/.
- Wire types in
InterlinedList/Models/ matching real API JSON.
- ViewModel per view in
InterlinedList/ViewModels/ (CommunityToolkit.Mvvm ObservableObject + [RelayCommand]).
- View is a self-contained
UserControl in InterlinedList/Views/ that news up its own VM from AppServices.Session.
- Strata tokens only — no colors/fonts/radii outside
Resources/Palette.xaml + Theme.*.xaml.
- Read-after-write for any mutating endpoint whose response envelope has not been live-verified.
Summary
Blog is a documented product feature with its own help page (
/help/blog) and a nav entry on the website. The app has no blog surface.Endpoints (non-admin)
POST/api/blog/subscribe{email}— double opt-inGET/api/blog/subscribe/confirmGET/api/blog/unsubscribePOST/api/blog/unsubscribeAuthoring lives under
/api/admin/blog*and is out of scope (admin-only).Priority note
Lowest priority in this parity effort: it is a read-and-subscribe surface that the OS browser already serves well. Filed because the user asked for every feature, with the explicit recommendation to consider the browser-handoff option below.
Repo conventions to follow
partial class InterlinedApiClientfile per domain inInterlinedList/Services/.InterlinedList/Models/matching real API JSON.InterlinedList/ViewModels/(CommunityToolkit.MvvmObservableObject+[RelayCommand]).UserControlinInterlinedList/Views/that news up its own VM fromAppServices.Session.Resources/Palette.xaml+Theme.*.xaml.