TCGems · redesign · working file

TCGems Redesign

Proposed screens, one at a time, built on the design direction. Left is today's app from the simulator; middle is the proposal, which scrolls; right lists what changed and why. Prices and card facts come from the app's own data for that card unless marked otherwise.

01

Card result

/cardResult · after a scanProposal v1
Now
Current card result screen for Dark Blastoise
Proposed · scroll inside
9:41
Dark Blastoise card
Dark Blastoise
LC · 4/110 · EN
Legendary Collection · 2002
Rare HoloStage 2Water
Wrong card?
Avg market price · all sourcesLive
$46.94
— No change · last 30 days
Normal$46.94 Holo$274.99 Reverse  Jumbo 
Compare marketplaces3 sources ›

Price history Normal · USD

CardmarketTCGplayer
15 Sep$60.00 · no change14 Oct
7D1M3M1Y

Where to buy

Prices are observed marketplace data, not an appraisal or offer. We may earn a commission from marketplace links.

Battle profile

70HP
×2Weakness
—Resist.
Retreat

Attacks

Hydrocannon30+

Does 30 damage plus 20 more damage for each Water Energy attached to Dark Blastoise but not used to pay for this attack's Energy cost.

Rocket Tackle40

Dark Blastoise does 10 damage to itself. Flip a coin. If heads, prevent all damage done to Dark Blastoise during your opponent's next turn.

Details

Number
4/110
Rarity
Rare Holo
Evolves from
Dark Wartortle
Pokédex
#009
Released
24 May 2002
Report wrong card data
Add to collection

What changed

  • The price comes first. The current screen spends the first viewport on a 290pt card image and a three-button variant grid; the price only starts at the bottom edge. Now name, set, number and price all sit above the fold.
  • Printings live inside the price slab, each showing its own price, because switching printing changes the price. Normal $46.94 and Holo $274.99 in one glance tells a collector which copy they need to check for.
  • Every number names its source. Today the headline says $46.94 while the history chart below shows Cardmarket flat at $60.00, and neither says where it comes from. The slab labels its figure as an average across sources, and the chart gets a source switch.
  • Change is stated in words and numbers ("No change · last 30 days") instead of a lone trend icon.
  • Live vs local stays visible as a small status dot, which keeps the trust distinction from the screen's rules without an orange badge competing with the CTA.
  • One primary action, always reachable: a sticky "Add to collection" bar with Wishlist next to it. Orange appears once on the screen.
  • "Wrong card?" sits next to the identification, where a scan mistake is noticed, and opens the existing report form.
  • Card image opens full screen on tap. Header shows where the card came from ("Scanned just now", "From Chaos Rising", "Search result").
  • Card text sections become compact: a four-up battle profile, energy dots, one details list with set and artist as links (both already navigate today).

Data checks

  • No API change needed for the segment: /cards/:id/prices already returns all variants in one response (data.variants, read in PokemonPriceQueries.ts).
  • Jumbo and Reverse show no price because none was loaded in this session.
Data: scan record base6-4 on the simulator, average price $46.94 (live), Holo $274.99 from the Pricing screen. Price history from the app: Cardmarket, flat at $60.00 from 15 Sep to 14 Oct 2026. Whether TCGplayer history exists for this card is unchecked.
02

Pricing

/cardPricing · HoloProposal v1
Now
Current pricing screen
Proposed · scroll inside
9:41
Dark Blastoise
LC · 4/110 · Holo
Live pricesUngraded (raw)
TCGplayer market priceLive
$274.99
Range of current listings
Low$125.00 Market$274.99 High$399.98

TCGplayer Holo · USD

Market$274.99
Low$125.00
Mid$151.75
High$399.98
Direct lowNo listing
Buy on TCGplayer

What these mean

Market is what this printing recently sold for.
Low, Mid, High are current listing prices.
Ungraded (raw) means a card not sealed in a grading slab.
Live means fetched just now, not from the on-device cache.
Prices are observed marketplace data, not an appraisal or offer. We may earn a commission from marketplace links.

