- Provide a pocket reference and catalog for a private collection of foreign coins and banknotes (primarily pre-1990).
- Allow fast capture of item information via the phone camera with optional manual entry.
- Maintain accurate records of purchase price, market value, provenance, and sale status.
- Surface market trends and valuations so the collector knows when to buy, hold, or sell.
- Mobile platform: Cross-platform support via React Native (iOS + Android) to maximize reach while reusing code.
- Camera + ML: Use the device camera with on-device object detection (e.g., TensorFlow Lite) to suggest matches; fall back to manual search if recognition confidence is low.
- Backend: Supabase (PostgreSQL + auth + storage) for rapid development, realtime sync, and serverless functions for periodic market data refresh.
- Market data integration: Scheduled edge functions fetch coin/banknote price guides (Numista, NGC, Krause) and normalize values.
- State management: React Query + Zustand for remote/local data handling with offline-first caching.
- Catalog Browser
- Filter by country, denomination, year, metal, grade, acquisition status, or sold items.
- Grid and list views with high-resolution imagery.
- Quick search with fuzzy matching on catalog number, nickname, inscriptions.
- Item Detail View
- High-res photos (obverse/reverse), grade, denomination, issue year, mint mark.
- Purchase details: acquisition date, cost, seller, receipt attachments.
- Current market value with historical chart and confidence band.
- Notes section and tags.
- Actions: edit, duplicate, mark as sold, delete.
- Camera Scan & Recognition
- Guided capture workflow: align coin/bill in outline, auto-capture when sharp.
- On-device model suggests top matches; user confirms or manually searches.
- Prefills attributes (country, denomination, catalog number) from reference database.
- CRUD Management
- Create: manual form + camera-assisted entry.
- Read: offline-available detail pages and summary stats.
- Update: edit metadata, adjust market value, add new photos, change status to sold.
- Delete: soft delete with undo snackbar; permanent purge in settings.
- Portfolio Dashboard
- Total acquisition cost vs current valuation, gains/losses.
- Breakdown by country, period, metal, or status (owned vs sold).
- Recent additions and reminders for re-appraisal.
- Synchronization & Offline Mode
- Local SQLite cache mirrored with Supabase for offline browsing and edits.
- Conflict resolution strategy: last-write wins with change logs and manual merge UI.
- Entities
Item: UUID, name/title, denomination, country, year, mint, catalog number, grade, composition, diameter/weight, obverse/reverse images, notes.Acquisition: purchase price, currency, date, seller, provenance, condition at purchase.Valuation: source (e.g., Numista), amount, currency, fetched_at, confidence.MarketHistory: time-series valuations per item.Status: enum (owned,on_loan,sold,wishlist).
- Relationships
- An
Itemhas one currentValuationand historicalMarketHistoryentries. Acquisitionbelongs toItemand tracks purchase context.Statustransitions logged with timestamp + optional note.
- An
- Storage
- Supabase table per entity; storage bucket for media (JPEG/PNG).
- Local SQLite mirrors
Item,Valuation,Acquisition,MarketHistorytables for offline use.
- Capture: Camera module captures obverse/reverse images (auto-cropped and denoised).
- Preprocessing: Convert to grayscale + edge detection for coins; perspective correction for banknotes.
- Feature Extraction: Use MobileNetV3 backbone fine-tuned on coin datasets; detect inscriptions via OCR (Tesseract mobile).
- Matching: Compare embedding against Supabase-hosted reference vectors; combine with OCR tokens and year to rank candidates.
- User Confirmation: Present top 3 matches with key metadata; user confirms or searches manually.
- Enrichment: Once matched, fetch metadata and valuations, pre-fill form for review.
- Nightly scheduled Supabase edge function per region/currency.
- Source APIs scraped with respect to TOS, caching responses to minimize load.
- Normalization pipeline converts to user's preferred currency using ECB exchange rates.
- Valuation confidence derived from recency + source reliability weights.
- A lightweight Node.js + Express service (included in this repository) provides CRUD endpoints for managing collection items, an export route, and a placeholder recognition endpoint for camera uploads.
- Persistence relies on lowdb (JSON on disk) so the demo runs anywhere without compiling native SQLite bindings.
- Automated Vitest + Supertest suites cover the health check, CRUD lifecycle, and recognition placeholder to ensure the demo API remains stable as features evolve.
- Supabase Auth with email/password and optional biometric sign-in.
- Row-Level Security (RLS) ensures user isolation.
- Encrypt sensitive local data with platform Keychain/Keystore integration.
- Allow opt-out of cloud sync (local-only mode) with manual backups.
- MVP (8 weeks)
- Manual CRUD, camera capture with manual tagging, Supabase sync, dashboard basics.
- Phase 2 (6 weeks)
- On-device recognition model, market data integration, offline sync polish.
- Phase 3 (ongoing)
- Advanced analytics, sharing/export, integration with auction marketplaces.
- Time to log a new item (goal: <60 seconds with camera assist).
- Percentage of catalog with complete metadata (target: 90%).
- Recognition match accuracy (goal: >85% top-1 for trained regions).
- Monthly active users and retention for pilot group.