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>
- Clarifies no app/Mac/Xcode needed for training data collection
- Documents photography setup for foils (angles, black bg, raking light)
- Documents photography setup for damage and non-foil cards
- Explains the cropping rule and why it matters for model accuracy
- Lists free cropping tools for Windows and cross-platform
- Image quantity guide (min vs recommended per class)
- Explains Scryfall image downloads as a NonFoil supplement
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Documents the full ML feedback loop:
- How user corrections trigger uploads (by label: Foil_, Condition_, Identity_)
- User opt-in requirement and AppConfig.isTrainingOptIn
- Firebase Storage rules (training write-only, models read-only)
- How to download collected data via Firebase CLI
- Image review and sorting process before retraining
- Create ML retraining workflow
- OTA model push via Firebase Storage models/ folder
- Recommended retraining schedule
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Added Development Roadmap table showing all steps and Mac requirements
- Added Part 3: Card Database explaining IYmtg_Builder_Mac and cards.json
- Added Part 4: Xcode Project Setup from source (create, add files, SPM, capabilities)
- Added privacy plist keys and PrivacyInfo.xcprivacy guidance
- Added OTA model update restart requirement note
- Expanded Release Checklist with database and ML model checks
- Renumbered all parts consistently (Part 1-10)
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>