Skip to content

Labels & printing

Every batch has a label sheet: a full page of stickers, each with the QR code, printed straight from the browser. No label printer required.

The sheet is laid out for the Avery 5160 die-cut (30 labels per US Letter sheet, 2.625in × 1in, 3 columns × 10 rows). Any 5160-compatible stock works, including weatherproof inkjet sheets from third parties.

  1. Open the batch in the admin and click through to its label sheet.
  2. Print from the browser with:
    • Scale: 100%. This is the one that matters. “Fit to page” shifts every label off its die-cut. The geometry only aligns at exactly 100%.
    • Margins: default (the sheet accounts for the 5160’s own margins).
    • Paper: US Letter.
  3. Do a plain-paper test print first and hold it against the label sheet in the light.

The on-screen preview is also the print selection: the sheet renders all 30 positions, and clicking any label toggles that position off. Skipped positions print blank but keep their slot, so everything else still lands on its die-cut — that’s how you print 8 labels onto a sheet whose first row is already used: click 30, then click off the positions that are gone, or click 6/12 and move the selection wherever the blank stickers are.

The quick buttons (6 / 12 / 30) select the first N positions; a fresh page starts at 12. The header counts what will actually print, and Print disables when nothing is selected. One print job is one sheet — for more than 30 labels, print again.

  • The QR code, encoding the batch’s public URL (with ?s=qr, so scans are distinguishable from shared links in your analytics).

  • A heat line — one chili glyph plus an explicit scale, e.g. 3/5 — when the batch has any estimated or overridden heat. It maps to the same five-band gauge shown on the public bottle page — a batch never shows one heat on the label and a different one when scanned:

    Peppers Label SHU
    1 Mild 1+
    2 Medium 2,500+
    3 Hot 15,000+
    4 Very hot 75,000+
    5 Extreme 300,000+

    A batch with no known heat (no peppers weighed in, no override) prints no gauge at all — there’s no “0 peppers” glyph, since that would misread as “definitely mild” rather than “unknown.”

  • An Ingredients: line, heaviest-first — the same label-legal ordering food packaging uses. Weighed ingredients sort by grams; ratio ingredients (e.g. “salt at 2% of mash weight”) are not weighable and are listed by name right after the weighed ones; anything with no quantity recorded comes last.

  • A Contains: line listing any of the FDA’s “big 9” allergens flagged on the batch’s ingredients (milk, eggs, fish, shellfish, tree nuts, peanuts, wheat, soy, sesame), in that fixed order. It’s derived live from the recipe/batch editor’s allergen flags — nothing to type twice — and it’s simply absent when nothing is flagged. It never prints an affirmative “contains none of the big 9” claim.

  • An optional footer line — see below.

The bottled date does not appear on the physical label — the die-cut is one inch tall and already spoken for by the QR code, heat line, ingredients and footer. The lot code, along with the full ingredient and allergen detail and dates, lives on the public bottle page the QR code points to.

Admin → Settings → Labels has one small text field, capped at 60 characters, that prints in small type at the bottom of every label — a cottage-food disclaimer, an address, whatever your labels legally need. Leave it empty and the label layout is exactly what it was before; there’s no blank line reserved for it. It’s global, not per-batch: change it in Settings and the next sheet you print picks it up.

The 60-character cap and the 100%-scale rule above are related: both exist so the die-cut geometry survives contact with reality. A longer footer would either wrap onto a second line or run off the sticker, and neither is something you want to discover after 30 labels are on jars.

The name, heat line and footer are fixed size — a shelf of bottles should read consistently. The Ingredients: and Contains: lines are the only ones allowed to shrink: a script measures the first label after it renders and steps the font size down from 6.5pt in quarter-point increments until the text fits inside the die-cut, or until it hits a 4.5pt floor — smaller than that isn’t legible on paper.

If even 4.5pt doesn’t fit, printing proceeds anyway (a clipped ingredient list beats a sheet that silently drifts off its die-cut), but the page shows a warning above the “Print” button and marks every label so the clipped state is visually obvious rather than discovered after peeling 30 stickers. The fix is the one in the warning text: shorten ingredient names in the batch (“white distilled vinegar” → “vinegar”) and reprint — there’s no other remedy, since the die-cut size and the 4.5pt floor are both fixed.