Page MenuHomePhabricator

[Epic] iOS Wikipedia Year in Review 2025 (V3)
Open, MediumPublic

Assigned To
None
Authored By
HNordeenWMF
Dec 18 2024, 8:01 PM
Referenced Files
F65803196: Search 3.jpeg
Aug 20 2025, 4:58 PM
F65803167: IMG_0001.PNG
Aug 20 2025, 4:58 PM
F65803136: Search 2.jpeg
Aug 20 2025, 4:58 PM
F65803111: Search.jpeg
Aug 20 2025, 4:58 PM

Description

Background

In 2024-2025 the iOS team built a personalized Wikipedia Year in Review feature T371946. During development and release, we identified improvements that can be made if we iterate on this project with a version for 2025. This Epic is to collect maintenance tasks, iterative improvements, bug fixes, and product ideas for the 2025 version of the Apps Wikipedia Year in Review.

Hypotheses

We have two hypotheses for this work as part of the 2025-26 annual plan

  • Under WE 3.3: If we A/B test requiring an account to view the personalized reading insights of Year in Review, we’ll see a 1% increase in overall retention rate for users that were required to have an account, compared to those that were not.
  • Under WE 3.2: If we make the donor slides in the iOS Year in Review, more integrated, and personalized, we’ll see a 5% increase in donations compared to 2024.
Requirements
  • Add slides for at least 3 of the following personalized insights
    • Reading history by category, or mention a few categories they’ve read articles under
    • Most visited article, or which articles they visited multiple times.
    • Show articles read by geography (You read X articles about Canada)
    • Longest rabbit hole followed
    • Total time spent reading, and article(s) with the most time spent reading
  • Update collective (logged-out) data for English users to match the microsite
  • Update collective (logged-out) slides for non-English users with data from Shay about the Mobile Apps

