You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A bartender, sommelier, brewer, or drinks-app developer working in unitforge today has no domain-specific units. They can borrow from cooking (`fluidOunceUs`, `fluidOunceUk`, `milliliter`, `liter`) but lose every domain affordance: there is no `jigger`, no `pint` (and the term differs across regions anyway), no `pour`, no `keg`, no `shot` (also region-dependent), no `barspoon`.
This kit should cover the four main drinks-domain unit families: cocktails, wine, beer, and spirits. All four share the `VOLUME` dimension so they can forge across each other (1 wine pour = ? US shots = ? barspoons), but each family has its own conventions and regional foot-guns.
Proposed scope
Cocktails / bartending
jigger = 1.5 US fl oz = 44.36 mL (standard US shot; the bigger side of a double-ended jigger)
pony = 1 US fl oz = 29.57 mL (the smaller side)
barspoon ≈ 5 mL (metric teaspoon-equivalent stirring measure)
cocktail dash ≈ 0.8 mL (bitters-bottle dash; ~50 drops per oz; distinct from spice-rack dash in cooking kit)
cocktail drop ≈ 0.05 mL (dropper, ~20 drops per mL)
splash ≈ 5 mL (informal; cite that this is convention, not standard)
Wine pours
wine pour US = 5 US fl oz = 147.87 mL (TTB / restaurant standard)
wine pour EU = 125 mL exact (EU standard pour)
wine pour AU = 150 mL exact (Australia standard)
Bottle sizes: standard 750 mL, magnum 1.5 L, jeroboam 3 L, rehoboam 4.5 L, methuselah 6 L (and up; could ship the full Biblical naming or stop at magnum and jeroboam)
Beer
US pint = 16 US fl oz = 473.18 mL
UK pint = 20 imperial fl oz = 568.26 mL (the 20%-bigger Atlantic gap, same shape as the cup split in cooking)
bottle = 12 US fl oz = 355 mL (US standard; matches a can)
can = 12 US fl oz = 355 mL
tallboy = 16 US fl oz = 473 mL
growler = 64 US fl oz = 1.89 L (US standard)
half-barrel keg = 15.5 US gallons = 58.67 L (US commercial keg)
shot US = 1.5 US fl oz = 44.36 mL (same as jigger; ships under both names with cross-reference)
shot UK = 25 mL exact (UK standard pub measure)
shot AU / DE = 30 mL exact
shot RU = 50 mL exact (the iconic Russian shot; significantly larger)
double UK = 50 mL exact (two UK shots)
nip / nipperkin ≈ 30 mL (rare; UK historical)
Scope question: one kit or split?
Two paths:
One big kit (`unitforge/kits/drinks`) — all 30+ units in one barrel; subpath import works the same way.
Per-domain sub-kits (`unitforge/kits/drinks/cocktails`, `unitforge/kits/drinks/wine`, `unitforge/kits/drinks/beer`, `unitforge/kits/drinks/spirits`) — tree-shake friendly; a wine-app importer doesn't pay for keg sizes.
Recommendation: one kit with explicit named exports, since tree-shake works at the named-export granularity (per the cooking kit's `/#PURE/` + no-CallExpression convention). A wine-app importer that only writes `import { winePourUs } from 'unitforge/kits/drinks'` will only bundle that one unit; per-domain sub-kits add namespace friction without bundle wins.
Design problems
Region disambiguation (the big one)
"pint," "shot," and "pour" all have different values in different regions. Same kit-discipline as the cooking kit's cup/tablespoon split: ship as separate suffixed exports (`pintUs`, `pintUk`, `shotUs`, `shotUk`, `shotAu`, `shotRu`, etc.) and never alias the bare name.
Cocktail-dash vs cooking-dash collision
The cooking kit already ships `dash` (1/8 US teaspoon ≈ 0.616 mL, spice-rack convention). The cocktail-context dash from a bitters bottle is ~0.8 mL and is a distinct convention. Two paths:
Ship `cocktailDash` in this kit (explicit, verbose, no collision)
Ship `dash` and let consumers disambiguate via import path (`drinks.dash` vs `cooking.dash`)
Recommendation: `cocktailDash` in this kit's namespace. Verbose but unambiguous; matches the kit-discipline already established by `stickOfButterUs`-style explicit suffixes.
Keg sizes: ship US or US+UK or all?
US, UK, and German keg sizes all differ. Recommendation: ship US standard sizes (half-barrel, sixth-barrel) in the main namespace plus `firkin` / `kilderkin` (UK cask sizes; they survive in real-ale circles). German Maß / Halbe pairs (1 L / 0.5 L beer-hall measures) might belong in a future `drinks/locale-german` sub-kit.
Demo possibilities
Cocktail recipe converter: forge a martini recipe (2 oz gin + 0.5 oz vermouth + 1 dash bitters) into metric for a European bar.
Pint comparator: visualize the 20% Atlantic pint gap the same way the cooking kit shows the Atlantic cup gap.
Keg-math calculator: how many pints in a half-barrel; how many ounces in a magnum.
Wine-pour pricing: cost-per-pour math ($X per bottle ÷ pours per bottle).
Citations
TTB (US Alcohol and Tobacco Tax and Trade Bureau) — wine pour standards, US barrel definition
EU Council Directive 76/211/EEC — wine bottle and beer container nominal volumes
Standards Australia AS 2856 — beer glass sizes
Jerry Thomas, Bar-Tender's Guide (1862) — historical cocktail-dash convention
Harry Craddock, Savoy Cocktail Book (1930) — modern cocktail conventions
Effort
Cocktail units: ~0.5 day
Wine units: ~0.5 day
Beer units (with keg sizes): ~1 day
Spirit / shot regional disambiguation: ~0.5 day
Demo (pick one of the above ideas): ~1 day
Total: ~3-4 days
Acceptance criteria
Kit at `unitforge/kits/drinks` with subpath export
All four families (cocktails, wine, beer, spirits) shipped with regional disambiguation where relevant
Each region-ambiguous unit shipped with explicit suffix (`pintUs`, `pintUk`, `shotUs`, `shotRu`, etc.); no bare aliases
Docstring on `cocktailDash` cross-references cooking kit's spice-rack `dash` to prevent confusion
Each unit's docstring cites the relevant standard (TTB, UK W&M 1985, EU 76/211/EEC, Standards Australia AS 2856, Jerry Thomas / Harry Craddock for historical bar conventions)
Motivation
A bartender, sommelier, brewer, or drinks-app developer working in unitforge today has no domain-specific units. They can borrow from cooking (`fluidOunceUs`, `fluidOunceUk`, `milliliter`, `liter`) but lose every domain affordance: there is no `jigger`, no `pint` (and the term differs across regions anyway), no `pour`, no `keg`, no `shot` (also region-dependent), no `barspoon`.
This kit should cover the four main drinks-domain unit families: cocktails, wine, beer, and spirits. All four share the `VOLUME` dimension so they can forge across each other (1 wine pour = ? US shots = ? barspoons), but each family has its own conventions and regional foot-guns.
Proposed scope
Cocktails / bartending
Wine pours
Beer
Spirits
Scope question: one kit or split?
Two paths:
Recommendation: one kit with explicit named exports, since tree-shake works at the named-export granularity (per the cooking kit's `/#PURE/` + no-CallExpression convention). A wine-app importer that only writes `import { winePourUs } from 'unitforge/kits/drinks'` will only bundle that one unit; per-domain sub-kits add namespace friction without bundle wins.
Design problems
Region disambiguation (the big one)
"pint," "shot," and "pour" all have different values in different regions. Same kit-discipline as the cooking kit's cup/tablespoon split: ship as separate suffixed exports (`pintUs`, `pintUk`, `shotUs`, `shotUk`, `shotAu`, `shotRu`, etc.) and never alias the bare name.
Cocktail-dash vs cooking-dash collision
The cooking kit already ships `dash` (1/8 US teaspoon ≈ 0.616 mL, spice-rack convention). The cocktail-context dash from a bitters bottle is ~0.8 mL and is a distinct convention. Two paths:
Recommendation: `cocktailDash` in this kit's namespace. Verbose but unambiguous; matches the kit-discipline already established by `stickOfButterUs`-style explicit suffixes.
Keg sizes: ship US or US+UK or all?
US, UK, and German keg sizes all differ. Recommendation: ship US standard sizes (half-barrel, sixth-barrel) in the main namespace plus `firkin` / `kilderkin` (UK cask sizes; they survive in real-ale circles). German Maß / Halbe pairs (1 L / 0.5 L beer-hall measures) might belong in a future `drinks/locale-german` sub-kit.
Demo possibilities
Citations
Effort
Acceptance criteria