What changed

  • The screen says which card it's about. Today the header is a back arrow and two unlabeled chips, with no card name.
  • A range bar shows the spread from low to high listings with the market price marked, so "is $274.99 a good price?" reads in one look. Mid ($151.75) sits as a faint tick near the low end, which shows the market price sits well above the mid listing price.
  • "RAW" becomes "Ungraded (raw)" and both status chips are explained at the bottom in plain words.
  • "Direct low –" becomes "No listing" instead of a dash.
  • The table keeps all six figures and the buy link. The table head is now a section title, so the TCGplayer logo image goes.

Open questions

  • Does the API return Cardmarket figures for this card? The current screen only shows TCGplayer, so Cardmarket and eBay appear as links only.
  • 7-day and 30-day averages exist in the code but weren't on screen for this card. Where are they shown today?
Data: Pricing screen for base6-4, variant holofoil, captured from the simulator: market and average $274.99, low $125.00, mid $151.75, high $399.98, no direct low. The disclaimer wording is a placeholder for the app's existing legal text.
03

Collection

/(tabs)/collection · new homeProposal v1
Now
Current collections tab
Proposed · scroll inside
9:41
Collection
Owned · 4 cardsLive
$94.45
▼ $0.09 (0.1%) · 7 days
7D1M3M1Y

Lists 2

My Cards4 cards · owned
$94.45▼ 0.1%
Wishlist6 cards · to buy
$1,460.01to complete
New list

Most valuable owned

Dark Blastoise ×2LC · 4/110 · Normal
$93.88$46.94 each
Lurantis exPBL · 004/084 · Holo
$0.41▲ $0.02
PoltchageistPBL · 005/084 · Normal
$0.16—
Collection Browse Scan Wishlist Settings

What changed

  • Opens on value. The total and its 7-day chart are the first thing you see. Today the chart is two taps deep inside one collection.
  • Owned and wanted are separated. The headline counts owned lists only; Wishlist shows the cost to complete instead of a change, because it isn't money you have.
  • Rows instead of 2×2 tiles. Each list shows count, value and change. "Create new" becomes a slim dashed row rather than a quarter of the screen.
  • Most valuable cards answer "what's my best card" without opening anything.
Real: My Cards $94.45, ▼ $0.09 over 7 days, Dark Blastoise $46.94 each. Example values: Wishlist total and the Lurantis ex and Poltchageist prices.
04

Browse

/(tabs)/browse · replaces SearchProposal v1
Now
Current search tab
Proposed · scroll inside
9:41
Browse
All setsCollectingRecentFavorites
Mega Evolution8 sets · 1,066 cards
Pitch Black
PBL · 1202/120
Chaos Rising
CRI · 1220/122
Perfect Order
POR · 1240/124
Ascended Heroes
ASC · 2950/295
Phantasmal Flames
PFL · 1300/130
Mega Evolution
MEG · 1880/188
Other22 sets · 432 cards
Legendary Collection
LC · 1101/110
Collection Browse Scan Wishlist Settings

What changed

  • One search field for cards, sets, numbers and artists. Today there are two stacked fields ("Search cards" and "Filter sets by name or code") plus a separate card-search screen.
  • Set rows show your progress (2/120) with a thin bar, so Browse doubles as a completion tracker. The data already exists in catalogue:owned_cards_by_set.
  • Set code in mono (PBL · 120) reads like the code printed on the card.
  • "Collecting" filter shows sets you own at least one card from.
  • Series header gives set and card counts in words; today it says "Total 1066" without a unit.
  • Pokémon TCG Pocket sets, which are digital-only, should get their own filter or be hidden in a physical-card scanner. That's a question for you.
Real: set names, codes, card counts, series totals. Owned counts (2/120, 1/110) come from the cards in your collections.
05

Set detail

/setDetail · Legendary CollectionProposal v1
Now
Current set detail
Proposed · scroll inside
9:41
Legendary Collection
LC · 110 cards · EN · 24 May 2002
Complete set$2,948sum of market prices
You own1/110
PriceNumberRarityMissingFilter
Charizard
Charizard
3/110$410.75
Dark Dragonite
Dark Dragonite
5/110$52.30
Dark Blastoise×2
Dark Blastoise
4/110$46.94
Alakazam
Alakazam
1/110$38.50
Articuno
Articuno
2/110$24.10
Dark Persian
Dark Persian
6/110$14.80