Nice-to-have

  • Allow users to share a summary of the entire review
  • Give users a reading list of articles from their year at the end
  • Shareable Image collage from the articles they read over the year
  • T381678: Year in Review - code cleanup and improvements for 2025
  • All external links go to device language version of page, and fall back to English
  • Do a push notification when Year is Ready
  • Give an in-app way to report issues with the feature (iOS did not have this in V1 or V2)
  • Have links in feature just show link previews, to keep users inside the feature
  • Make the survey free-text multi-line
  • Improve transition when iPhone user opens YiR in Landscape, improve iPad and Landscape support
  • Add visualizations for rabbit holes or knowledge journeys
  • T376441: [L] Add article images / slide carousels into slides
  • More detailed in-app contributions stats. Instead of just saying “Thank you”, include the number of donations, amount they donated and when
  • Include graphs where we can, for example on “day of the week most read”, many users wanted to see the graph of all the days
  • Improve editing stats so they cover the entire year / more than 500+ edits. A few users got hung up on that
  • Add additional editing insights - we’re getting additional data with the user contributions API that could be leveraged for additional Editing insights (would require legal review)
    • List of articles they edited
    • Edit tags like minor, suggested edits - could show a breakdown of types of edits
    • New pages created - show how many new articles they created
    • Timestamp - could do time of the day or day of the week for Editing
  • Show which articles they visited that are more niche or lesser read. (The article in your history that has the lowest pageviews (most niche or rare)
  • Show insights by language for Multilingual readers and editors (edits on different languages set in the app, reading in different languages)
  • Tell users what kind of reader they are: Repurpose design archetypes and let users know what kind of user group they fit into, or classify the reader as a "type", dancer, hunter, etc (only a very few people asked for this in the survey)

Notes

  • Users want collective stats and personalized stats intermingled. They like seeing the collective impact, and want to be compared to the collective. Next year we should not remove collective slides for logged-in users.
  • It’s important to continue communicating where the data comes from, and why it’s not able to be cross-platform.
  • Notes for when writing UI copy
    • Avoid saying "this year" or "last year" within copy, to give flexibility of releasing during either December or January. Ideal format is "in $1", where $1 is 2025
    • “You read X articles in 2025”. Instead of “You read X articles this year”
    • See if there are friendlier alternatives to talk about how the feature respects privacy. "locally stored" or "local storage” might not mean much to users, maybe something like "calculated on your device, privately" - try to make it so non-technical folks can understand
    • Don’t have decimals in the collective statistics. For any collective statistics, we want to use variables ($1, $2) in translate.wiki. This requires having integers for numbers
    • “Over 4 billion views” instead of “4.2 billion views” for example

How will we measure success?

5-day indicators for iOS & Android

Funnel check

  • KI 0.1 - At least 48% of active app users during the time period see the Year in Review prompt
    • Baseline: 48% of iOS uniques saw the prompt
  • KI 0.2 - At least 5% click through rate on the Year in Review announcement
    • Baseline: 5% of iOS prompt impressions opened Year in Review
  • KI 0.3 - At least 36% of those who enter the feature view more than 2 slides
    • Baseline: 36% of those who entered viewed more than 2 slides last year
  • KI 0.4 – At least 0.2% of engaged users make a donation through the feature
    • Baseline: iOS saw 0.2% of engaged users make a donation.
20-day analysis

iOS: A/B Test specific analysis

  • KR 5.1 - 1% increase in overall app retention among readers who were required to have an account (A) compared to those who did not need to have an account (B).
    • We're seeking to understand the impact of requiring Account-holding vs not-account-holding
    • Breakdown by logged-in and logged-out for each variant
  • KR 5.2 - 10% increase in overall app retention users who were shown personalized slides vs those who were not
    • We're seeking to understand the impact of Personalization vs non-personalization
  • GR 5.3 - No more than 10% of all survey responses from logged-out users in Group B express concerns with privacy
  • CR 5.4 - How does the completion rate, satisfaction rate and donation rate for logged-out users in group A compare to group B?
    • We're seeking to understand the impact of Personalization vs non-personalization

Validation (the same for both Android & iOS)

  • KR 1.1 - 5% increase in donations app menu donations as compared to a similar time period in 2024.
  • KR 1.2 - 5% increase in return rate for engaged users compared to baseline of 77%.

Guardrails (the same for both Android & iOS)

  • GR 2.1 - Fewer than 50% of feedback about the donation aspects are negative
  • GR 2.2 - At least a 80% of users rate the Year in Review feature as satisfactory or neutral
  • GR 2.4 - At least 10% of engaged users make it to the contributor slides
    • Engaged = viewed at least 2 slides
    • If not met: which slides had the highest drop off?

Curiosities (the same for both Android & iOS)

  • CR 3.1 What were the main themes in the user feedback from the Year in Review survey? Did we see a decrease in requests for personalization from 2024?
    • Baseline: Last year, 60% of free-text responses asked for personalization.
  • CR 3.2 - What did the funnel look like for logged-out users? What % logged-in, created an account, and then viewed the Year in Review afterwards.
  • CR 3.3 - How do the donations received through Year in Review differ from other app menu donations, and banner donations? Average gift, share of new donors
    • App menu donations from a comparable time period (when YiR is not running)
  • CR 3.4 - What was the overall donation rate, and which 2 slides had the highest donation rate?
  • CR 3.5 - How many people shared their highlights? What was the most commonly shared individual slide?
  • CR 3.6 - What share of engaged users with year in review enabled the custom icon (in settings for from within the feature)?

Related Objects

StatusSubtypeAssignedTask
OpenNone
ResolvedTsevener
OpenNone
OpenNone
OpenNone
OpenNone
ResolvedHNordeenWMF
OpenSeddon
ResolvedWRai-WMF
ResolvedTsevener
ResolvedTsevener
ResolvedTsevener
ResolvedTsevener
ResolvedTsevener
ResolvedTsevener
ResolvedDbrant
ResolvedTsevener
Resolvedcooltey
Resolvedcooltey
ResolvedDbrant
ResolvedDbrant
OpenNone
OpenOttomata
OpenOttomata
OpenEevans
ResolvedOttomata
ResolvedJMonton-WMF
ResolvedFeatureOttomata
Openamastilovic
Openamastilovic
Resolvedamastilovic
Resolvedxcollazo
OpenJAllemandou
Openxcollazo
OpenNone
ResolvedSnwachukwu
Openamastilovic
Openmforns
OpenOttomata
ResolvedWRai-WMF
ResolvedTsevener
DuplicateNone
ResolvedHNordeenWMF
ResolvedGOlson-WMF
ResolvedTsevener
ResolvedHNordeenWMF
InvalidTsevener
ResolvedSNowick_WMF
ResolvedSNowick_WMF
ResolvedSpikeGOlson-WMF
ResolvedHNordeenWMF
ResolvedSChekfa-WMF
ResolvedGOlson-WMF
ResolvedHNordeenWMF
DuplicateTsevener
ResolvedHNordeenWMF
ResolvedHNordeenWMF
ResolvedHNordeenWMF
ResolvedHNordeenWMF
ResolvedHNordeenWMF
ResolvedHNordeenWMF
ResolvedHNordeenWMF
ResolvedHNordeenWMF
ResolvedGOlson-WMF
ResolvedSNowick_WMF
OpenSNowick_WMF
ResolvedTsevener
ResolvedHNordeenWMF
ResolvedHNordeenWMF
ResolvedSNowick_WMF
ResolvedHNordeenWMF
OpenNone
ResolvedHNordeenWMF
ResolvedHNordeenWMF
ResolvedTsevener
ResolvedHNordeenWMF
ResolvedHNordeenWMF
ResolvedMazevedo
ResolvedHNordeenWMF
ResolvedHNordeenWMF
ResolvedTsevener
OpenNone
OpenBUG REPORTNone
OpenBUG REPORTNone
ResolvedSNowick_WMF
OpenNone
OpenNone

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes

Initial thoughts on the [EARLY 2025 PREP NEEDED?] tags:

Categorizing the user’s reading history categorized by topic, theme, category, or genre.

Yes, we need early tracking. There are server load concerns if we fetch topics upon page view. This is due to a lack of caching in the topics APIs (though there are still discussions to be had there). We may have more luck exploring categories, but we would have trouble determining useful categories to show the user. It would be worth asking Android how they are using categories. If they are able to fetch them upon page view without server load issues, then maybe we can too.

The article in your history that has the lowest pageviews (most niche or rare)

I think we could only fetch this data at the end of the year by looping through their history and fetching final page views per month like this. Likely server load issues here, so this may be a nonstarter.

We should visualize and tell the story of their knowledge journeys:

Need early tracking. If we stick with our tabs infrastructure, we could show them their largest tab with the most articles. I'm not sure if that will equate to a rabbit hole. For example, currently in the prototype, kicking off a new search from an article keeps the user in the same tab.

Alternatively we add local tracking to our WMFData page view database, and add a "source" page view relationship. This connection is then only set when the user visits an article via an article link. At the end of the year we should then be able to aggregate up their longest run of connected page views, and show it in a visual manner. Note, this is different our current source tracking for instrumentation purposes. That tracking is just a general "source" identifier (history, places, etc.). That tracking will not make more specific connections, like Dog led to Cat, etc.

Users get confused when editing stats do not cover the full year (edits viewed) and assume they are incorrect. We should strive to have all stats cover the full year.

Need early tracking, but it would be difficult.

  • We could start persisting each edit they make in the app locally. Note that this will only work for that particular app install.
  • Alternatively upon launch, we could fetch their user contributions API and persist those edits. I do not think that is a global API though, so we would have to limit it to their primary app language.
  • Every launch, we only fetch the first page and persist whatever new edits haven't been persisted since last time.
  • Every launch, we go through all of their persisted edits, and fetch daily page views for each page (for days that have not already been persisted) and persist those. Example call that persists "Cat" page views for first 20 days of Jan 2024.
  • Risk of server load issues for these, but since it's only for logged-in users, maybe the numbers would be small enough.

Show articles read by geography

You can long-press any article in an app, and if there's an associated geography, it shows "View on map" as an option. So as long as whatever powers that (some persisted coordinates, probably) is persisted all year, we can do this in one go at the end of the year.

Show insights by language for Multilingual readers and editors

We persist the project language in History, so we can do this at the end of the year for pages read.
For editing, needs early tracking, but I don't think it would work very well.

For pages edited, there's a per-wiki edit count we could get, and a global edit count - https://phabricator.wikimedia.org/T376320#10202745. Those aren't limited by the year.
Getting all per-wiki counts via the API means making 300+ calls to get the user's edit count on each wiki, so that also won't work well.

Alternatively, we could start persisting the edit they made locally on that device. It would only be accurate on that particular app install. We are also already 3 months into the year, so it would be inaccurate. It's also easiest here if we can ignore edit reverts.

HNordeenWMF renamed this task from [Epic] Future work for Wikipedia Year in Review on iOS App to [Epic] Future work for Wikipedia Year in Review.Apr 25 2025, 6:12 PM
HNordeenWMF updated the task description. (Show Details)
HNordeenWMF renamed this task from [Epic] Future work for Wikipedia Year in Review to [Epic] Wikipedia Year in Review V3 on iOS.May 23 2025, 11:09 PM
HNordeenWMF updated the task description. (Show Details)
HNordeenWMF renamed this task from [Epic] Wikipedia Year in Review V3 on iOS to [Epic] iOS Wikipedia Year in Review 2025 (V3).Jul 11 2025, 5:31 PM

Here are some notes from my recent investigations:

Reading history by category, or mention a few categories they’ve read articles under

We have category data, but just note that the top categories could be very generic. Here are my top 10 category calculations from my device. I'm able to gather a count of the number of read articles that fall under each category:

"Living_people", count: 66
"American_film_actresses", count: 24
"American_male_film_actors", count: 21
"American_male_television_actors", count: 21
"21st-century_American_male_actors", count: 20
"20th-century_American_actresses", count: 20
"American_people_of_English_descent", count: 18
"21st-century_American_actresses", count: 17
"American_television_actresses", count: 17
"20th-century_American_male_actors", count: 16

(I did not realize I looked up so many actors...)

Anyways, the point is, "Living people" is very generic. Maybe we could provide a list of the top 10 categories to the user in the hopes that it touches on something more specific and interesting.

Show articles read by geography (You read X articles about Canada)

We have a list of read articles with latitude and longitude coordinates. The tricky part here is reverse geocoding into a user-readable region (like country, city, etc.). We can make a reverse geocoding request to Apple, but that will be rate limited and would not be recommended for dozens of requests per user. I recommend we first cluster the articles, pick an average lat/long value for each cluster and make a reverse geocoding request for the cluster with the most articles. Clustering could be tricky. MapKit can automatically cluster annotations, so the easiest lift here might be to actually display a map with all of the annotations, then have it automatically cluster for us (see example). Then hopefully we can look up the annotation cluster with the most annotations, and reverse geocode its coordinates. I'm not sure if the design can fit a map view but it could be the easiest option.

Alternatively, our Places code seems to have some custom clustering algorithm. That may be something we could reference instead if we can't fit a map view onto the slide.

The other requirements look doable without complications.

SChekfa-WMF subscribed.

thanks for your work on this!

notes from my design review (i've split up into three buckets, affecting DYK, BYR, and both)

high level, affecting both DYK and BYR
1— upon opening a new tab, the user should be immediately dropped into the new tab screen in the focus state (i.e. with the keyboard up and the cursor blinking). right now, it seems like they enter a half-focus state where the Cancel button appears next to the search bar, as it does in the focus state, but those two aforementioned elements do not appear until you tap into the searchbar: see video here.
2— we should not be including recommendations for the Main Page. if their only viewed page is Main Page, we should hide recommendations. see above video for reference.
3— when someone opens a new tab, then taps Cancel, that should just close the focus state and they should stay on that new tab, rather than bumping them back to the tabs overview. see video here.
4— the title of the currently labeled “Tabs preferences” screen should read “Tab preferences.”
5— the check mark on the actively selected new tab theme looks to be a fainter weight than what’s in the design — can you ensure it’s styled as semibold 17px?
6— if a user taps on a link in the DYK or BYR and then taps back in the top left, the back button should function like it does elsewhere in the app and take them back to the previous screen, so in this case it should take them back to the new tab screen. right now, it’s taking them back to Search. see video here.
7— just now catching an error in the design, apologies — can you please update the placeholder content in the new tab card in the tabs overview from “any one” to “anyone"?
8— this might be outside the scope of this work, but i'm noticing that the image in the tab cards in the tab overview screen on iPad in portrait mode seems to be incorrect — it's square-ish rather than in a landscape rectangular configuration, as noted in the Tab designs Robin worked on. can we fix this? it's causing the descriptions to be cut off early, including the New tab description:

Search.jpeg (2×1 px, 1 MB)

DYK
9— blue links should not be bolded:

Search 2.jpeg (2×1 px, 365 KB)

10— the DYK should only refresh if the user opens a new tab, not while they’re on the new tab and lock their phone then unlock it, or go to a different app then return to the wikipedia app, etc. sometimes it looks like it’s changing on its own too for no reason. see video here.

BYR

11— on iPad, for recommendations, I have a search history and have visited one article but the app not recommending me anything:

IMG_0001.PNG (2×1 px, 74 KB)

12— it looks like the spacing is a bit off. there should be 24px below the last recently searched query, then below that the Because you read grey header, then between that header and the first recommendation there should be 12px. right now it seems to be too low for the former and too high for the latter:
Search 3.jpeg (2×1 px, 267 KB)

Moving this back to Design Doing - this got a bit mixed up with Tabs V2.

HNordeenWMF raised the priority of this task from Low to Medium.Oct 27 2025, 11:10 PM
HNordeenWMF closed subtask T402680: Year in Review flow as Resolved.
HNordeenWMF closed subtask T405639: Update log-in prompt as Resolved.