All projects

CrateDigger

Help deciding on a record while standing in a shop.

  • Applied AI
  • Personal tool
  • Built by AI agents

Problem

In a record shop, when I find a record I don't know, I only have moments to look it up, listen to a few tracks and decide whether it's to my taste. I also need to know if the price is fair, whether I already own it, and where it would sit among the records on my shelf and the music in my library.

Discogs and Apple Music each hold part of that answer. Neither says "you have two records like this already" or "nothing here is close".

What I did

I came up with the problem and described the features. I drafted and refined the requirements with an LLM, then handed them to AI coding agents (Claude Code and Codex). The agents wrote all of the code.

My part was directing the work, labelling the evaluation data by hand, testing the suggestions in shops and making the calls.

How it works

I scan a barcode, or type a catalogue number or an artist and title. The card then shows whether I own the record, its main style (one of 24 families) and up to three of the closest records from my shelf and my Apple Music library. If nothing is close, it says so. It also plays 30-second previews of three tracks and shows the lowest Discogs price.

Buy adds the release to my Discogs collection and Wishlist adds it to my wantlist. Both can be undone, and every tap is saved in a dig history.

Crate Digger's home screen on a phone: Scan Barcode button, catalogue-number and artist search tabs, and a Recently Viewed list of records.
Start from a barcode, a catalogue number or a search.
A record card for The Awakening by the Ahmad Jamal Trio: sleeve art, format, label and catalogue number, genre tags and a note that it is not on the shelf.
The card: not on my shelf, with its style and catalogue number.

The key decision

My first test, on my own collection, showed that Discogs tags are too coarse to say what sits close to what. So a language model now chooses the matches, but only from records I already have. The app drops any suggestion that is not in my collection or library.

CrateDigger record decision flow A scan looks up a Discogs release and checks the collection, Apple Music library and previews. The model returns up to three picks or nothing close. Buy or Wishlist writes to Discogs and can be undone. Scan / catalogue / search Discogs releaseedition · style · price My shelfowned? Apple Musiclibrary Match from my recordsup to three picks or “nothing close” Record cardpreviews · price · ownership Buy or Wishlistwrite to Discogs Undoreverses the Discogs action CrateDigger record decision flow A scan looks up a Discogs release and checks the collection, Apple Music library and previews. The model returns up to three picks or nothing close. Buy or Wishlist writes to Discogs and can be undone. Scan / catalogueor search Discogs releaseedition · style · price My shelfowned records Apple Musiclibrary · previews Match my recordsup to three picksor “nothing close” Record cardownership · previewsprice Buy or Wishlistwrite to Discogs Undoreverses the action
I check my own shelf and library before the card offers an action.
The Tropico record card by Gato Barbieri, scrolled to Closest in Your Collection: three records marked On your shelf, each with a one-line reason it matches, then the first preview tracks.
Three closest records, each with a one-line reason.
A record card where nothing in the collection is close, so it says Nothing close in your collection or library instead of inventing a match.
When nothing is close, it says so.
The lower half of a record card: closest matches marked On your shelf, preview tracks, and Price and Market with lowest listing, owners and sellers, then Buy, Explore later and Wishlist buttons.
Previews, the lowest listed price, and the actions.
The Explore Later list holding two saved records to come back to.
Explore later keeps an artist to come back to.

It runs on a private server and is reachable only over a private network. It has no login, so it is never exposed publicly.

Results and limits

I labelled a 20-record test set by hand and ran both models on 18 October 2026. The primary model is the one the app uses. Two records with uncertain reference labels are left out of the style score, which is why its denominator is 18.

MeasureTargetPrimaryFallback
Style correct90%16 of 18 (89%)15 of 17 (88%)
False close matches15% or fewer3 of 20 (15%)5 of 20 (25%)
Median response5.6 s6.0 s
Cost per recordUS$0.0068US$0.0050

Style accuracy came in just under its target. False close matches sat exactly at the limit. I kept the primary model because it made fewer false matches (3 against 5). The decision-in-under-60-seconds target passed in live use in record shops.

These are separate measures, not one accuracy score. The set is 20 records from my own collection, and the false-match judgements are my reviews. It is a personal tool with no other users.

Stack

  • Python (standard library)
  • Web app for the phone
  • OpenRouter, structured JSON output
  • Discogs API
  • Apple Music previews
  • unittest and node:test
  • Pre-commit tests

Skills, CLI and APIs

What the agents and the app work with.

Agent skills
The project's own skills, shared by Claude Code and Codex: ship-feature, to take one change from idea to live alongside other agents, and run-eval, to run the 20-record test for both models, review the picks with me and regenerate the status report.
Claude in Chrome, to capture the screenshots of the app on this page.
CLI
Codex CLI, for workers and independent review.
herdr, one terminal tab per agent.
make targets for tests, workers, model replays and deploys.
systemd and journalctl, to run and watch the service; Tailscale, so it is reachable only over my private network.
Git and the GitHub CLI.
APIs
OpenRouter, for model calls with structured JSON output, routed only to providers that keep no data.
The Discogs API: release details, my collection and wantlist, and the Buy and Wishlist writes.
Apple's iTunes Search API, for 30-second previews.
MCP
None for this project.