Back to PokeCard

How PokeCard is built

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.

Version
1.2.1
Requires iOS
iOS 17.0
Size
8.4 MB
Category
Reference
First released
2026

Architecture

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.

  1. SwiftUI app

    Adaptive iPhone and iPad layouts, Observation-based state, Swift Charts for price and portfolio history, and StoreKit 2 for the Plus subscription.

  2. Core package

    Models, card search parsing, valuation rules and portfolio history live in a separate Swift package, tested without the UI.

  3. Market service

    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.

  4. Image cache

    A second actor downloads card art with at most four parallel requests, downsamples off the main thread and bounds memory and disk use.

  5. Local persistence

    Writes are batched and encoded in their own actor, older revisions are rejected, and a damaged file blocks automatic saving instead of being overwritten.

Stack

Languages

4,360lines of code · 49 source files
Swift 79.8%Python 13.1%HTML 6.6%

Build

UI
SwiftUI-first (with UIKit interop)
Swift
5.0
Deployment target
iOS 17.0
Tests
64 test cases

Apple frameworks

Interface

SwiftUIUIKitCharts

State and concurrency

Observation

Commerce

StoreKit

Security

CryptoKit

Graphics

CoreGraphics

Local Swift packages

CardfolioCore

Targets

App
Cardfolio

Dependencies

No third-party dependencies — Apple SDKs only.

Patterns

Observation (@Observable)Swift Concurrency (async/await)Actors@MainActor isolationNavigationStackXCTestURLSession networkingCodable modelsGCD

Tooling

Swift Package ManagerPrivacy manifest

Stack detected automatically from the repository on 6 Nov 2026.

Engineering highlights

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.

Collections of 2,000+ cards

Indexed lookups, batched merges and summaries recalculated off the main thread keep large binders responsive, with 50-position pages.

Safe data migration

The v1 → v2 data upgrade keeps every holding, cost and note, and saves the original files before touching anything.

Readable price history

Charts reduce long series to at most 600 points while keeping the highs and lows, and never invent days that weren't observed.

Get it on the App StoreBack to PokeCard