Methodology
Where the data comes from, what we do to it, and the receipts.
- TTB COLA registry
- Every beer on hopgrail starts as a federal label filing — a Certificate of Label Approval from the Alcohol and Tobacco Tax and Trade Bureau. We read the public registry daily and keep the filing ID on every record, so any beer page can be checked against the government original. TTB publishes approvals a few days behind; our daily pass re-scans a trailing window so late arrivals still land.
- Label art
- The label images are the actual art filed with TTB, shown as filed. We extract style, ABV, hops, and the label's own words from the art, then verify extracted fields against the filing. Extraction is machine-read; the source line under every label names the filing it came from.
- Brewery register
- The brewery graph joins TTB permit lists with a snapshot of the Open Brewery DB project, reconciled into one canonical record per brewery. Where sources disagree, the government record wins on identity; the community record wins on what's actually pouring. Independent-brewer seals come from the Brewers Association certification mark.
- Community signals
- Ratings, sightings, and barcode links come from hopgrail readers. Community averages only appear past a minimum sample (n ≥ 15, enforced in the database). Scanned barcodes start as probable links and are promoted to verified only after distinct readers confirm them.
Label filings are immutable — a changed label is a new filing — so the art is served like the permanent record it is. Every image gets two pre-generated WebP derivatives (400px and 1200px long edge) cut once at ingest; pages request the size they need via srcset with explicit dimensions, and the original full-resolution scan loads only behind the zoom tap on a beer page. Everything ships with a one-year immutable cache. No per-request image optimizer sits in the path.
The receipt, measured with PageSpeed Insights (mobile) on the front page before and after the July 2026 delivery repair:
| Before (Jul 16, 2026) | After | |
|---|---|---|
| Largest Contentful Paint | 6.4 s | 4.0 s |
| Cumulative Layout Shift | 0.14 | 0 |
| Performance score | 66 | 86 |
Full working notes live in the repository under perf/.
When a source is wrong, we correct the record and keep the provenance. Spotted an error? The filing ID on any beer page is the fastest way to point at it — reply to any Docket issue and it reaches the editor.