Page MenuHomePhabricator

[L] Activity tab (user story) - Most viewed edits & contributions this month from Growth API
Closed, ResolvedPublic

Description

User story

As a Wikipedia editor, I want my activity tab to include statistics about my editing on my primary language Wiki similar to how I see on my newcomer homepage, so that I can understand the impact I’m having on the Wikis.

Background

The team is testing an activity tab that would add reading insights to existing history tab with the goal of deepening engagement and increasing retention of readers.

Requirements
  • Add the modules that pull data from the Growth Impact API
  • Insights should be for their primary language Wikipedia, and the language Wikipedia should be notated in the Header
    • Add Most viewed since your last edit
      • Include number of views
      • Tapping on an article listing takes you to the article
      • No time-limit on data
    • Add Contributions this month module
      • Edits this month: Edits from the current calendar month
      • Edits last month: Edits from last calendar month
      • Tapping on the module should lead to an in-app webview of their contributions (primary language Wiki OK)
    • All time impact module - will be done on a separate user story T412070

TS Changes
While the Growth impact module API call is in progress, still show empty / blank editing modules with a centered spinner in each one.
If the call fails:
If server responds with an error, replace spinner with an error label in the module (need mock for this).
If user doesn't have an Internet connection, replace spinner with an error label in the module (figma) Also present our existing "No internet connection" toast/snackbar at the top. (screenshot).

For loading state: See discussion at https://wikimedia.slack.com/archives/C4DDMJ9CH/p1768424041628099
For no connection error: We are using our existing "No internet connection" snackbar, built in T407676: [M] Activity Tab (user story): Total impact across projects

Boilerplate requirements

  • Should lay out well with long translations. Truncate, wrap text, or scroll where necessary.
  • Should change colors according to multiple themes
  • Should navigate easily and have understandable accessibility labels for Voice Over
  • Should lay out well on larger font sizes. Truncate, wrap text, or scroll where necessary.

Nice to have

  • Graph for contributions this month
    • The largest number fills up the entire width, and the smaller number is drawn in proportion to that larger number. Even if that largest number is only 1 edit, it fills the entire width.
    • If there are no edits, the bar does not show
NOTE: Empty state will be built on separate user story T407672: [M] Activity tab (user story): Infrequent reader/editor (empty states) NOTE: All time impact module will be built on separate user story T412070
Designs

With Charts: https://www.figma.com/design/2ShBsmgWuzsDAeTafyKzg6/iOS---%3E-Activity-Tab?node-id=355-1631&t=AgNtmUPGd1BDt8k0-4

Backup chartless version: https://www.figma.com/design/2ShBsmgWuzsDAeTafyKzg6/iOS---%3E-Activity-Tab?node-id=757-2397&p=f&t=AgNtmUPGd1BDt8k0-0

Reference

T399629

Engineering notes
Test notes

Test in latest TestFlight version 7.9.0.

Event Timeline

HNordeenWMF triaged this task as Low priority.
HNordeenWMF moved this task from Needs Triage to Up next on the Wikipedia-iOS-App-Backlog board.
HNordeenWMF updated the task description. (Show Details)

@HNordeenWMF Let's add the loading state details we discussed yesterday to this one. Something like (if I recall correctly):

  1. While the Growth impact module API call is in progress, still show empty / blank editing modules with a centered spinner in each one.
  2. If the call fails:
    1. If server responds with an error, replace spinner with an error label in the module (need mock for this).
    2. If user doesn't have an Internet connection, replace spinner with an error label in the module (need mock for this). Also present our existing "No internet connection" toast/snackbar at the top. (screenshot).
Tsevener renamed this task from Activity tab (user story) - Editing impact from Growth API to [L] Activity tab (user story) - Editing impact from Growth API.Oct 30 2025, 1:57 PM
HNordeenWMF raised the priority of this task from Low to Medium.Oct 31 2025, 9:55 PM
HNordeenWMF updated the task description. (Show Details)
HNordeenWMF lowered the priority of this task from Medium to Low.Nov 13 2025, 12:34 AM

