My records

A phone app for my vinyl collection. I photograph the front and back of a record, and OpenAI fills in the artist, album, year, label, edition and a short text about it. Then I note where it is on the shelf and when I listened to it.

Try the demo

Sample records, runs in your browser, nothing is saved. OpenAI's answers in the demo are pre-recorded.

The journey

The My records home screen: a grid of record labels and covers with the album titles in large letters.
The collection, one cover per record, with a search box on top.
After the front photo, a screen asks for the back cover, with Skip and Take photo buttons.
After the front, it asks for the back, which usually shows the label, edition and track list.
The new record form with the note 'Filled in by OpenAI. Check it before saving.' and the artist filled in.
OpenAI reads both photos and fills in only the empty fields. I check them before saving.
A record's page: the album title in large letters above its cover.
A record's page leads with the album and its cover.
Below the cover: genre, year, label, where it is, the edition, a short text about the album and the dates it was played.
Below it: the facts, where it is on the shelf, the story of the album, and when I listened to it.
The search box with the word 'tango' and two tango records found.
Search finds records by artist, album or genre, with or without accents.

Design

It shares its look with WAMC: black ink on white paper, heavy rules, one condensed typeface, and yellow only for what needs attention. Here the cover is the picture and the album title is the poster. Buttons are big enough for one hand, and the artists, genres and shelves already used come back as one-tap buttons.

Scope

One person, one collection, on the phone's web browser. It keeps up to 5,000 records, each with up to 500 listens. OpenAI is optional: without a key, everything is typed by hand. It does not stream music, track prices over time or connect to a marketplace.

How it is built

  1. The pageOne HTML file with plain JavaScript: no framework and no build step. The front photo is shrunk on the phone; the back keeps more pixels so its small print stays readable.
  2. The serverOne PHP file on ordinary shared hosting.
  3. The AIThe server sends both photos to OpenAI's gpt-5-mini and asks for a fixed JSON shape, so every answer fits the form. It also sends the genres already in the collection, so new records reuse them. The OpenAI key stays on the server and never reaches the phone.
  4. The dataNo database. The list is a JSON file, written under a file lock so two saves cannot collide. Photos sit in a folder the web cannot open, and only a signed-in phone gets them.
  5. The lockOne password, stored hashed. Five wrong tries lock the app for 15 minutes, and a sign-in lasts 90 days.
  6. The demoThe same page with the server swapped for a pretend one inside the page. OpenAI is not called: each sample record has its answer recorded in advance.

Photo credits

The sample records in the demo are photos from Wikimedia Commons of records from 1915 to 1946.