Block a user
[Feature] Add guided first campaign flow
[Feature] Add mailing lists and opt-in/double-opt-in only after the core recipient/list model is stable
[Feature] Build template editor polish: formatting buttons, image inserts, links, WYSIWYG editing, and field bubbles
[Feature] Build template directory with backend persistence, versioning, and campaign copy-in semantics
[Feature] Add CardDAV integration after address book model exists
[Feature] Replace address book stub with scoped personal/group/tenant address storage and provenance
[Task] Campaign table layout polish: adjust min/max column widths after the shared DataGrid sizing contract is clarified
[Task] Mailbox and message-display polish beyond the current read-only mailbox baseline
[Feature] Add reusable snippets/campaign parts
[Feature] Add delete/copy/archive policy handling, including campaign archive and version archive
[Feature] Add campaign copy wizard with explicit choices for recipients, files, shares, policies, and mail profile
[Feature] Add comments, assignments, and hand-off workflow
[Feature] Add optimistic concurrency for campaign saves
[Feature] Add approval workflow and separation-of-duties gates
[Feature] Implement campaign ownership transfer as a two-step process
[Task] Decide early self-hosted installer packaging approach: Compose-first script, CLI wizard, generated
.env plus runbook, or a staged combination
[Task] Fully stream ZIP uploads; current extraction is bounded but the uploaded archive is still buffered up to the configured limit
[Feature] Add evidence retention/export policy around immutable campaign artifacts
[Feature] Add full DSAR search/export/delete workflow while respecting immutable evidence obligations
[Feature] Implement wizards and a wizard directory for supporting user in managing and editing data