Wine photos on the bottle detail page

Tap a wine and you’ll see horizontal photo strips for bottle shots, label images, trade documents (tech sheets, sell sheets), and any scans you’ve taken yourself. Your own scans render with a little polaroid tilt to feel personal. Tap any image to zoom in.
The bottle detail page used to be mostly text — varietal, vintage, drinking window, your tasting history. Useful, but pretty flat. Meanwhile our content pipeline had been quietly populating bottle photos, label scans, and trade docs (sell sheets, tech sheets) for thousands of wines. None of it was showing up where users would actually look at it.
Now there are two horizontal strips on each wine page. The first carries any “official” assets we have for the wine — bottle shots, label crops, vintage-specific documents. The second carries your own scans of that bottle. Tap any image to zoom in with pinch-to-zoom; tap a document to open it in a new tab.
The two strips have intentionally different visual language. Official assets render clean — square, rounded corners, soft shadow. Your own scans render with a subtle polaroid treatment: warm border, slight rotation. The idea is that your photos belong to your tasting journal in a way the winery’s marketing shots don’t, and a small visual cue lets that difference register without anyone having to explain it.
We had to clean up a CDN routing issue along the way. Older scans were stored with raw S3 URLs that the public-facing bucket doesn’t serve directly. The strip silently normalizes any scan URL down to its asset key and rebuilds it against the CloudFront CDN, so everything routes through the same resize pipeline as the rest of the app. We also added a quiet fallback that hides any thumbnail whose source has gone missing, so broken-image icons never end up in your photo strip.