Collectors
Cartridge
Your whole collection, on your phone, with the radio off.
A retro game and console catalogue that runs entirely in the browser. It installs to a home screen, stores everything in the device's own database, scans a cart label with the camera, and prints an insurance inventory with photos and values. There is no server and no account.
- Next.js 16
- TypeScript
- IndexedDB
- Offline-first
- Installable PWA
- Device camera
- React PDF
- Server
- None
- Works offline
- Everything
- Insurance list
- One PDF
browser database, no account
catalogue, search and photos
photos and values included
What was going wrong
A collection lived in a spreadsheet that was never open at the moment it was needed, which is standing in a hall holding a copy of something you might already own. Insurers wanted an itemised list with photographs, and the honest version of that list was a shelf and a memory.
What we built
Build it as if the network does not exist, because at a swap meet it mostly does not. Everything lives in the browser's own database, the app installs to the home screen, and the camera does the typing. Completeness per system turns a list into a target, and the same data prints an inventory an insurer will accept. The whole thing can be exported to a file, because a collection outlives an app.
What it looks like
Every screen shown on a desktop and on a phone, because half of these are used standing up.
The collection
Everything owned, by system, region and condition, with search that answers the swap-meet question in under a second.
/collection
Desktop capture
1440 × 900
Mobile capture
390 × 844
One item
Condition, variant, what it cost, what it is worth now, and the box, manual and cart photographs.
/collection/[id]
Desktop capture
1440 × 900
Mobile capture
390 × 844
Set completeness
How much of a system's library is actually on the shelf, per region. The number that turns a pile into a project.
/collection/sets
Desktop capture
1440 × 900
Mobile capture
390 × 844
Export and reset
The insurance PDF, a plain JSON backup, and the import that restores it — the same code path the demo reset uses.
/collection/data
Desktop capture
1440 × 900
Mobile capture
390 × 844
What it does
Installs to the home screen
Opens like an app, with no store, no account and no sign-in.
Works with no connection
The full catalogue, search and photos are on the device. Which is the point, in a dealer's hall with no signal.
Scan the barcode
The camera resolves a label against the cached reference catalogue, with a manual path for when the sticker is unreadable — which for retro carts is often.
Photos per item
Box, manual and cart shots, stored on the device and thumbnailed on save.
Set completeness
The fraction of a system's library you actually own, per region — the number the whole hobby runs on.
Insurance inventory
A printable PDF with photos and values, which is the reason most collections get catalogued at all.
Who reaches for it, and when
At a swap meet
Checks whether they already own the boxed copy in their hand, in a hall with no signal and no data allowance.
After a good weekend
Adds nine items by scanning, and watches one system's completeness move.
Renewing the contents insurance
Prints an inventory with photographs and values instead of describing a spare room over the phone.
What makes this one different
There is no server at all
Not a hosted app with an offline mode — a browser database with a service worker over it. Nothing about the collection leaves the device, and there is nothing to pay for or shut down.
Versioned migrations from day one
An on-device database with no server has no other way to change shape. The store carries a version and a migration path from the first release, because a collector's data cannot be rebuilt from a backend.
Export is the reset button
Loading the demo collection uses the same import code path a collector uses to restore a backup, so the risky path is exercised constantly instead of once a year.
It expects the label to be unreadable
Barcode scanning on a thirty-year-old cart fails often enough that the manual path is a first-class route rather than an error state.
Built with
What each piece is doing here — the people who read this section are usually the ones who would have to maintain it after us.
Next.js 16
The application framework. Pages render on the server by default.
TypeScript
Strict mode everywhere. A field renamed in one place fails to compile in the others.
IndexedDB
The browser's own database, with versioned migrations from day one.
Offline-first
A service worker serves the whole app with the radio off.
Installable PWA
Adds to a home screen and opens like an app, with no store involved.
Device camera
Barcode scanning and photo capture straight from the phone.
React PDF
Documents generated on the server, identical every time they are made.
Want something like Cartridge?
It does not have to be your industry — the underlying problem is nearly always the same. Tell us how the work moves through your business and we will tell you what it would take.
Every project is quoted on its own. Turnaround starts at two weeks.