Implements a new UI to show recommended image counts for ML training.
Uses color-coded indicators (orange/green/blue) for Functional, Solid,
and High-Accuracy thresholds across all 28 training categories
(Foil, Stamp, and Condition models). Critical damage types (Inking,
Rips, Water Damage) carry higher recommended counts to minimise false
positives on NM grades. Accessible via a "?" toolbar button in Library.
Bumps app version to 1.1.0.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
CardLogic.swift, Engines.swift, and root ScannerViewModel.swift
were empty migration notices pointing to the new modular structure.
All actual code lives in Services/, Data/, and Features/ already.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Adds appVersion and buildNumber to AppConfig.swift for centralized version management.
- Updates scryfallUserAgent to use the dynamic appVersion.
- Updates .gitignore to exclude AI asset and training directories.
- Adds a version check step to the README release checklist.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Primary sync: replace PersistenceActor JSON file with SwiftData + CloudKit
- Add SavedCardModel (@Model class) and PersistenceController (ModelContainer
with .automatic CloudKit, fallback to local). BackgroundPersistenceActor
(@ModelActor) handles all DB I/O off the main thread.
- One-time migration imports user_collection.json into SwiftData and renames
the original file to prevent re-import.
- Inject modelContainer into SwiftUI environment in IYmtgApp.
Image storage: Documents/UserContent/ subfolder (blueprint requirement)
- ImageManager.dir now targets iCloud Documents/UserContent/ (or local equiv).
- migrateImagesToUserContent() moves existing JPGs to the new subfolder on
first launch; called during the SwiftData migration.
Firebase: demoted to optional manual backup (metadata only, no images)
- Remove all automatic CloudEngine.save/delete/batchUpdatePrices calls from
CollectionViewModel mutations.
- Add backupAllToFirebase() for user-triggered metadata sync.
- Add isFirebaseBackupEnabled to AppConfig (default false).
- Add Cloud Backup section in Library settings with iCloud vs Firebase
explanation and "Backup Metadata to Firebase Now" button.
Also: full modular refactor (Data/, Features/, Services/ directories) and
README updated with CloudKit setup steps and revised release checklist.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>