Appearance
Nini and Lulu mobile UI/UX review
Canonical document. This register consolidates the mobile UI/UX feedback received from 17 to 24 September 2026, its delivery status, and the remaining data dependencies. The historical mobile-repository copy must not be updated independently from this page.
Created: 2026-09-21; updated: 2026-09-28. Product: Snag mobile application
Implementation issue: poc-tcg-collector#437
Mobile delivery: poc-tcg-collector#438
Backend dependency: tcg-collector-backend#366
Purpose
This document consolidates the design feedback provided by Nihaw (Nini) and Spleen (Lulu) in the product discussion, including their 24 September review. It records what was requested, which product decisions were clarified, what each PR delivers, and which items still depend on catalogue or valuation data.
The screenshots shared in the discussion covered:
- the new Home screen;
- the merged Collection and Wallet screen;
- the centered graded-card dialog;
- the centered collection-sharing dialog;
- the new PRO subscription screen;
- the add-to-collection sheet with printing, quantity and purchase price.
The screenshots are visual references, not instructions to replace the validated design tokens or fabricate unavailable data.
Product direction captured from the feedback
The dark appearance was considered successful, but the application felt too visually flat. The requested response was to make card artwork the main visual content rather than reintroducing decorative colour. This led to two structural changes:
- Add a real Home screen as the first destination instead of opening on Explorer.
- Merge Collection and Wallet, which previously duplicated collection-value information.
The approved bottom navigation is therefore:
Home / Explorer / Scan / Tools / Collection
The existing colour system remains unchanged. Pokémon retains its configured identity and One Piece uses the existing blue TCG accent, including the scanner.
Consolidated product decisions
Catalogue editions
Internationalgroups the catalogue structure shared by English, French, German, Italian and Spanish releases.- Snag currently supports only French and English content in this scope.
- The application language determines whether international set, series and card names are displayed in French or English.
- Japanese and Chinese catalogues are separate because their sets, grouping and exclusives differ from the international catalogue.
- This delivery introduces the International/Japanese UI scope. Chinese is not part of the current delivery.
Sealed products and Masterset
- Sealed products are intentionally deferred because the required products are not populated in the database.
- Masterset should expose physical printings such as Reverse, Poké Ball and Master Ball.
- The app can display validated physical variants already returned by the catalogue. Completeness still depends on backend data.
Valuation behavior
- Changing condition or language must request and display the corresponding price; no client-side multiplier or invented fallback is acceptable.
- Enabling grading must ask for the grading company and grade, then display the matching valuation returned by the valuation engine.
- Missing raw, historical or graded observations must remain explicitly unavailable rather than displaying a guessed price.
Dialog behavior
- Condition, language, grading and collection-sharing dialogs open in the center of the screen.
- The dark modal veil is removed.
- The add-to-collection flow keeps the previously validated printing, quantity and optional purchase-price sheet.
Traceability by screen
Status definitions:
- Delivered: implemented in mobile PR #438.
- Delivered, data-dependent: UI behavior is implemented but complete output requires catalogue or valuation data.
- Already delivered: present on
stagingbefore PR #438. - Deferred: intentionally excluded by a recorded product decision.
- Follow-up: a remaining implementation or content task.
- Superseded: replaced by a later product decision recorded below.
Global
| ID | Requested behavior | Status | Delivery note |
|---|---|---|---|
| G-01 | Remove the unattractive black veil behind open dialogs. | Delivered | Shared Sheet dialogs use a transparent scrim while retaining outside-tap dismissal. |
| G-02 | Preserve the existing colours instead of redesigning the palette. | Delivered | PR #438 uses the validated semantic tokens and does not introduce a new palette. |
| G-03 | Use blue when the active TCG is One Piece. | Already delivered | The existing One Piece TCG accent remains active in navigation, catalogue and scanner contexts. |
Home and navigation
| ID | Requested behavior | Status | Delivery note |
|---|---|---|---|
| H-01 | Open on a Home screen rather than Explorer. | Delivered | Home is the first permanent tab and initial route. |
| H-02 | Make card artwork more prominent to reduce the flat feeling of dark mode. | Delivered | Home exposes collection previews and recent scans when data exists, with explicit empty states otherwise. |
| H-03 | Merge Collection and Wallet. | Delivered | Wallet summaries and investment entry points now live in Collection. |
| H-04 | Show latest editorial news on Home. | Follow-up | A later pass shows dated catalogue releases under "Dernières sorties". Editorial news still needs an approved source. |
Explorer
| ID | Requested behavior | Status | Delivery note |
|---|---|---|---|
| E-01 | Replace set abbreviations with logos, following the PokéCardex reference. | Partially delivered | SetLogo displays a real set logo when supplied. Missing set logos and all bloc-level logos remain catalogue/asset gaps; a later pass removed the misleading first-set logo from bloc tiles. |
| E-02 | Reorder Pokémon blocks like the PokéCardex reference. | Delivered, data-dependent | Stable canonical sorting uses catalogue release/order metadata; source metadata must remain complete. |
| E-03 | Apply the equivalent ordering to One Piece. | Delivered, data-dependent | The same deterministic ordering contract is used for One Piece. |
| E-04 | Separate International and Japanese catalogues, but expose only scopes with usable data. | Delivered for current scope | International is the only visible scope until a complete Japanese catalogue exists. Japanese rows are excluded from International. |
| E-05 | Keep an expanded block open and restore the same scroll position after returning from a set. | Delivered | Explorer view state stores the expanded block and offset across pushed set routes. |
Set detail after selecting a series
| ID | Requested behavior | Status | Delivery note |
|---|---|---|---|
| S-01 | Keep rarity filters in Common, Uncommon, Rare, and subsequent canonical order. | Delivered | Rarity counts are normalized through a stable order instead of response order. |
| S-02 | Preserve semantic rarity colours in the new colour system. | Delivered | RarityGlyph uses semantic rarity colours for stars and symbols in both appearances. |
| S-03 | Keep the back control visible while scrolling. | Delivered | Set detail uses the shared sticky header. |
| S-04 | Remove the duplicate card number beside the set or card caption everywhere. | Delivered | Shared card tiles keep the collector number on the artwork only. |
| S-05 | Display 18/100 rather than only 18 on card artwork. | Delivered, data-dependent | Shared card tiles append the official set total when the API provides it. |
Card detail
| ID | Requested behavior | Status | Delivery note |
|---|---|---|---|
| D-01 | Remove COTE NM/FR and show only the value. | Delivered | The headline is the exact selected market value or an explicit unavailable state. |
| D-02 | Open condition and language choices in the middle of the screen. | Delivered | Both use centered shared dialogs. |
| D-03 | On Gradé ?, ask for PSA, PCA, CCC or Collect'aura and a grade from 1 to 10. | Delivered | The centered grading dialog controls the selected M3 market. |
| D-04 | Update the displayed value after changing condition, language, company or grade. | Delivered, data-dependent | The selected market is queried; values depend on valuation-engine observations. |
| D-05 | Center the card name inside a band. | Delivered | A centered identity band sits below the hero. |
| D-06 | Show block and set below the card name rather than set and rarity. | Delivered | The identity metadata is series/block plus set. |
| D-07 | Make Ajouter à ma collection bold and more prominent, with a little shadow. | Delivered with approved deviation | The primary button is bold and visually prominent. Local elevation was removed because the validated surface system explicitly requires flat runtime screens. |
| D-08 | Remove the two-line paragraph below Indicateurs et marchés. | Delivered | The obsolete explanatory paragraph is removed. |
| D-09 | Rename Indicateurs et marchés to Sources du prix. | Delivered | The section uses the requested label. |
| D-10 | Add Cardmarket and eBay logos. | Delivered | Approved Cardmarket and eBay bitmap assets replace the former text placeholders. |
| D-11 | Show prices for every grade and grading company at the bottom. | Delivered, data-dependent | A company selector and grades 10 to 1 display returned valuations or unavailable values. |
| D-12 | Make price history work. | Delivered, data-dependent | Loading, chart, empty and unavailable states are wired to the price-history repository; observations must exist on the backend. |
Search
| ID | Requested behavior | Status | Delivery note |
|---|---|---|---|
| R-01 | Align search text with the search icon. | Delivered | Search uses the shared aligned field primitive. |
| R-02 | Keep the back control visible while scrolling. | Delivered | Search results use the shared sticky header. |
| R-03 | Restore missing card artwork. | Follow-up | Artwork coverage is a catalogue-data task; the app does not invent replacements. |
| R-04 | Display French cards and names in the French application. | Delivered, data-dependent | The app sends the French catalogue language; complete localization depends on ingest data. |
| R-05 | Show the full set name under a card instead of an abbreviation such as me3. | Delivered, data-dependent | Search results consume localized setName, falling back only when the API lacks it. |
| R-06 | Searching for a set name returns all cards in that set. | Delivered, data-dependent | Mobile sends the query; backend PR #366 adds set and series names to catalogue search. |
| R-07 | Searching for a collector number such as 18/100 finds the card. | Delivered, data-dependent | Backend PR #366 normalizes fraction queries and searches local collector IDs. |
Collection
| ID | Requested behavior | Status | Delivery note |
|---|---|---|---|
| C-01 | Integrate the new merged Collection screen. | Delivered | Portfolio, investment and collection navigation are consolidated. |
| C-02 | Apply canonical block ordering and use logos in Collection browsing. | Delivered, data-dependent | Collection now preserves the canonical catalogue order by default and offers an explicit way back after a custom sort. Authentic bloc logos still require catalogue assets or a dedicated field. |
| C-03 | Grey cards that are not owned when browsing a collection set. | Partially delivered | Unowned cards are visibly dimmed. True grayscale requires an additional native colour-matrix solution and is not fabricated with unsupported CSS. |
| C-04 | Rebuild collection sharing from the Claude Design reference and center it. | Delivered | PR #438 centered the dialog; mobile PR #447 makes Cards/Items selectable, with server-side visibility deployed through backend PR #370 and migration 0031. |
| C-05 | Opening a binder should open the collection rather than Parcourir les blocs. | Delivered | Binder empty actions now enter Collection context. |
Scan
| ID | Requested behavior | Status | Delivery note |
|---|---|---|---|
| SC-01 | Align the photo shutter with the Scan tab button. | Delivered | The shutter is geometrically centered independently of left and right controls. |
Tools
| ID | Requested behavior | Status | Delivery note |
|---|---|---|---|
| T-01 | Keep the coming-soon message permanently on the screen instead of in a dismissible popup. | Delivered | Tools renders an inline information surface. |
| T-02 | Remove the Compris button. | Delivered | There is no dismissal action. |
PRO subscription
| ID | Requested behavior | Status | Delivery note |
|---|---|---|---|
| P-01 | Rebuild the subscription screen from the supplied comparison and plan-selection reference. | Delivered, data-dependent | The comparison table and plan selector use real StoreKit/Google Play products. |
| P-02 | Offer annual and monthly choices with the real price and introductory offer. | Delivered, data-dependent | Options appear only when returned by the store. Debug builds show an honest unavailable state. |
| P-03 | Do not hardcode an unverified free-trial duration or price. | Delivered | Trial and price copy comes from the store product metadata. |
Add to collection
| ID | Requested behavior | Status | Delivery note |
|---|---|---|---|
| A-01 | Match the supplied sheet with printing selection, quantity and optional per-card purchase price. | Already delivered | The focused add-card sheet was delivered before PR #438 and is retained. |
| A-02 | Reuse condition and language selected on Card Detail. | Already delivered | The selected market context is passed into the collection flow. |
| A-03 | Offer only physical printings supported by catalogue metadata. | Already delivered, data-dependent | Printing choices are driven by validated catalogue variants. |
Complete chronological request register
The screen-by-screen tables above capture the first implementation wave. The following register records the additional foundation, reopened requirements, and final verification without weakening data dependencies.
Wave 1: design foundation and appearance (17 September 2026)
- Apply the approved typography, colour, component, iconography, interaction, shape, spacing, surface, and layout systems.
- Keep the deliberate removal of carmine from ordinary surfaces; do not reintroduce the former palette.
- Deliver full dark mode, with System, Light, and Dark choices under Profile > My account.
- After validating My account, return to the previous screen.
- Keep One Piece's contextual identity and scanner blue without changing the global palette.
- Remove the black modal veil while preserving outside-tap dismissal.
- Keep one shared iOS/Android interface; Android was visually validated because no iOS build was available.
Wave 2: Home, catalogue, card, collection, and commercial flows (21 September 2026)
Navigation and Home
- Open on Home; use
Home / Explorer / Scan / Tools / Collection. - Merge Collection and Wallet, surface portfolio value and evolution, and provide a See more action.
- Make owned-card artwork and recent scans the visual focus of dark mode.
- Provide direct search and camera access.
- Remove the
sur les achats renseignéshelper and colour the collection-preview and recent-scan icons blue. - Show factual dated catalogue releases until an editorial source is approved.
Explorer and catalogue
- Replace set abbreviations with real logos when supplied; use readable text otherwise.
- Add authentic block logos to the left of block names once the API exposes them; never reuse a set logo as a block logo.
- Follow canonical PokéCardex ordering for Pokémon and a deterministic main/deck/special ordering for One Piece.
- Keep only International visible until a complete Japanese catalogue exists, and exclude Japanese rows from International.
- Use French One Piece names only when a reliable translation exists.
- Use full-width block banners, valid block/set relationships, and scalable long-code fallbacks.
- Allow several blocks to remain open and restore expansion and scroll position after returning from a set.
- Deduplicate legacy One Piece aliases, preferring the most complete localized entry.
Set detail
- Sort rarities Common, Uncommon, Rare, then higher tiers; retain semantic rarity colours.
- Keep the back button sticky.
- Remove duplicate collector numbers beside titles and display full fractions such as
18/100on cards. - Hide the global
173/173 cardscount in Explorer; show progress only in Collection. - Keep Sealed disabled until products exist in the database.
- Expose Masterset physical variants only when the catalogue supplies them.
Card detail and add-to-collection
- Show and center only the selected price; remove
COTE NM/FR. - Open Condition, Language, and Grading selectors in centered dialogs.
- Re-query prices after condition, language, grading company, or grade changes; never invent prices.
- Offer PSA, PCA, CCC, and Collect'aura grades 1-10.
- Add circular treatments around Alert and Favourite actions.
- Center the card name in a band and show block then set beneath it.
- Make Add to collection bold and prominent within the approved flat-surface system.
- Show the full collector fraction in the add dialog.
- Rename the market section to Price sources, remove its obsolete paragraph, and use approved Cardmarket/eBay logos.
- Space the grading section and show all available company/grade valuations.
- Wire price-history loading, chart, empty, and unavailable states to real observations.
- In the add sheet, select available Normal/Reverse/Holo/Poké Ball/Master Ball printings, quantity, and optional per-card purchase price; reuse the selected condition and language.
Search
- Align text and search icons everywhere and keep the results back button sticky.
- Use French artwork/names and full localized set names when authoritative data exists.
- Fall back to available local artwork without fabricating media.
- Search by set name and full collector fraction such as
18/100.
Collection, sharing, and binders
- Integrate the merged Collection/Wallet screen and preserve canonical catalogue ordering after custom sorts.
- Use real block logos when available and a neutral symbol otherwise.
- Dim unowned cards, show owned/total counts, and add Owned/Missing filters.
- Center the sharing dialog and make Cards/Items scopes affect the public API; keep unsupported Binders/Wishlist scopes disabled.
- Display localized Pokémon names when supplied.
- Open binders in Collection context.
- Add a
+action to existing binders so users can select already-owned cards and persist the selection.
Scan, Tools, and PRO
- Align the camera shutter with the Scan navigation action.
- Replace the dismissible Tools popup with a centered permanent inline message and remove the acknowledgement button.
- Rebuild PRO from the approved comparison and plan-selection reference.
- Offer annual/monthly products, prices, and trials only from StoreKit/Google Play metadata.
Wave 3: second Nini/Lulu iteration (22 September 2026)
The second review reopened incomplete items rather than changing direction. It explicitly reconfirmed global search alignment, Home helper/icon details, canonical catalogue ordering, International-only scope, wider block banners, multiple open blocks, rarity colours, Explorer count removal, card-price centering, action circles, CTA prominence, marketplace logos, grading spacing, complete collector numbers, search localization, Collection ownership counts and filters, the real sharing flow, binder card selection, centered Tools content, and the exact store-backed PRO screen. These items were addressed across mobile PRs #440-#453; data gaps remain identified as data work.
Wave 4: final verification and catalogue cleanup (23 September 2026)
- Normalize remaining technical labels and malformed spacing across screens.
- Stabilize the order of Mega Evolution Energy and Promo subsets.
- Do not expose raw database identifiers on Home; preserve the underlying ownership record.
- Scale long textual set codes when no official logo exists.
- Review Home, Pokémon/One Piece Explorer, Collection, Tools, set detail, Card Detail, sharing, binders, Scan, and PRO on an Android release build.
- Promote the validated tree through PR #454 and preserve rollback tag
staging-pre-main-ui-feedback-final-2026-09-23.
Backend and content actions
Completed: localized set-name and collector-number search, safe French One Piece translation import without canonical-card deletion, strict French filtering, public share scopes through migration 0031, and approved Cardmarket/eBay assets.
Still required from authoritative sources:
- authentic block logos and missing set logos/card artwork;
- missing French Pokémon and One Piece names;
- dated price-history observations;
- graded valuations by company and grade;
- a populated sealed-product source;
- an approved editorial feed;
- a complete validated Japanese catalogue.
Validation
- PRs #438, #440-#445, and #447-#453 merged through
staging; PR #454 promoted the validated result tomain. - Lint and typecheck passed; 199 active Jest suites and 2,034 tests passed, with 2 suites and 11 tests intentionally skipped.
- The Android release APK was built, installed, and visually reviewed on a Pixel 9 Pro emulator.
stagingandmainhad identical trees after promotion.- Rollback tag:
staging-pre-main-ui-feedback-final-2026-09-23.
Wave 5: Nihaw review from 24 September 2026
Nihaw reports that ergonomics are substantially better and close to the target, then requests the finishing pass below. John Kael is the product owner receiving this review.
| ID | Nihaw request | Status on 2026-09-24 |
|---|---|---|
| N5-G-01 | Vertically align text and the magnifier in every search field. | Delivered by mobile PR #457 in the shared component. |
| N5-H-01 | Show a global portfolio loss in red instead of green. | Delivered by mobile PR #457. |
| N5-H-02 | Remove the ownership check from the top-left of cards in the Home preview. | Delivered by mobile PR #457, scoped to that preview. |
| N5-E-01 | Add OP15, OP16, OP17, ST18 and ST29-ST36 when cards exist in source data. | Reversible ST18, ST22 and ST29 support is delivered by backend PR #378; OP15-OP17 exist in the canonical source. VPS deployment and import are still required before they appear. No verified source supplies ST30-ST36, so they will not be fabricated. |
| N5-E-02 | Use official One Piece set logos in Explorer and set detail. | Content dependency: the current One Piece API supplies no set logos. No substitute logo will be fabricated. |
| N5-E-03 | Complete missing French One Piece cards. | The importer in backend PR #378 adds cards and memberships published by the official French source without moving or deleting canonical cards. VPS deployment and import remain required. |
| N5-E-04 | Display an authentic block logo instead of the four-square symbol. | Delivered by backend PR #379 and mobile PR #459: controlled first-party mirroring of TCGdex series logos, a dedicated API field, and UI display with a neutral fallback. No arbitrary set logo is reused. |
| N5-E-05 | Add missing logos for 30th Anniversary, Black Bolt, Base Set, Promo and Energy sets. | Partly available from TCGdex; source gaps require an approved authentic asset. |
| N5-E-06 | Hide the listed companion sets and attach their cards to the parent set without deleting cards. | Delivered by backend PR #377 as a reversible read projection with no migration or deletion. |
| N5-E-07 | Rename Triomphant to Triomphe. | Delivered by mobile PR #458. |
| N5-E-08 | Rename the Promos block to Ligue Pokémon. | Delivered by mobile PR #458. |
| N5-S-01 | Match PokéCardex rarity order, symbols and colours. | Delivered by mobile PR #458 for the current Pokémon rarity taxonomy. |
| N5-R-01 | Complete missing card artwork. | Catalogue dependency: media must come from an authentic, approved source. |
| N5-R-02 | Present French cards and names in the French application. | Delivered when localization exists; source gaps remain tracked by N5-E-03. |
| N5-C-01 | Use the full set total, for example 2/244 for Destined Rivals. | Locked by mobile PR #458; the VPS already exposes 244 cards for sv10. |
| N5-C-02 | Simplify sharing: select scopes, then Copy or Share creates the link and performs the action. | Delivered by mobile PR #457; the former publication panel is removed. |
| N5-C-03 | In Pokémon, add Owned/Missing filters, remove · —, and show the full set name. | Delivered by mobile PR #457. |
| N5-C-04 | In a binder, add search, put selected cards first, and keep Save visible. | Delivered by mobile PR #457. |
| N5-P-01 | Match the approved PRO screen precisely without inventing prices, discounts or trial duration. | Completed by mobile PR #459, including the trial-offer visual state. The panel, products, prices and terms remain driven exclusively by the stores. |
Companion sets named in Nihaw's feedback
Request N5-E-06 explicitly covers the following entries. They should be hidden as standalone catalogue sets and their cards shown under the parent set, without deleting stored cards, identifiers or holdings:
- Collection Classique 30e Anniversaire;
- Zénith Suprême Galerie Galaroise;
- Tempête Argentée Galerie de Dresseurs;
- Origine Perdue Galerie de Dresseurs;
- Astres Radieux Galerie de Dresseurs;
- Stars Étincelantes Galerie de Dresseurs;
- Célébrations Collection Classique;
- Destinées Radieuses Coffret Étincelant;
- Destinées Occultes Coffret Étincelant;
- carte alternative A jaune;
- Radiant Collection;
- EX Forces Cachées Collection Zarbi;
- W Promotional.
The thirteen technical mappings live in catalogSetAliases.ts. The French labels above preserve the product feedback; source identifiers, not similar-looking names, determine the actual parent mapping.
Catalogue safety rule
Hiding companion sets never deletes database data. The API aggregates their cards under the parent at read time while retaining original identifiers, cards, localizations, prices and holdings. If a parent set is absent, the companion remains visible rather than losing its content.
Wave 5 technical validation
- Mobile PR #457: search alignment, portfolio loss, Home preview, Pokémon filters, binders, and sharing.
- Mobile PR #458: catalogue labels, rarities, and full set denominator.
- Backend PR #377: reversible companion-to-parent projection.
- Backend PR #378: One Piece multi-set memberships and additive French import, without deleting or moving canonical cards.
- Backend PR #379 and mobile PR #459: authentic TCGdex block logos and PRO screen finishing.
- The complete mobile and backend suites passed locally. GitHub CI runs the Docker integration tests when Docker Desktop is unavailable locally.
Wave 6: Spleen review from 24 September 2026
This review complements Nihaw's. The PRs below merged into staging on 24 September 2026. Merged does not mean deployed to the VPS or tested on a device.
| ID | Spleen feedback | Overlap / status on 2026-09-24 |
|---|---|---|
| S6-H-01 | On launch, the card preview briefly says there are no cards. | Loading precedes the empty state since #461. Mobile PR #473 also distinguishes collection/catalogue read errors from a genuinely empty collection and offers Retry. |
| S6-H-02 | Enlarge the Card preview, Recent scans and Latest releases section headings per the typography rules. | New: 18 px section headings in mobile PR #461; no palette changes. |
| S6-H-03 | Back from a Scan opened on Home should return to Home, not Explorer. | New: origin-tab navigation in mobile PR #461. |
| S6-H-04 | Add Back to Profile and avoid unnecessary bounce/scroll when content fits. | New: Back and disabled bounce in mobile PR #461. Scrolling remains available when content actually overflows. |
| S6-H-05 | Avoid Portfolio > See more > Evolution and the apparent duplicate entry in Collection. | New: detailed history, range controls and performances move into Portfolio in mobile PR #467. Home and Collection still access the same Portfolio; the former route remains compatible. |
| S6-H-06 | Card preview heading should open Collection; Latest releases should open Explorer. | New: heading navigation in mobile PR #461. |
| S6-E-01 | Provide Expand all / Collapse all for Explorer blocks without arbitrarily closing others. | New: global controls in mobile PR #463; independent expansion already existed. |
| S6-E-02 | Replace one-tap TCG switching with an explicit choice in Explorer and Scan. | New: shared Pokémon/One Piece picker in mobile PR #463; Scan preference remains saved. |
| S6-E-03 | International appears inert and Explorer only shows French. | Product clarification: International is the shared catalogue, not a language switch. It is no longer a fake button (#463); FR/EN names follow account language when translations exist. A complete Japanese catalogue remains a data dependency. |
| S6-E-04 | Search should recognize a Pokémon's English name too. | New: backend PR #381 matches canonical names in free-text search without replacing localized display names. Connected-app effect requires backend merge and deployment. |
| S6-E-05 | Disable autocorrect in search. | New: shared search component changed in mobile PR #461. |
| S6-T-01 | Use the same Tools title size as other tab screens. | New: shared title role aligned in mobile PR #461. |
| S6-C-01 | Returning to Collection from another tab should show its root screen. | New: tab stack resets on reselection in mobile PR #461. |
| S6-D-01 | Show Japanese cards' names in the app language. | Overlaps N5-R-02. Missing translations will not be fabricated and holdings will not be deleted. Source/data review and device verification remain necessary. |
| S6-D-02 | Explorer sometimes shows catalog HTTP 429 for /sets?lang=fr. | Mobile PR #465 deduplicates set requests and caches valid results for five minutes. Read-only VPS inspection found 17,252 responses with 429 over six hours: 17,012 on /cards/:id and 224 on /sets, concentrated in 12 minutes from one source. Proxy trust is active; the precise origin of the burst remains unproven. Mobile PR #469 replaces collection per-card requests with batches of 100. #471 does the same for wishlist and binders; #473 also prevents Home from mistaking a catalogue error for an empty collection. A cold-start 429 remains possible. |
| S6-D-03 | Remove the white background behind set logos and enlarge rarity icons. | New: transparent real logos and larger rarity glyph/touch area in mobile PR #465. Missing official logos remain tracked under N5-E-05. |
Mobile PRs #461, #463, #465, #467, #469, #471, #473 and backend PR #381 merged into staging. Local and CI test suites for the merged PRs pass; Maestro could not run without an emulator. Missing translation imports, 429 burst monitoring and backend deployment remain separate. This wave includes no VPS deployment or colour changes.
Consolidated status after the 24 September review
| Scope | Delivered in code | Still to verify or supply |
|---|---|---|
| Nihaw's flows | Search alignment, visible portfolio losses, badge-free card preview, simplified sharing, Pokémon filters, binders and PRO screen: #457-#459. | Device review of the PRO layout. Missing One Piece and Pokémon logos and card artwork require authentic sources (N5-E-02, N5-E-05, N5-R-01). |
| Spleen's flows | Home, Scan/Profile back navigation, Portfolio, TCG picker, Explorer expansion, autocorrect and legibility: #461, #463, #465, #467. Collection card batching: #469. Wishlist/binder error states: #471 merged. Home preview error state: #473 merged. | English-name search: #381 merged but not deployed. Japanese names in French require missing translations; holdings remain intact (S6-D-01). A first catalogue request may still receive 429 (S6-D-02). |
| Catalogue | Reversible companion-set projection and additive One Piece support: backend #377-#379. | VPS import and deployment need separate validation; unverified series are not fabricated. This UI pass makes no direct database changes. |
The original requests and both review waves remain above with their IDs. A PR merged into staging is not proof of device behavior or backend deployment. PR #471 preserves saved IDs and their order; catalogue unavailability does not delete wishes or cards assigned to a binder.
Fix discovered while reviewing Collection
This was not a request made by Nihaw or Spleen: checking their flows revealed that "My binders" could say "No binders" after a local read failure. Mobile PR #475, merged into staging, distinguishes that error from a genuinely empty list and offers Retry. It hides creation until the read succeeds, without modifying saved binders. Device review is still outstanding.
The same audit found a false empty state in Wallet's card/item lists when the ownership read fails. The dedicated owned-card screen instead exposed a raw technical error with no recovery. Mobile PR #477, merged into staging, gives these flows a retryable unavailable state. Genuine empty states remain unchanged and no holdings are modified. This is another discovered fix, not a quote from either collaborator.
The Collection summary could also show unread card or item counts as 0. Mobile PR #479, merged into staging, keeps unread counts unknown and distinguishes an in-progress valuation from an unavailable one, with Retry. It retains confirmed counts and does not claim an unverified gain. This is a consistency fix discovered during review, not a new request attributed to Nihaw or Spleen.
The Wallet sales recap also showed 0 before a local read completed, while sales history could say "No sales" after a read failure. Mobile PR #481, merged into staging, separates loading, failure, and a genuinely empty history, with Retry after failure. No sale is changed. This is another fix discovered during review, not a direct collaborator request. Device QA is still pending.
Wave 7: Nihaw's device screenshots and renewed checks (24 September 2026)
This review explicitly reopens items marked as delivered above: screenshots from an installed app take precedence over source-level assertions. The first screenshot shows the defects; the second is a reference for ownership filters and set progress. Nothing below is considered device-validated until the corrected build is captured again.
| Request | Actual status |
|---|---|
| Search glyph and text are misaligned | Reopened. iOS optical adjustment in mobile PR #484, under validation; device visual QA remains. |
| Two-line card names shift prices | Reopened. Captions restricted to one truncated line in #484; device QA remains. |
| Home wallet change sits below its value | Reopened. Value and change share a row in #484, wrapping only if space is insufficient. |
| Species owned/missing filters sit among rarities | Reopened. #484 places them in a separate row using the Collection set control. |
Collection progress says 2/182 instead of 2/244 | Reopened. #484 uses the full loaded set total for progress; 182 remains the printed denominator on cards. |
| Missing One Piece OP15-OP17, ST18, ST29-ST36 and French cards | Backend staging was deployed on 24 September. ST-18 and ST-29 were imported from the French mirror: 46 memberships, 40 cards added, no deletions. OP15-OP17 and ST30-ST36 already exist in the English database but remain hidden in French without translations. The official French catalogue publishes them; the current mirror importer does not yet retrieve those entries. |
| Missing One Piece, block, 30th Anniversary, Night Black, Base Set, Promo and Energy logos | Partial. Check media actually exposed by the API; authentic-source gaps remain open. Do not substitute a series logo for a block logo. |
| Hide the listed subseries while retaining all cards | Reversible backend projection deployed on 24 September. The API no longer lists 30th-c separately and returns 188 cards in 30th; the original 39,737 cards remain, plus 40 cards from the later One Piece import. Installed-app verification is still needed. |
| PokéCardex-exact rarity symbols and colours | Reopened by Nihaw: compare one set against the source and the installed app before calling this delivered. |
| Missing images and English cards in French search | Still source-media and translation dependent; check the import and preserve canonical cards. |
| PRO screen matching the approved mock-up | Reopened. PR #459 is insufficient according to Nihaw; dedicated visual review and adjustment needed without inventing prices or trials. |
PR #484 addresses only the first five interface gaps. It changes no palette, prices, or catalogue data. Maestro and iOS visual QA were not run locally. On an Android emulator, Home loaded from this branch with the search glyph aligned to its text. The emulator had no holdings, so caption truncation, the wallet change and Collection filters still need data-backed visual checks. The PRO comparison rendered, but Google Play returned no products in that environment; offer selection remains unverified.
The VPS was backed up before additive migration 0032 and the API restart from backend staging (f380196b). Health checks pass and database totals are unchanged: 39,737 cards and 424 sets. Importing new One Piece packs and their artwork remains separate from this deployment. After the targeted ST-18/ST-29 import, the database holds 39,777 cards, still 424 sets, and 46 pack memberships. The two packs are visible in French with 15 and 31 cards. Importing the other packs from the official site remains to be implemented.
Local verification on 26 September 2026
Mobile PRs #494 through #497 are merged into staging. #494 prefers a first-party French image mirror only when it matches the exact card; the VPS media backfill is separate. #495 computes the annual PRO plan's monthly equivalent only from a store-confirmed annual billing period and numeric EUR price. #496 gives authentic set logos more room in Explorer without enlarging code fallbacks where no logo exists. #497 distinguishes browsable cards from the total reported by the API: OP-16 now reads 151/155 cartes au catalogue, and Collection progress uses the larger known total. No card or holding was changed.
A local x86_64 Android APK was built and installed on a Pixel 9 Pro emulator, without an online Expo build. Screenshots confirm search alignment on Home, Explorer and set detail; OP-15/OP-16 logos in Explorer; Scan back navigation to Home; and the OP-16 count after #497. PRO renders, but a sideloaded APK receives no Google Play offers. Prices, discounts, trials and purchases still need validation through Play distribution and iOS TestFlight. Flows with actual holdings and the iOS optical search alignment also need phone QA.
Missing authentic logos and artwork, English-only or missing cards, and rarities requiring comparison with PokéCardex are not marked fixed by these captures. OP-16 still displays source art watermarked SAMPLE in English, and a four-card discrepancy between 151 browsable results and the API's reported total of 155, without implying any database deletion. Exact PRO offer behavior still depends on store products and terms. Local Jest reports 2,107 passing tests and one pre-existing assertion demanding Expo 54 while the project declares Expo 57. Expo was not changed.
Mobile PR #498 is also merged into staging. It maps the English Special Illustration Rare label to the two gold stars already used for its French equivalent. Rarity order and palette are unchanged; this does not validate every rarity against PokéCardex. A local ARM64 APK was built from staging after #498, but it is signed with the repository's development key. Do not uninstall an existing Play-distributed app to install it on a phone holding data.
Mobile PR #499, merged into staging, fixes a state found during Android review: Home incorrectly blamed the active language when saved cards had no displayable catalogue details. The message now says details are unavailable and offers Retry. Sealed items alone no longer count as cards in this preview. The local ARM64 APK was rebuilt from merged staging commit be56454; it remains development-signed and does not replace a Play or TestFlight build.
Follow-up status on 28 September 2026
The first five interface corrections from Wave 7 were merged in mobile PR #484. Code-level tests do not replace iOS/TestFlight checks with a populated collection: optical search alignment, name truncation, wallet change placement and filters still need confirmation on a device.
Nihaw's complete request list is preserved above, but documented does not mean fixed. Missing French cards and media, some authentic logos, complete rarity parity with PokéCardex, and the PRO screen and purchase flow in the stores remain open or only partly verified. Hiding a companion set must never delete a card or holding.
The Expo 57 observation from 26 September is historical: the project has since returned to Expo 54. Mobile PR #506 restored the react-native-svg version expected by that SDK; local tests pass, but this is neither an iOS build nor visual validation of Nihaw's feedback.