Export Customer Data with Layout
Allow Growth/Enterprise users to export contacts (manual selection or filter-based) to XLSX with configurable field selection. Async pipeline via gocraft/work; OSS storage (private/exports/); email delivery via SendEmailWithAttachment.
Scope Changes
Engineering surfaces this initiative touches (controlled vocab: Backend · Frontend · Mobile · Infra · Data · Design · Docs · None). Aggregate of this initiative's PRDs; mirrors the scope_changes frontmatter above.
- Backend —
contact-service: net-new async export pipeline (route → handler →gocraft/workjob → consumer → service);GenerateAndUploadExcelWithData()(XLSX) and a CSV serializer (encoding/csv, stdlib) behind theformatbranch; OSS storage (private/exports/, 48h TTL); 3 export email methods; a net-new in-app notification publish to the Qontak Unified Notification Service (/notif/v1/notifications); durable export job-status store. - Frontend —
qontak-customer-fe: "Export Selected" button,ExportCustomerPage(forkDownloadTemplateModal.vue), XLSX/CSV format radio, GET→POST refactor for large ID sets; the export-ready in-app notification surfaces via the launchpad host notification center (customer-fe holds only a stub). - Mobile —
mobile-qontak-crm: the export-ready in-app notification renders in the existing One Notification V2 center (General tab, download/upload category) when emitted; tap-through requiresclick_action=OPEN_URL+click_action_url. Gated byflag_one_notification(OFF by default). - Design — Figma for the Export configuration page, the XLSX/CSV format selector, and the email + in-app notification states.
QA Lane
Lane B — keeps a human QA gate. Mobile is in scope (out of automation reach) and the export involves email crosschecking/operations that need manual QA verification. No E2E test specs exist for this initiative yet, so the Lane-A entry bar (100% E2E, spec-mapped coverage) is unmet regardless. Classified 2026-06-29.