Home/Projects/CoinOptic
Coming soonMachine Learning / Mobile•2026
CoinOptic app icon

CoinOptic

Coin identifier that matches a photo against 300,000 coin types

CoinOptic

Role

Architect & ML Engineer

Year

2026

Status

Coming soon

Overview

CoinOptic identifies a coin from a photo of each side. The phone finds the coin’s edge in the live camera preview and crops to it, so the server receives only the coin. There, a DINOv2 model running as ONNX on CPU embeds the photo at eight rotations per side and a pgvector search returns the ten nearest catalog coins. Those candidates are then checked geometrically with SIFT features and an affine RANSAC fit, and when exactly one coin is confirmed the scan is answered with no language model at all. Only an unclear scan reaches a vision LLM, which is used as a reader: it reports the issuer, face value and year, and the catalog is searched by those fields, so the model can never name a coin the catalog does not hold. Values are always a range by condition, built from listings after lots, replicas and unverified error claims are filtered out, and a coin with too few listings shows no value instead of a guess. The Expo app is written in German first with English second, keeps the collection on the device, and sells Pro through RevenueCat with the entitlement checked on the server.

Highlights

  • Clear photos are answered by retrieval and geometry alone, with no language model call

  • Repeat scans are served from a perceptual hash cache instead of being identified again

  • The embedding model runs as ONNX on CPU in the API, with a Modal GPU used only for bulk indexing

  • Scan photos are deleted after 30 days and scan logs are keyed by a keyed hash of the user id

  • German first interface with English second, with every string behind i18n and checked for parity in tests

Capabilities

01

Embedding Retrieval

Each side of the coin is embedded with DINOv2 at eight rotations, because a coin can be photographed at any angle. A pgvector search over the catalog returns the ten nearest coins.

02

Geometric Verification

SIFT keypoints and an affine RANSAC fit compare the photo with each candidate’s catalog image. Keypoints on the outline are masked out, since every coin is a disc and outlines would match any two coins.

03

Vision Model as a Reader

When geometry cannot settle a scan, a small vision model reads the issuer, face value and year. The catalog is searched by that reading, and the model’s answer is limited by schema to the offered candidates or none.

04

On-Device Coin Detection

A frame processor finds the coin’s edge in the live preview, moves the guide circle onto it and crops to the coin. No preview frame leaves the phone before the shutter is pressed.

05

Confidence Tiers

A confident match is shown directly, a middling one becomes a short list to choose from, and a weak one returns retake tips. Corrections are stored as evaluation data.

06

Honest Value Ranges

A value is a range per condition from a 90 day window, with outliers removed and the interquartile range shown. Fewer than five listings means no range, and asking prices are labelled as asking prices.

07

Metal Value & Rarity

Silver and gold coins show their melt value at the current spot price. Rarity comes from the mintage alone, and an unknown mintage is reported as unknown.

08

Server-Enforced Free Tier

The daily scan limit is charged on the server before any model runs and refunded when a scan fails. Pro is verified against RevenueCat on the server, so a free device never holds a market price.

Mobile app

Coming soon to the App Store.

Tech stack

PythonDINOv2ONNX RuntimepgvectorOpenCVFastAPIPostgreSQLModalCloudflare R2ExpoReact NativeVisionCameraTypeScriptFirebaseRevenueCatPostHog

Privacy & terms

How CoinOptic handles your data, and the terms for using it.

Related projects

Have a similar idea? Let's talk.