Page MenuHomePhabricator

[Reading List] Notify users of new Reading List feature when experiment launches (onboarding)
Closed, ResolvedPublic0 Estimated Story Points

Assigned To
Authored By
Jdrewniak
Jul 24 2025, 2:25 PM
Referenced Files
F69901117: screenshot 7.mov.gif
Nov 5 2025, 1:55 AM
F69901114: screenshot 6.mov.gif
Nov 5 2025, 1:55 AM
F65961639: HEADER-1.png
Sep 4 2025, 7:50 PM
F65961637: New Vector-1.png
Sep 4 2025, 7:50 PM
F65961634: HEADER.png
Sep 4 2025, 7:50 PM
F65961631: New Vector.png
Sep 4 2025, 7:50 PM
F65950462: image.png
Sep 2 2025, 11:55 PM
F65911552: HEADER.png
Aug 25 2025, 9:16 PM

Description

Background

In T397532 We'll be introducing a new interface element for logged-in readers on the main article namespace: a bookmark icon in the main toolbar for adding articles to a reading list.
We would like to draw people attention to this icon the first time they encounter it, in order to explain what it's for.
Part 2 and 3 of this work is captured in T406923 and T406922

User story

As a logged-in reader, I'd like to be notified about the new Reading List feature only once

Acceptance criteria

  • The onboarding dialogs should only ever be showed once for users in the experiment
  • The onboarding dialog follow the technical notes
  • Ensure we do not add a performance burden for all users (e.g. load the entirety of Codex on page load)

Other notes

  • Can GuidedTour be used here?
  • Given that we only want to trigger one of the onboarding modals after a user interaction, and without the dark background, it seems simpler to use a custom Codex Popover component instead.
  • Are there any accessibility considerations?
  • No accessibility concerns have been raised so far.

Technical Notes

  • The onboarding dialogs should be created as a custom Vue.js app that loads the Codex Popover component.
  • The initial dialog should be shown if the user is bucketed in the experiment, has zero saved items, and has not seen the dialog previously. That item could will be available on the client as a data attribute on the bookmark icon.
  • The shown state of the dialog should be stored in local storage.
  • The dialog and it's dependencies (Vue, Codex) should be loaded dynamically on the client via mw.load() after checking the user is in the experiment, has zero saved lists, and hasn't seen the dialog before.
  • The dialog should be loaded after a small timeout after pageload to minimize performance concerns, and to draw user attention to the dialog. 500ms or 1s after pageload.
  • The second dialog, after user saves an item, can be overridden in bookmark.js
  • The second dialog does not have to appear on the sticky header, only in the user overflow menu or user menu at smaller resolutions.

Requirement

Scope: Desktop web (Vector 2022).

  • Introduce an onboarding dialog that notifies users of the new Reading List feature when the experiment launches.
  • The onboarding dialog must only display once per user (tracked via local storage).
  • The dialog is shown if the user:
    1. Is in the Reading List experiment treatment group.
    2. Has zero saved items.
    3. Has not previously seen the onboarding dialog.
  • The dialog must use a custom Vue.js app implementing a Codex Popover component (not GuidedTour).
  • The dialog loads asynchronously using mw.loader after confirming eligibility.
  • It must load dynamically after a short delay (500–1000 ms after page load) to reduce performance impact and draw attention to the Save icon.
  • Accessibility parity with Codex components is required, but no new concerns have been identified.
  • The dialog and dependencies (Vue, Codex) must not increase load time for users outside the experiment.

BDD

Feature: Onboarding dialog for new Reading List feature

  Scenario: Showing onboarding dialog to eligible users
    Given I am a logged-in user in the Reading List experiment treatment group
    And I have zero saved items
    And I have not seen the onboarding dialog before
    When I load an article page
    Then the onboarding dialog appears 500–1000 ms after page load
    And it explains the new Reading List feature
    And it appears near the bookmark icon

  Scenario: Suppressing the onboarding dialog after it’s been shown
    Given I have already seen the onboarding dialog once
    When I load subsequent article pages
    Then the onboarding dialog does not appear again

  Scenario: Excluding ineligible users
    Given I am not in the treatment group
    Or I have one or more saved items
    When I load an article page
    Then the onboarding dialog does not appear

Test Steps

Test Case 1: Verify onboarding dialog appears for eligible users

  1. Log in as a user enrolled in the Reading List experiment (treatment group).
  2. Confirm the user has zero saved Reading List items.
  3. Clear local storage to simulate first-time exposure.
  4. Load an article page using Vector 2022.
  5. Wait 500–1000 ms.
  6. AC1: The onboarding dialog appears near the bookmark icon.
  7. AC2: The dialog text describes the Reading List feature.

Test Case 2: Verify dialog persistence logic

  1. Close or dismiss the dialog.
  2. Refresh the page or visit another article.
  3. AC4: The dialog does not reappear (local storage stores “shown” state).

Test Case 3: Verify performance and exclusion behavior

  1. Log in as a user outside the treatment group or with existing saved items.
  2. Load an article page.
  3. AC5: The onboarding dialog does not appear.

QA Results - Beta

This task was created by Version 1.0.0 of the Reader Experience team task template using phabulous.

Event Timeline