What changed

  • A price on every tile, sorted by price by default. The first thing a collector wants from a set is which cards matter. Today the grid has no prices and sorts by number.
  • Complete-set value and your progress replace the "Avg price" box and the empty progress ring.
  • Owned cards are marked (×2 on Dark Blastoise). A "Missing" sort turns the set into a shopping list.
  • One corner "+" per tile replaces the full-width "+ Collect" pill and the star.
  • Four outlined dropdowns (Category, Type, Finish, Rarity) collapse into one Filter sheet; sort options are visible chips.

Backend

  • Tile prices need a price field in /sets/:id/cards?view=summary. Complete-set value needs a sum per set; both can be cached server-side.
Real: set name, code, size, release date, card numbers, Charizard $410.75 and Dark Blastoise $46.94 (from the scan test). Example values: Dark Dragonite, Alakazam, Articuno, Dark Persian prices and the complete-set total.
06

Scan

/(tabs)/scanProposal v2
Now
Current scan screen after a scan
Proposed
9:41
9
This batch$504.63
Dark BlastoiseLC · 4/110 · Normal ▾
$46.94✓ Matched
1x2x
Organize 3

v2 · after your review

  • Top bar unchanged: Close, Info, the admin Settings gear (debug builds only, as today) and the free-scan pill in its current "⚡ 9" form.
  • Trash is gone. A wrong card is removed on the Organize screen.
  • Flash moves down into the trash slot, bottom left, with Gallery right next to it. Both are thumb-reachable and no longer share the top bar with the free-scan pill.
  • Zoom 1x / 2x stays where it is, above the shutter.
  • Kept from v1: the floating match card (name, set, number, printing, price, "Matched"), the corner-bracket frame with the dimmed surround, "This batch" running total, and the Organize button with a card stack and count.

Ties to bugs

  • B1 (wrong card on a misread number): show "Check this match" instead of "Matched" when the name read by the model and the matched card's name differ.
  • B4: the free-scan pill must update after each scan.
  • B2: touches stop working after a gallery scan; fix before this ships.
Real: Dark Blastoise $46.94; Charizard $410.75 from the misidentified scan. Example value: the third batch card ($46.94) that makes up the $504.63 total.
07

Review scans

/scannedCardsProposal v1
Now
Current scanned cards review
Proposed · scroll inside
9:41
Batch value$686.56
3 cards
4 copies
Dark BlastoiseLC · 4/110
$274.99Holo · NM
Printing
Normal$46.94Holo$274.99Reverse—
Condition
NMLPMPHPDMG
−1+
CharizardLC · 3/110
$410.75Holo · NM
Condition
NMLPMPHPDMG
−1+
Lurantis exPBL · 004/084
$0.822 × $0.41
Condition
NMLPMPHPDMG
−2+
Add toMy Cards
Add 4 copies · $686.56

What changed

  • Printing is a real choice with each printing's price, which fixes B3: today "Type" is a static label stuck on Normal, so a holo pull is filed at a sixth of its price.
  • Condition is back (NM to DMG), as the screen's spec requires. When a card has a single printing the printing row disappears, as for Charizard in this example.
  • Destination is chosen on the screen, not in a sheet after pressing the button, and the button states the result: "Add 4 copies · $686.56".
  • The batch value moves into the dark slab; per-card value shows quantity math (2 × $0.41).
  • Scan icon top-right returns to the camera, so the empty state never strands you.
Real: Dark Blastoise Normal $46.94 and Holo $274.99, Charizard $410.75. Example values: Lurantis ex price and the condition picks. Condition-adjusted prices aren't modelled; the API has no per-condition price today.
08

Collection detail

/collectionDetail · also the Wishlist tabProposal v1
Now · My Cards
Current My Cards collection screen
Proposed · My Cards · scroll inside
9:41
My Cards
4 cards · owned
Collection valueLIVE
$132.32
▼ $0.01 (<0.1%) · last 7 days
7D1M
Shows how the cards currently in this collection changed in market value.
Dark Blastoise×2
Dark Blastoise
#4 · Normal$65.86each
Poltchageist
Poltchageist
#005/084 · Normal$0.09
Lurantis ex
Lurantis ex
#004/084 · Holo$0.51

