01Adapter contract
One normalized boundary for bundled JSON and flat CSV exports.
02Demo JSON adapter
Validates synthetic campaign, newsletter, audience, and target facts.
03CSV/export adapter
Merges one-newsletter × one-segment rows into the shared model.
04Editable column mapping
Supports inferred aliases, manual overrides, and required-field checks.
05Rejected-row diagnostics
Explains invalid rows before a session dataset can be activated.
06Client-side CSV upload
Reads local files with FileReader; nothing is sent to a server.
07Editable targets
Global, campaign, and segment targets persist in localStorage.
08Target comparison chips
On track, watch, and off-track states stay visible in context.
09Audience master-detail
All segments remain comparable while one opens into deeper evidence.
10Calendar + drawer
Cadence and newsletter detail share the same operating context.
11Campaign comparison
Contribution, pressure, strongest sends, and next actions in one read.
12Monthly report + export pack
Print-ready memo and browser-generated JSON/CSV artifacts.
13CI + deployment prep
Focused tests, GitHub Actions quality gates, and Vercel configuration.