Deployments need a reusable way to market features to logged-in users (feature launches, referral programs, plan changes) — today the only options are hardcoded banners or nothing.
Scope v1 (lean, config-driven):
- Announcement definition: id, title, body, CTA (label + route/url), placement, audience (all | plan | role), active window
- Placements: (a) global dismissible banner, (b) post-login modal/toast shown once per user
- Per-user dismissal/seen state (server-side, survives devices) — no re-nag
- Analytics events:
announcement_shown, announcement_dismissed, announcement_cta_clicked
- Vue: components + composable; Node: seen-state endpoint
Out of scope v1: admin CRUD UI (config-driven first), scheduling engine, segments beyond plan/role.
First consumer: referral-program awareness (#3945 exposes the referral surface; this module markets it).
Created via /dev:issue
Step 0 (decides if this module is needed at all): trial an analytics-provider in-app survey of type "Link" (headline + body + CTA URL) for the first announcement — it ships once-per-user display, cohort/flag targeting and shown/dismissed/clicked events with zero code. Build this module only if the survey UX proves too limited for a native look; if built, keep it a dumb display primitive (banner + once-per-user modal + seen-state) and delegate audience targeting to feature flags rather than a home-grown engine.
Deployments need a reusable way to market features to logged-in users (feature launches, referral programs, plan changes) — today the only options are hardcoded banners or nothing.
Scope v1 (lean, config-driven):
announcement_shown,announcement_dismissed,announcement_cta_clickedOut of scope v1: admin CRUD UI (config-driven first), scheduling engine, segments beyond plan/role.
First consumer: referral-program awareness (#3945 exposes the referral surface; this module markets it).
Created via /dev:issue
Step 0 (decides if this module is needed at all): trial an analytics-provider in-app survey of type "Link" (headline + body + CTA URL) for the first announcement — it ships once-per-user display, cohort/flag targeting and shown/dismissed/clicked events with zero code. Build this module only if the survey UX proves too limited for a native look; if built, keep it a dumb display primitive (banner + once-per-user modal + seen-state) and delegate audience targeting to feature flags rather than a home-grown engine.