出自flip the world

Homebrewing

Tommy​(留言 | 貢獻)2026年10月10日 (六) 22:23的修訂 (Remove from Category:Projects (different topic))
(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)

Homebrewing — eleven batches of hazy / New England IPA brewed at home in 10-litre batches, December 2025 to October 2026. Every batch is logged with gravity readings, pH, hop timing and a tasting note, and each recipe is version-controlled in git so every change can be traced back to the batch that caused it. This page summarises what was brewed, what went wrong, and the process rules that came out of it.

Batches Period Batch size Styles Recipes (current version)
11 (12 brews) 2025-12 → 2026-10 6–11.5 L Hazy IPA, DDH NEIPA, Milkshake IPA 妃子起笑 Crazy Concubine (v4.3), Orange Glow (v2.6), Strange Haze (v1.1), Milkshake IPA (v1)

The data

Original and final gravity of every batch
Original and final gravity of every batch

The first six batches had no written recipe and wild original gravities (up to 1.110 — a 10.5% "IPA"). From #0007 on, every batch follows a versioned recipe and the OG has been pulled back into the 1.050–1.076 range the recipes are designed for.

ABV and apparent attenuation per batch
ABV and apparent attenuation per batch

Attenuation went from ~71% (early batches, under-pitched, no oxygen) to a consistent 81–88% once pure-oxygen pitching, yeast nutrient and modern yeast strains were adopted.

Fermentation curves of four batches
Fermentation curves of four batches