@HNordeenWMF

While the Growth impact module API call is in progress, still show empty / blank editing modules with a centered spinner in each one.
If the call fails:
If server responds with an error, replace spinner with an error label in the module (need mock for this).
If user doesn't have an Internet connection, replace spinner with an error label in the module (figma) Also present our existing "No internet connection" toast/snackbar at the top. (screenshot).

Similar question came up in engineering sync here as https://phabricator.wikimedia.org/T407676#11371640. You could see several loading spinners going at once while these fetch, which could be a bit much visually.

Do you think we could could scope cut this to a very basic single centered spinner while the editing calls are made? Then we can have a separate followup loading polish user story that can fine-tune the loading states? This way the data states can be design reviewed and QA'ed without being held up by loading state details. Let me know what you think.

Hey @Tsevener this one was a tshirt size L, but the subtasks total to 19 points. That puts it at larger than an XL,

If a user story is larger than an XL it should be broken down. If an engineering task is larger than a M it should probably be broken down.

Do you have a preference on how I break down the user story? I tried breaking out "All time impact" since that's the 2nd chunk, but I see you have the data fetching happening all at once. Let me know if this would cause confusion to break out https://phabricator.wikimedia.org/T412070

HNordeenWMF raised the priority of this task from Low to Medium.Dec 9 2025, 12:49 AM
HNordeenWMF renamed this task from [L] Activity tab (user story) - Editing impact from Growth API to [L] Activity tab (user story) - Most viewed edits & contributions this month from Growth API.Dec 9 2025, 1:02 AM
HNordeenWMF updated the task description. (Show Details)

@HNordeenWMF I think if you're going to break them up, then each piece of UI should be it's own user story. That's why I designed the engineering subtasks in this way. It is all the same API endpoint so the data task can be one, but we would build each piece of UI separately.

Screenshot 2025-12-09 at 11.28.17 AM.png (228×279 px, 18 KB)

Screenshot 2025-12-09 at 11.28.21 AM.png (183×274 px, 11 KB)

Screenshot 2025-12-09 at 11.28.26 AM.png (116×254 px, 9 KB)

Screenshot 2025-12-09 at 11.28.30 AM.png (130×260 px, 6 KB)

Screenshot 2025-12-09 at 11.28.34 AM.png (91×263 px, 6 KB)

So 5 different user stories for those. Then the fetch data task, then the loading/error state task (which I would tackle at the end once the data UI state is complete for each of these views).

I personally am ok to keep this structure as-is since we are working against engineering subtasks.

to fix, post punchlist review with @Tsevener and @HNordeenWMF

  • 1- remove indent for "Most viewed since your last edit"
  • 2- in "Most viewed since your edit," too large of padding between header and list items, and individual list items
  • 3- view count in "Most viewed" rendering in incorrect type token, too light weight
  • 4- incorrect copy in "contributions this month"
  • 5- top bar in "Contributions this month" does not maintain rounded corners on the right side
  • 6- (iPad) edits not rendering in contributions this month, and so "most viewed" is also not showing
  • 7- contrast is off for sepia, light, and dark modes for "contributions last month"
  • 8- VoiceOver not reading contents of "Most viewed edits"
  • 9- VoiceOver not reading contents of "Contributions this month"
  • 10- Dynamic text truncating header of "Most viewed"
  • 11- Dynamic text resizing only the Symbol attached to "Most viewed" and not the others in the other modules

@Tsevener most of these are fixed, but i'm still seeing 2 and 3 (now looks too bold).

also, i noticed that the "Contributions this month" module is rendering the date in full (February 25, 2026) including the year:

IMG_2635.jpg (1×1 px, 119 KB)

— it should only say the month and the day of the month across the screen, for consistency, like this example from "Articles saved this month":

IMG_2636.PNG (373×1 px, 216 KB)

can this be fixed?

ABorbaWMF subscribed.

Looks good to me 7.9.0 (5946). Tested on iPad Air 11-inch on iPadOS 26, and iPhone XS on iOS 26.