Evaluate where the carousel code should live and how data flows between components. Produce a recommendation that the team can act on for the carousel port task.
This task should be completed before other carousel subtasks are picked up.
Questions to answer
Where should the code live?
- MinervaNeue is the leading candidate (skin-level presentation, mobile-only). Could it alternatively live as its own module in MMV? What are the tradeoffs?
- What code from the prototype needs to be ported? (thumbExtractor.js, excludedImageSelectors.js, carousel UI component, etc.)
- We don't want this in MobileFrontend
How do thumbnails get from MMV to the carousel?
- Should MMV's bootstrap fire a client-side hook with discovered, non-excluded thumbnails that Minerva consumes?
- What should the shape of that hook be? (image URLs, file titles, alt text, dimensions?)
- Can we guarantee MMV's discovery runs before Minerva needs the data?
Server-side container injection
- What server-side check is sufficient for Minerva to confidently inject a placeholder? (e.g. raw image count in page HTML, basic noviewer filtering, or something simpler?)
- How do we handle the edge case where the server reserves space but client-side filtering discovers fewer than 3 qualifying images?
- Is there a risk of the empty placeholder being visible for too long on slow connections? If so, how do we mitigate (skeleton UI, animation, graceful collapse)?
Feature gating
- What feature flag mechanism should we use for incremental rollout? URL parameter, MediaWiki config variable, or both?
- Should this be the same flag as the beta viewer (T417675), or independent?
Display rules
- Only articles with 3+ qualifying images. Does the server-side check or the client-side logic enforce this threshold?
- How should the carousel connect to the beta viewer? Confirm that navigating to #/media/File:... on tap is the right approach.
Deliverable
A brief written recommendation (can be a comment on this task or a short document) covering the above questions, with enough detail for the port task to proceed.