The single most useful chart. With one pack of Verdant and no oxygen (#0006) fermentation drags on for 12 days. With LalBrew Pomona, or two packs plus pure oxygen, ~90% of the sugar is gone within 2 days. Any schedule written as "dry hop on Day 3" is simply wrong for these yeasts.

Planned vs actual timing of key events
Planned vs actual timing of key events

Since #0009 each batch starts with a one-line written plan (dry-hop day and gravity, green-light day, transfer day, expected FG). The log then measures the error. The first two plans were badly off — fermentation finished 8–12 days early — and each new plan is corrected from the previous error. #0011's first dry hop landed only one day early.

Mash pH and finished-beer pH
Mash pH and finished-beer pH

pH turned out to be the hidden cause of "too bitter". The same tap water gave a mash pH of 4.76 in one batch and 5.81 in another, so the correction has to go in either direction.

Batch log

# Date Beer / version Yeast OG → FG ABV Result / key lesson
0001 2025-12-03 DDH Hazy IPA LalBrew New England 1.062 → 1.018 5.8% Bottle-conditioned. Lesson: add priming sugar, don't refrigerate during bottle conditioning.
0002 2025-12-28 Hazy IPA Mauribrew Weiss 1.040 → ? – Poor mash efficiency; dry-hop order wrong; forgot to measure FG before bottling.
0003-1 2026-02-26 IPA Mauribrew ALE514 1.050 → 1.010 5.3% Flat aroma and taste; too much priming sugar, vegetal smell.
0003-2 2026-02-28 IPA + 900 g oats ALE514 1.056 → 1.016 5.3% Under-pitched; bottled while airlock still active → gushers on opening.
0004 2026-03-15 Milkshake IPA LalBrew New England 1.110 → 1.030 10.5% Lid not sealed (airlock silent 36 h); bottled while still fermenting; weak carbonation, slightly sour.
0005 2026-04-23 Milkshake IPA "light" Verdant IPA 1.102 → 1.030 ~9.5% Failed. Bittering hops 22 g instead of 6 g; cold crash dropped all yeast so bottles never carbonated — most poured away.
0006 2026-05-09 Hazy IPA Verdant IPA 1.062 → 1.008 7.1% Second dry hop at Day 9 triggered hop creep (1.014 → 1.008). Clean, bitterness fine, aroma weak. First keg + forced carbonation.
0007 2026-06-12 Orange Glow v2.3 Verdant IPA 1.080 → 1.015 8.5% First versioned recipe. Not hot, bitterness right after 3 weeks, but aroma lacking and colour unappealing.
0008 2026-06-25 Orange Glow v2.4 LalBrew Pomona 1.090 → 1.016 9.7% Pomona hit 1.016 by Day 3 — dry hop missed its window. Finished pH 3.83 → harsh bitterness drowned the juice.
0009 2026-07-29 Orange Glow v2.5 "clean" Pomona 1.050 → 1.006 5.8% Boiled off 4–5 L, OG shot to 1.110, over-diluted back to 1.050. pH 4.30 — bitterness finally right. Thin body, under-carbonated (keg fridge is 7–8 °C, not 3 °C). Passable daily hazy.
0010 2026-08-26 Strange Haze v1 (blueberry vanilla) Verdant ×2 1.070 → 1.012 7.6% Pre-boil OG check caught an over-concentrated wort in time. No harshness, no diacetyl — but not enough juice, sweetness, purple colour or vanilla; grainy from 20% oats.
0011 2026-10-08 妃子起笑 v4.3 (PB Craft kit) Weiss 1.052 → … – In progress. Mash pH corrected 4.89 → 5.37; dry hop 1 landed one day ahead of plan.

The beers

妃子起笑 · Crazy Concubine — Hazy Pale Ale (OG 1.052, ~5%)
The first recipe. v1's second dry hop went in after fermentation had finished and hop creep ate the body (FG 1.014 → 1.008, 5.8% instead of 5%). v3 fixed it with zero new cost — one dry hop during active fermentation, cooler mash, pure-oxygen pitch, no cold crash. v4 added a 78 °C whirlpool for front-end juiciness.
Orange Glow — DDH NEIPA (OG ~1.066, ~7%)
The main development line: v1 → v2.6 across three brews. Swapped glucose for DME, Extra Pale for Golden Promise, Verdant for Pomona, added ALDC and Fermaid-O, moved to a split dry hop. #0009 drifted to a pale 5.8%; v2.6 brings back Munich for the orange-gold colour and uses a Strata / Mosaic / Nelson / Peacharine hop bill.
Strange Haze — Imperial Milkshake IPA (blueberry vanilla)
Built around a pre-printed label (9% ABV, purple nebula), so the fruit is blueberry for colour. v1 was "neither here nor there"; v1.1 cuts bitterness, adds lactose back, raises mash to 69–70 °C and splits 800 g of blueberry between mid-fermentation and post-fermentation.
Milkshake IPA — low residual sugar (6 L)
Body from oat/wheat protein instead of lots of lactose; unsweetened mango + passion fruit purée. Not yet brewed under this recipe.

What I learned

Fermentation

  • Dry hop by gravity, not by the calendar. The first dry hop goes in when gravity has dropped about half-way from OG to FG, while yeast is still active (biotransformation + it mops up hop-creep sugar). With fast yeast that can be Day 1, so start measuring every 12 h from Day 1.
  • Split dry hop. DH1 during active fermentation for biotransformation; DH2 only after fermentation has stopped, so the CO₂ doesn't scrub the aroma away. After DH2, confirm gravity is stable again (second wave of hop creep).
  • Hop creep is real. Hop enzymes break down dextrins, so a late dry hop restarts fermentation: thinner body, higher ABV, and in bottles — gushers or bombs.
  • "Green light" before packaging: two identical gravity readings ≥ 2 days apart and a forced diacetyl test (50 ml sample, 60–65 °C water bath for 15 min, sniff for butter). Never package on a fixed day count — #0003-2, #0004 and #0008 all did, and all had carbonation problems.
  • Pure oxygen 60–90 s before pitching lets a single dry pack ferment a 1.07+ wort; no starter needed. After pitching, oxygen is the enemy.
  • Fermenting beer runs 1–2 °C above the water bath during the first 48 h. Set the bath ~1.5 °C below the target beer temperature at peak, then raise it to 21.5 °C for the diacetyl rest.

Brew day

  • Check pre-boil gravity and volume before boiling. Weigh the pot (total − empty pot weight ≈ litres), measure pre-boil gravity, and compute the target end volume = pre-boil points × litres ÷ target points. Boil to that volume, not to a timer. #0009 boiled off 4–5 L (normal is 1–2 L) and hit 1.110.
  • Boil gently, lid off. Hard boiling over-concentrates bitterness and scorches. Excess evaporation turned out to be a big part of the "nasty bitterness" in #0007/#0008.
  • Measure mash pH, not water pH, and be ready to go both ways. Sample 10–15 min after mash-in, cool to 20–25 °C, target 5.2–5.4. Keep both baking soda and phosphoric/lactic acid on hand. This soft, low-alkalinity water swings hard: ~1 g baking soda ≈ +0.67, 1 ml phosphoric ≈ −0.28 — use half steps and re-measure. Calibrate the pH pen every brew day and store the electrode wet.
  • Pale-malt grists (Extra Pale/Pilsner) tend to mash high (~5.7); grists with Munich plus gypsum tend to mash low.

Bitterness and aroma

  • Fix bitterness at the source, never by cutting hops. The culprits were pH (finished pH 3.83 = throat-biting), gypsum (sulfate sharpens bitterness), over-boiling, hops left in too long, and drinking too young. Bittering hops go in a bag, on time, and come out after the boil; dry-hop bags come out after 2–3 days.
  • Whirlpool and dry hop do different jobs. Whirlpool (75–78 °C) gives juice on the palate; dry hop gives the aroma in the nose. Cutting either one loses something the other can't replace.
  • Aging softens bitterness but kills hop aroma at the same time — fix bitterness at the source and drink fresh (2–3 weeks) instead.
  • 0.5 kg oats + 1 kg wheat in 4.5 kg of grain is already enough haze; 1 kg of oats (20%) tasted grainy.

Packaging

  • Keg + forced carbonation is now the default (#0009 on). Bottle conditioning kept failing: too much sugar (#0003-1), bottling before fermentation finished (#0003-2, #0004), and a cold crash that left no yeast to carbonate (#0005). No cold crash for hazy beers.
  • Low-oxygen transfer: purge the keg with CO₂ three times, fill from the bottom through the liquid post, minimum headspace.
  • Antioxidant in the keg: ascorbic acid 0.3 g + potassium metabisulfite 0.25 g per 10 L, always as a pair. Ascorbic acid alone makes H₂O₂, which with trace iron/copper (Fenton reaction) oxidises the beer worse than nothing. The chemicals are ~20% of the protection; the purging is the other 80%.
  • Measure the fridge. The keg fridge is actually 7–8 °C, so 2.4–2.5 volumes needs ~15 PSI, not the textbook 11–12 PSI. #0009 and #0010 were both under-carbonated for this reason.

Method

  • Write the plan down before brewing (one line: dry-hop day and gravity, green light, transfer, FG) and measure the error afterwards. The predictions are converging batch by batch.
  • Log everything with a timestamp — gravity with date and time, pH with temperature. Most of the lessons above only became visible once the numbers were next to each other.
  • Change one or two things per version. The recipe history (Crazy Concubine v1→v4, Orange Glow v1→v2.6) reads like a commit log: each version cites the batch that justified it.

Equipment

  • Kettle + fermenter in a temperature-controlled water bath; weigh-the-pot volume estimation
  • Pure O₂ cylinder with diffusion stone; refractometer + hydrometer; pH pen (4.01 / 7.00 buffers)
  • Inkbird IHT-1P instant-read thermometer (from #0010)
  • 8 L keg on external CO₂; 128 oz mini keg for in-keg conditioning
  • Additives: Fermaid-O (2.5 g at pitch + 2.5 g at ~24 h), Maturex L ALDC 0.2–0.3 ml, CaCl₂