The wine cellar app
Scan a bottle, put it on a shelf, describe a dish, and get a wine from your own cellar, chosen by rules rather than by a model.

The wine cellar app on 3 October 2026. Wine names, where in the house each bottle is, and the cellar's value are blurred.
What it is
The wine cellar app keeps track of a home wine cellar from a phone. You photograph a shelf and the app works out its rows and slots. You scan each bottle, by barcode or by reading the label, and the bottle is placed in a slot. When you are cooking, you describe the dish and the app suggests a wine you already own, with a reason.
How it works
The back end is Python with a job queue for slow work such as reading labels. Label reading uses vision models. A setting added on 20 July lets Claude go first, through the subscription, with a local model taking over if Claude is unavailable or unsure. A barcode found on the web is never trusted for the vintage, since the same barcode covers every year.
Food pairing is the part that changed most. The wine is now picked by a rule engine: grape profiles, a set of pairing principles such as tannin against chili, and a list of classic dishes. The same dish and the same cellar always give the same answer, and 33 known pairings are covered by tests meant to catch any rule change that breaks them. Claude only writes the explanation, after the wine has been chosen, and it cannot swap the bottle. If the model is down, the app writes a plainer explanation itself.
What we expected, and what happened
Read it like a code review. Each removed line is something we expected, from a plan, a spec, a README or a code comment. The added line under it is what the history shows actually happened.
Expected: The label reader would report wine type and grape from the label.
Happened: When unsure, the model copied the example values from the output format in its own prompt, and a wine was recorded as a red Nebbiolo. Since 13 June the prompt says the examples are format only, and an unknown type or grape stays empty.
Expected: A wine retailer's developer API would look up a bottle by its barcode.
Happened: It ignores barcodes. Each uncached scan downloaded a nine-megabyte catalogue of 65,000 products and never found a match. The call was removed on 13 June.
Expected: A daily job backed up the label and shelf photos (added 13 June).
Happened: It stood still for seven weeks. The script had Windows line endings, the container's shell refused it, and the container still reported healthy. Found on 4 August; the app now shows the age of the latest backup.
Expected: A barcode match found on the web could fill in the vintage of a bottle.
Happened: A barcode is the same for every vintage, so a 2019 product page set the vintage on 2023 bottles. Since 20 July a web match only suggests a vintage. A check of the cellar afterwards found 0 wrong vintages and 2 to look at by hand.
Page history
- First version of this page.
- On 3 October 2026 we checked the wine cellar app and found no new commits or changelog entries since the last update, so the page content stays the same.
- On 4 October 2026 we recounted commits: the app had no new commits since 3 October, so only the activity count changed.