ovasileva triaged this task as Medium priority.Jul 24 2025, 4:04 PM
ovasileva raised the priority of this task from Medium to Needs Triage.
ovasileva moved this task from Incoming to Needs refinement on the Reader Experience Team board.
ovasileva moved this task from Needs refinement to Incoming on the Reader Experience Team board.
ovasileva triaged this task as High priority.
ovasileva updated the task description. (Show Details)
ovasileva added a project: Design.
ovasileva moved this task from Incoming to Ready for sprint on the Reader Experience Team board.
Sneha renamed this task from [SPIKE/Design] Determine how to notify users of new Reading List feature when experiment launches to [Reading List] Determine how to notify users of new Reading List feature when experiment launches.Aug 25 2025, 9:16 PM
Sneha renamed this task from [Reading List] Determine how to notify users of new Reading List feature when experiment launches to [Reading List] Notify users of new Reading List feature when experiment launches.
Sneha removed Sneha as the assignee of this task.
Sneha updated the task description. (Show Details)
Sneha subscribed.
Volker_E renamed this task from [Reading List] Notify users of new Reading List feature when experiment launches to [Reading List] Notify users of new Reading List feature when experiment launches (onboarding).Sep 2 2025, 11:52 PM

Context for others: One input shared by myself as food for thought in a 1:1 with @Sneha today was, that I think we should tone down the dismissive action on the onboarding Popovers from current designs and consider only a close button action instead. After revisiting Popover all of this functionality needed is already built in – showing close button and hiding default button actions:

image.png (1×1 px, 112 KB)

Another open question is handling of dismissing the Popovers:

  • Should we let the user dismiss it by clicking outside (my preference)? @Sneha was rightfully sharing that it could be too early accidentally dismissed, not sure how big of a problem this could be as there's probably a noticeable flash of the popover in the right area. Or
  • Should we only let it dismiss by a click on the close icon? Or
  • alternatively, is there a reasonably simple instrumentation to understand if the onboarding Popover was shown for at least 200-300ms and if not show it again on another page load/refresh?
Sneha updated the task description. (Show Details)

@Volker_E I have updated the visuals based on our discussion. Re dismissing: I am wondering what are your thoughts on blocking the scrolling until dialog is dismissed (this could avoid accidental dismissal) but allowing users to dismiss the dialog by clicking outside of the dialog as well as clicking on the X icon.

@Sneha From a respectful to users experience approach again, we get away without blocking scrolling. A self-activated, relatively large Popup is attention grabbing enough in my opinion.
Would want to bring the example, where a user is in their user-flow searching for a quick information bit on the article, actively disturbed by such behavior. While in the other way, there's no click and the Popup would stay active when scrolled out of view, user returns afterwards back up and would then have time and capacity to read through the onboarding.

@Volker_E I have updated the visuals based on our discussion. Re dismissing: I am wondering what are your thoughts on blocking the scrolling until dialog is dismissed (this could avoid accidental dismissal) but allowing users to dismiss the dialog by clicking outside of the dialog as well as clicking on the X icon.

ah that sounds good. So we do not block scrolling but scrolling does not dismiss the dialog it only goes up. The dialog will be dismissed if the user clicks outside of it or on close button.

Jdrewniak updated the task description. (Show Details)
LMora-WMF set the point value for this task to 8.Sep 17 2025, 5:28 PM
Sneha updated the task description. (Show Details)

@Sneha For the onboarding dialogs, the requirements say to show the dialog if the user "has not seen the dialog previously".

Do we consider it seen when the user dismisses the dialog with the close button or clicking outside the dialog?

or just that the dialog was displayed on the page?

@aude we can go with the dialog being displayed on the page because the other approach has some edge cases where it would appear again and may be intrusive.

I moved this back to in-progress since it also includes https://phabricator.wikimedia.org/T406922 which is slated for the next sprint

We have broken down this 8 point parent task into two child tasks https://phabricator.wikimedia.org/T406922 (3 points) and https://phabricator.wikimedia.org/T406923 (5 points) -- changing this parent ticket value down to 0 points.

Edtadros subscribed.

Test Result - Beta

Status: ✅ PASS
Environment: beta
OS: macOS Tahoe 26.x
Browser: Chrome Canary (latest as of test date)
Device: MS
Emulated Device: NA

Test Case 1: Verify onboarding dialog appears for eligible users

  1. Log in as a user enrolled in the Reading List experiment (treatment group).
  2. Confirm the user has zero saved Reading List items.
  3. Clear local storage to simulate first-time exposure.
  4. Load an article page using Vector 2022.
  5. Wait 500–1000 ms.
  6. AC1: The onboarding dialog appears near the bookmark icon.
  7. AC2: The dialog text describes the Reading List feature.

screenshot 6.mov.gif (1×1 px, 744 KB)

Test Case 2: Verify dialog persistence logic

  1. Close or dismiss the dialog.
  2. Refresh the page or visit another article.
  3. AC4: The dialog does not reappear (local storage stores “shown” state).

screenshot 7.mov.gif (1×1 px, 963 KB)

Test Case 3: Verify performance and exclusion behavior

  1. Log in as a user outside the treatment group or with existing saved items.
  2. Load an article page.
  3. AC5: The onboarding dialog does not appear.

cannot test this in beta

HFan-WMF claimed this task.