Skip to content

✨ In-app announcements module (banner + once-per-user post-login message) #3946

Description

@PierreBrisorgueil

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions