Pricing that never guesses
Manual values first, then automatic quotes only when identity, printing, currency and freshness (48 h) all match. No implicit currency conversion; everything else stays unpriced.
PokeCard values a trading card collection card by card, putting purchase cost next to dated market references. A pricing engine refuses to guess: a card only gets a value when the source, printing, currency and date all match, otherwise it stays unpriced.
A SwiftUI app over a local Swift package with the pricing, search and history logic. No backend and no third-party dependencies: catalogue and prices come straight from a public card API.
Adaptive iPhone and iPad layouts, Observation-based state, Swift Charts for price and portfolio history, and StoreKit 2 for the Plus subscription.
Models, card search parsing, valuation rules and portfolio history live in a separate Swift package, tested without the UI.
An actor that shares identical requests, caps them at three in flight, retries once on rate limits and caches searches for 24 h and card data for 4 h.
A second actor downloads card art with at most four parallel requests, downsamples off the main thread and bounds memory and disk use.
Writes are batched and encoded in their own actor, older revisions are rejected, and a damaged file blocks automatic saving instead of being overwritten.
CardfolioNo third-party dependencies — Apple SDKs only.
Stack detected automatically from the repository on 6 Nov 2026.
Manual values first, then automatic quotes only when identity, printing, currency and freshness (48 h) all match. No implicit currency conversion; everything else stays unpriced.
Indexed lookups, batched merges and summaries recalculated off the main thread keep large binders responsive, with 50-position pages.
The v1 → v2 data upgrade keeps every holding, cost and note, and saves the original files before touching anything.
Charts reduce long series to at most 600 points while keeping the highs and lows, and never invent days that weren't observed.