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

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions