Snapping a wine label — what Wally reads for you

When you tap "Add a Wine" the flow is:

1. **Snap the label** — use your phone's camera or upload a photo. The label image is uploaded to Storage with the moderation pipeline's customMetadata attached so it runs through SafeSearch like every other image.
2. **Wally reads the label** — `processWineLabel` sends the image to Claude Vision and extracts:
• Producer (e.g., "Domaine Tempier")
• Wine name (e.g., "La Tourtine")
• Vintage (e.g., 2018)
• Varietal (e.g., "Mourvèdre, Grenache, Cinsault")
• Wine type (red / white / rosé / sparkling / dessert / fortified / orange)
• Region (e.g., "Bandol")
• Country (e.g., "France")
• Appellation (e.g., "AOC Bandol")
• ABV %
• A confidence rating (high / medium / low) so you know when to double-check
3. **Edit if needed** — every extracted field is editable before save. Wally rarely gets ABV exact, and some labels have hand-stamped vintages — fix them inline.
4. **Add the human bits** — rating (1–5 stars), your tasting notes, where you drank it (home / restaurant / friend's / tasting / wine shop / cellar), and the date.
5. **Optional location** — if you allow location access, Wine Tasting captures lat/lng and runs a free reverse geocode (Nominatim) to stamp a human-readable place name like "Le Bernardin — 155 W 51st St, New York." If you decline, the wine still saves; the placeName is simply blank.
6. **Save** — the wine drops into your cellar. The taste map refresh fires asynchronously, so the page header updates within a few seconds.

What Wally won't (and shouldn't) read:

• Pricing — labels rarely list it and the back-of-bottle import strip is unreliable.
• Anything obscured or torn in the photo. If the producer is unreadable, Wally returns "low" confidence and you fill that field in.

If the label scan fails:

The wine still saves with whatever you filled in by hand. Wally only refuses if the photo is unreadable; you can always retake later. The ocrStatus field on the wine doc shows "succeeded," "low_confidence," or "failed" if you want to see which entries to revisit.

Pairing to a recipe:

From the wine card in My Cellar, click "Pair with a recipe" → pick a saved Menu Planner recipe. The `pairWineWithRecipe` callable reads the recipe and writes a pairing suggestion back onto the wine ("Acidity from the Mourvèdre cuts the fat in the cassoulet"). The pairing surfaces inline on the wine card so the next time you scroll the cellar you see "pairs with X."