A modern, AI-powered Progressive Web App (PWA) for managing your coin collection with cloud sync, image analysis, and cross-device access.
- 📸 AI-Powered Coin Recognition - Upload coin images and use GPT-4 Vision to automatically extract details
- 🔄 Cross-Device Sync - Access your collection from phone, tablet, or desktop with real-time Supabase sync
- 🖼️ Image Storage - Store high-quality coin photos in the cloud
- 🔍 Advanced Search - Search by name, country, year, denomination, and more
- 📊 Collection Statistics - Track total coins, value, and countries
- 🎨 Modern UI - Clean, responsive interface with Tailwind CSS
- 🌐 PWA Support - Install as an app on any device
- 🔔 Toast Notifications - Beautiful, non-intrusive feedback
- Node.js 18+ and npm
- A Supabase account (free tier works!)
- An OpenAI API key (for AI coin analysis)
-
Clone the repository
git clone https://github.com/croakingtoad/Coin-Collection-App.git cd Coin-Collection-App -
Install dependencies
npm install
-
Set up environment variables
cp .env.example .env
Edit
.envand add your credentials:VITE_SUPABASE_URL- Your Supabase project URLVITE_SUPABASE_ANON_KEY- Your Supabase anon/public keyVITE_OPENAI_API_KEY- Your OpenAI API key
-
Set up Supabase database
Run the SQL in
supabase-schema.sqlin your Supabase SQL Editor:- Go to your Supabase project dashboard
- Navigate to SQL Editor
- Click "New Query"
- Copy and paste the contents of
supabase-schema.sql - Click "Run"
This creates:
coinstable with all necessary fields- Indexes for fast searching
- Row Level Security policies (public access by default)
coin-imagesstorage bucket for photos
-
Start the development server
npm run dev
The app will be available at
http://localhost:1337
- Click the "+" button or navigate to
/add - Upload a photo of your coin (optional)
- Click "Analyze with AI" to auto-fill details (requires OpenAI API key)
- Fill in required fields: Name, Country, Denomination
- Add optional details: grade, value, mint mark, etc.
- Click "Add Coin"
- Dashboard: See all coins in grid or list view
- Search: Use the search bar to filter by any field
- Statistics: View total coins, estimated value, and unique countries
- Details: Click any coin to see full information
The app uses GPT-4 Vision to analyze coin images and extract:
- Coin name and series
- Year and mint mark
- Country and denomination
- Grading information (grade, company, certification number)
- Estimated market value
- Composition and weight
- Special collection designation
The coins table includes:
Required Fields:
name- Coin name/descriptionyear- Mint yearcountry- Country of origindenomination- Face value
Optional Fields:
mint_mark- Mint location identifiergrade- Coin grade (e.g., MS-65)value- Estimated market valuedescription- Additional notesimage- Photo URL (Supabase Storage)category- Coin categorycomposition- Metal compositionweight- Weight in gramsdiameter- Diameter in mmregistration_number- Grading certification numbergrading_company- Grading service (PCGS, NGC, etc.)face_value- Original denominationspecial_collection- Named collection
- Frontend: React 18 + TypeScript + Vite
- Styling: Tailwind CSS
- Database: Supabase (PostgreSQL)
- Storage: Supabase Storage
- AI: OpenAI GPT-4 Vision
- Routing: React Router v6
- Icons: Lucide React
- Notifications: Sonner (toast notifications)
npm run dev- Start development servernpm run build- Build for productionnpm run preview- Preview production buildnpm run lint- Run ESLint
The app runs on port 1337 by default. Change in .env:
VITE_PORT=1337- Create a new project at supabase.com
- Get your credentials from Project Settings → API
- Run the database schema from
supabase-schema.sql - The storage bucket
coin-imageswill be created automatically
- Create an account at platform.openai.com
- Generate an API key
- Add to
.envasVITE_OPENAI_API_KEY - Note: GPT-4 Vision API calls cost approximately $0.01-0.03 per image analysis
The app can be deployed to any static hosting service:
- Netlify:
npm run build→ Deploydistfolder - Vercel: Import from GitHub (auto-detects Vite)
- GitHub Pages: Use
gh-pagespackage - Self-hosted: Serve
distfolder with any web server
Don't forget to set environment variables in your hosting platform!
Contributions are welcome! Please feel free to submit a Pull Request.
This project is open source and available under the MIT License.
- Built with love for coin collectors everywhere 🪙
For issues, questions, or suggestions, please open an issue on GitHub.
Happy Collecting! 🪙✨