Appearance
Delivered
Frontend PR #643 prepares Cards/Sealed navigation, direct Pokemon/One Piece controls, horizontal International/Japan flags, compact search, and sealed Type/Series views. The existing live card catalogue remains available. The running sealed catalogue is empty pending backend integration. Six product fixtures are reserved for unit tests and are not imported by application source.
The latest teammate feedback is included: Type/All sorts by descending release date, with undated fixtures last. Series products prioritize ETB, Display, then Booster. That priority is editorial mock data, not a measured popularity score. The earlier vertical flag arrangement is superseded by horizontal choices.
Backend Boundary
The frontend structure is prepared without runtime sample products. No sealed API, backend query contract, pricing or collection writes are introduced. All sealed scopes show an upcoming-catalogue empty state. Japanese cards show an unavailable state rather than International results. No VPS changes or remote service restarts were made.
Real sealed ingestion, API filtering/pagination, popularity semantics, block/series logos, real product details and add-to-collection behavior remain integration work. The small fixture grid must not be connected to an unbounded catalogue as-is.
Verification
- Lint and TypeScript pass.
- Jest: 245 suites and 2373 tests pass; 2 suites / 11 tests remain skipped.
- Test-first failures observed for filtering/grouping, release ordering, series priority and horizontal controls before their implementations.
- Local Android x86_64 release APK freshly bundled, built, installed and launched.
- Native checks: three columns, 393 dp / 360 dp dark layout, release order, ETB/Display/Booster series order, accent-insensitive search, preview details, Android back, game/region empty states. Native inspection found oversized intrinsic image heights; explicit image frames fixed the issue and were retested.
npm run e2ecould not run because Maestro is not installed; a dedicated.maestro/explorer-sealed-preview.yamlis provided, not reported as passing.- iOS and native light appearance were not visually verified here. Native mocks in Jest do not replace those checks.
Personal APKs, generated Android resources and local screenshots are uncommitted. The emulator's temporary storage-reserve adjustment was restored after installation, and its dimensions were restored after narrow-screen verification. App data was not cleared. Unrelated edits in the primary checkout were left untouched.
Delivery
Seven frontend commits on feature/explorer-sealed-preview, based on staging. PR #643 targets staging. No merge or production deployment is included.
October 10 Follow-Up
The user requested distinct visual selection levels without changing the layout: Cards/Sealed retains the strong fill; game selection uses a subtle surface and outline; type filters use an unfilled surface and a reserved check indicator. Existing theme roles and accessible selected/checked states are retained. Focused tests first reproduced the shared strong fill, then verified the new hierarchy in light/dark appearances. Lint, typecheck and 187 focused tests pass. The rebuilt Android APK was installed and the Display filter verified against its two expected fixtures; the new dark appearance was inspected on-device. The app remains open on Explorer/Sealed. Maestro and iOS remain unverified.
Compact Header Follow-Up
Explorer now opts into a compact account bar; all other screens retain the default header geometry. Reduced spacer bands move the first product from 411 dp to 343 dp on the Android emulator, gaining 68 dp without shrinking text. Cards/Sealed aligns with the full catalogue width. International and Japan use identical 32-point rounded frames within 44-point touch targets, replacing the circular globe and unframed Japanese flag.
Test-first checks cover the opt-in header, unchanged default and Back callback, aligned mode row, flag geometry and compact search/filter spacing. Lint, typecheck and the full Jest suite pass. A fresh local Android build was installed; dark screenshots were inspected at 393 dp and 360 dp, and region switching was verified. Emulator size and storage reserve were restored. No backend change, merge or production deployment was performed.
Content-Sized Tile Captions
Remove the sealed grid's 76-point minimum caption height. Captions now size to their text; tiles stretch only to the tallest content in the current row. Images, fonts and series rows remain unchanged. A regression test failed on the old minimum before the fix, then passed. A freshly rebuilt personal APK was installed and inspected at 393 dp and 360 dp: short-caption rows gain 30 dp at the normal width, while two-line names expand correctly at the narrow width. The app remains open on Explorer/Sealed; generated resources and the APK stay outside Git.
Catalogue Composition Proposal
The user requested a less boxed-in composition while preserving appearance settings. Plain Cards/Sealed tabs now establish the primary navigation, and Pokemon/One Piece shares one subtle segmented track. The shared primitive's default appearance is unchanged. Secondary Type/Series choices no longer span the entire screen with another underline. Blocks and series reuse validated logos from the already-loaded card catalogue, using unframed rows and separators with a neutral fallback if artwork is unavailable. This supersedes the earlier note about preview logos being absent; it does not establish a sealed API contract.
Test-first coverage verifies both palettes of the subtle control, default-control regression behavior, mode tabs, flat series rows and scoped artwork lookup. Lint, typecheck and the full suite pass. Android screenshots cover both light and dark appearances selected through Account settings, type/series views, and a 360-point dark viewport. Game switching and product preview open/close were checked manually. The dark preference and emulator dimensions were restored; the proposal remains open in the emulator. Maestro is unavailable and iOS was not tested. PR #643 is updated but not merged, pending user visual feedback.
Runtime Fixture Isolation
The six sample products now live in __mocks__/sealedExplorerProducts.ts. Filtering accepts explicitly supplied products and defaults to an empty catalogue. Application source no longer imports sample products or their static images. A regression test reproduced the old implicit six-product catalogue before the fix. The focused suite passes (36 tests), as do lint and typecheck. The Maestro flow now checks the empty catalogue instead of fixture products; execution remains blocked by the missing Maestro executable. A freshly rebuilt APK was installed and native inspection confirmed the empty title and absence of both the product grid and demonstration label. No backend changes were made.