A desktop app for managing your coin collection — built as a hobby project. English/russian interface.
- Collections — organize coins into custom collections (e.g. "Russian Coins", "British Shillings")
- Coins — track denomination, year, condition, purchase date, price, currency, notes, sold status, auction and sale prices, and more
- Photos — attach multiple photos to each coin, reorder them, and browse in a lightbox
- Export to PDF — export selected collections with coin details, photos (up to 4 per coin), table of contents, and «Sold» label in red
- Export to Excel — export selected collections to
.xlsxwith embedded photos - Import — bulk import coins from Excel
.xlsxspreadsheets - Backup & Restore — export your entire database to a ZIP archive (JSON + photos), import back with smart merge
- i18n — English and Russian UI
- Offline-first — all data stored locally in SQLite, no cloud required
| Platform | Link |
|---|---|
| macOS (arm64) | Download .dmg (~114 MB) |
| Windows (x64) | Download Setup (~91 MB) — Portable |
⚠️ Windows builds are not tested. The app is developed and tested on macOS only. Windows binaries are built via GitHub Actions but may contain platform-specific issues. Bug reports welcome!
The app is unsigned (no Apple Developer ID). macOS Gatekeeper will block it on first launch with the message "Coin Collection is damaged and can't be opened." To fix this, remove the quarantine flag after copying to /Applications:
# After dragging the app from the .dmg to /Applications:
xattr -cr /Applications/Coin\ Collection.app
# Then open normally from Finder or SpotlightAlternatively, you can right-click → Open the app in Finder, then click "Open" in the dialog — this works once per downloaded version.
| Layer | Technology |
|---|---|
| Desktop | Electron 33 |
| Bundler | electron-vite 2 |
| Frontend | React 18 + TypeScript 5 |
| Styling | Tailwind CSS 3 |
| State | Zustand 5 |
| Database | better-sqlite3 11 |
| Routing | React Router 7 |
| i18n | i18next + react-i18next |
| Testing | Vitest + React Testing Library |
| Linting | ESLint + Prettier |
| Build | electron-builder 25 |
| Backup | adm-zip |
| Import | SheetJS (xlsx) |
| Export (Excel) | ExcelJS |
| Export (PDF) | PDFKit |
| Images | sharp |
src/main/ — Electron main process (database, IPC handlers)
src/preload/ — Context bridge (exposes window.api)
src/renderer/ — React UI (components, features, hooks, styles, locales)
src/shared/ — Types and constants shared between main/renderer
Database: SQLite via better-sqlite3 with migrations. Photos are stored as files in the app's userData directory and referenced by filename in the DB.
IPC: The renderer communicates with the main process through window.api — a type-safe bridge exposed via Electron's contextBridge.
# Install dependencies
npm install
# Start dev server with hot reload
npm run dev
# Type checking
npm run typecheck
# Lint (auto-fix)
npm run lint
# Run tests
npm test
# Build for production
npm run build- Node.js 20+
- macOS (arm64) or Windows (x64)
- For native module rebuilds:
npm run rebuild:electron
MIT — this is a hobby project, use it however you like.