What changed

  • Same parts as the Collection home. Round back and edit buttons, the list name as a page title, and the value in the dark slab with the 7-day line and 7D / 1M switch. Today it's a white box with a 176pt chart that pushes the cards below the fold.
  • Every tile shows its price, for the printing you picked, as on Set detail. Two copies show "×2" and "each" so the tile still adds up to the slab.
  • "Finish: Normal" becomes mono metadata next to the number (#4 · Normal) instead of its own line.
  • The explainer line moves under the slab in small grey text. Partial-coverage ("Based on pricing for 80%…") goes inside the slab under the line.
  • Empty list: Ionicons albums-outline with the existing "No cards yet" text.

Needs your call

  • Tile prices are new data on this screen. They come from the per-card price requests the Collection home already makes for "Most valuable" (cached, shared). For big lists I'd cap it like the home does (30 most recent) and show "—" beyond that. OK?
  • Chart rule mismatch: for this same list the home draws the 7-day line, but this screen says "Not enough price history yet" because it also checks available_ranges. I'd use the home's rule, so both screens agree.
Real: My Cards $132.32, ▼ $0.01 over 7 days, Dark Blastoise ×2 at $65.86 each (Normal), Lurantis ex $0.51 (Holo), Poltchageist $0.09, all read from the simulator today. The line's shape is illustrative of a flat week.
Now · Wishlist tab
Current Wishlist tab
Proposed · Wishlist tab · scroll inside
9:41
Wishlist
To complete · 6 cardsLIVE
$2,181.11
Current market prices, one copy each
Dark Blastoise
Dark Blastoise
#4 · Normal$65.86
Umbreon VMAX
Umbreon VMAX
#215/203 · Holo$2,094.10
Erika's Oddish
Erika's Oddish
#001/217 · Normal$0.38
Erika's Gloom
Erika's Gloom
#002/217 · Normal$0.41
Collection Browse Scan Wishlist Settings

As the Wishlist tab

  • A tab root, not a pushed screen: big page title like Collection and Browse, no back button, edit as the one round button, bottom padding from useTabBarInset().
  • The slab says what it costs to complete, the same figure the Wishlist row on the Collection home shows ($2,181.11 "to complete"). No change line and no chart, because it isn't money you have.
  • Tiles are identical to My Cards, so a card looks the same wherever it's listed.

Needs your call

  • Showing a value on the Wishlist is new. Today shouldShowCollectionValue hides it for the wishlist. The query is the one the home already runs, so it costs nothing extra. Two new strings: "To complete · {{cards}}" and "Current market prices, one copy each".
Real: 6 cards, $2,181.11 to complete (Collection home), Dark Blastoise $65.86. Example values: Umbreon VMAX, Erika's Oddish and Erika's Gloom tile prices.
Now · Edit sheet
Current Edit Collection sheet
Proposed · Edit sheet
9:41
My Cards
4 cards · owned
Edit Collection
4 cards
Add Cards from Wishlist
Dark BlastoiseLegendary Collection · 4
NormalHoloReverse HoloJumbo
−2+
PoltchageistPitch Black · 005/084
NormalReverse Holo
−1+
Lurantis exPitch Black · 004/084
Holo
−1+
Save Changes

Edit sheet

  • Same sheet as New list (CollectionFormModal): paper background, close X top left, title centred, Save as the one orange button in a footer. "Cancel" and "Save Changes" pills in the header go.
  • Rows instead of a 3-column grid. Each card shows set and number, so two printings of a similar card can be told apart; today the tile shows only the name.
  • Printings are chips you tap once. Today "Finish: Normal ▾" opens a dropdown inside a 110pt-wide tile. A card with one printing just shows it as text.
  • Quantity uses the stepper from Review (ink, not orange). Remove is a grey close-circle at the row's corner instead of a blue X on the art.
  • "Add Cards from Wishlist" becomes a white row with a chevron, as in New list, instead of a full orange button competing with Save.
  • Custom lists keep Name and Description fields on top and get "Delete Collection" under Save, in red text on white, as in the form sheet.
Real: My Cards contents, quantities and picked printings from the simulator. Dark Blastoise's four printings are the ones the card has; Poltchageist's second printing is an example.
09

Report sheet

/cardResult · "Wrong card?" and "Report this card"Proposal v1
Now
Current report card sheet
Proposed
9:41
Report card
Dark BlastoiseLC · 4/110 · EN
What is wrong?
Missing image
Image is low quality
Image does not match the card
Missing price data
Incorrect card details
Other issue
Add a description (optional)
Submit report

What changed

  • Fixes the empty band at the top. The sheet adds the status-bar inset, but a page sheet already sits below the status bar, so ~50pt of blank space sits above the title.
  • Same sheet header as the other sheets: close X on the left (Ionicons, replacing the text "×"), title centred in Archivo.
  • Says which card you're reporting with a small row: art, name, set code, number and language. That data is already on the screen.
  • Reasons become one grouped list with hairline dividers and an ink radio. The orange border and orange dot go; orange is kept for Submit. Rows get accessibilityRole="radio" and a selected state.
  • Text is regular weight, not bold. The note field is a borderless white box like the form sheets.
  • Submit sits in a footer above the home indicator and rises with the keyboard, so it's never under it.
Real: reasons, placeholder and button text are the app's current English strings; "Incorrect card details" is preselected because "Wrong card?" opens the sheet that way. No new strings.
→

Incremental rollout

6 releases

Ship it in slices that each stand on their own, so every release looks finished and can be measured. App-wide changes land first because every screen after them reuses them; the riskiest change, the new menu, comes after the screens it points to are ready.

App-wide changes

Color roles

One token set in theme/themes.ts; fold in acquisitionPalette.ts; one orange; green/red only for price moves.

Type

Add Archivo (prices, titles) and JetBrains Mono (codes, numbers). Fix getFontFamily so 700 renders bold.

Price components

<Price>, <PriceDelta>, <PriceSlab>: tabular figures, source label, live/local dot. Used on 8+ screens.

The new menu

Collection · Browse · Scan · Wishlist · Settings, raised Scan button, hidden routes removed.

Chips and sheets

Filled chips replace outlined blue ones; one Filter sheet pattern; segmented control for printings.

Surfaces

Paper background, white cards without borders, dark slab for money. Drop the border + radius on every block.

Sticky action bar

One primary action per screen at the bottom: card result, review, set picker.

Accessibility labels

Every icon button labelled; tab count fixed; back vs close announced correctly.

R1Foundation

Tokens, type and price components

  • Swap colors and fonts app-wide; screens keep their layout.
  • Ship <Price> and <PriceDelta> wherever a price already appears.
  • Fix B5 (Close on Settings tab), B4 (credit counter), a11y labels.
all screens
RiskLow. Visual only, no flow changes.CheckScreenshot diff of every screen; crash-free rate.
R2Payoff

Card result and Pricing

  • Price slab with printings, sticky Add to collection, "Wrong card?" link.
  • Pricing range bar, plain-word labels, named sources.
01 Card result02 Pricing
RiskLow. Self-contained screens, no new API.MeasureCard result → add to collection rate; taps on Compare marketplaces.
R3Core loop

Scan and Review, with the bug fixes

  • New camera chrome, floating hit card, batch button.
  • Review with printing, condition, destination.
  • Fix B2 (touches dead after gallery scan) and B3 (printing stuck on Normal). Backend: B1 name check.
06 Scan07 Review
RiskMedium. Touches the main flow; ship behind a flag.MeasureScans per session, scan → filed rate, "Wrong card?" reports.
R4Browse

Prices on tiles, merged search

  • Set detail with tile prices, price sort, set value, owned marks.
  • Browse with one search field and set progress.
  • Needs prices in the set-cards summary response.
04 Browse05 Set detail
RiskMedium. Backend change for summary prices.MeasureSet detail → card result taps; search success rate.
R5Navigation

The new menu and Collection home

  • Switch tabs to Collection · Browse · Scan · Wishlist · Settings.
  • Collection becomes the start screen once the user owns a card; new users still start on Scan.
00 Menu03 Collection
RiskHighest. Moves everyone's start screen; release notes should mention it.MeasureD1/D7 retention, sessions per user, scans per user.
R6Revenue

Onboarding and paywall in the new system

  • Same tokens on the dark slab ground; discount offer redesigned to match.
  • Copy in the collector voice; drop "appreciate".
OnboardingPaywallDiscount
RiskRevenue. Run as a RevenueCat experiment against the current paywall.MeasureTrial start rate, paywall → purchase, refund rate.