Tiramisù Spoilage Calculator · v1.3
User Guide
A practical reference for product developers, food technologists and QA staff using the calculator to screen tiramisù formulations against yeast and mold spoilage under refrigeration.
§ −1What's new in v1.3
v1.3 adds the missing piece of the picture: inter-compartment transport of relevant species, plus two cocoa-specific physical effects that mattered far more than the original spec acknowledged.
The three additions
- Inter-compartment transport. Four species redistribute between adjacent compartments over shelf life:
- Water — drives aw equalisation. A dry cocoa wets up by contact with cream below; a moist biscuit equilibrates with the cream layers it touches.
- Ethanol — Marsala from biscuit and cream migrates between layers and partitions into the headspace as vapour (Henry's law, KLV ≈ 0.05 at 4 °C).
- Sorbate / benzoate — weak-acid preservatives migrate from where applied to adjacent compartments. Mass-conserving: cream loses what biscuit gains.
- Cocoa thin-layer aw coupling. Effective surface aw from cream below + headspace humidity above, weighted by cocoa thickness.
- Differentiated nutrient factors per surface. Mold growth rate is multiplied by a compartment-specific nutrient factor that reflects how much real growth substrate is available. Cocoa powder is nutrient-limited (0.2). Lid underside receives only condensate-borne aerosols (0.3). Cup rim above product gets splatter + condensate runback (0.5). Bulk dairy is unconstrained (1.0). All editable per compartment.
Spore-dose dependence (added in v1.3.2)
The visible-mold time now depends on how many spores are present, not just whether any are. With N spores on a surface, the time to first visible colony shifts earlier by σ_germ × log(N) (Dantigny 2007 germination-time model). With σ_germ at 10 % of the single-spore time, you get a meaningful spread:
| Airborne mold spores per cup | Predicted shelf life (defaults) |
|---|---|
| 1 (ultra-clean line) | ~13 d |
| 10 | ~11 d |
| 100 (typical industrial) | ~8 d |
| 1,000 (contaminated line) | ~4 d |
| 10,000 (very poor hygiene) | ~2 d |
This matches industry observation: formulations don't differ much between competing tiramisù brands, but plant-hygiene differences explain why one brand declares 5 d and another 14 d for similar recipes. Hygiene is the dominant lever in v1.3.2.
Ethanol vapour inhibition of surface mold
A separate physical change in v1.3: surface mold compartments (cocoa_surface, lid_product_facing) now respond to ethanol vapour from the headspace, computed from the aqueous EtOH in the cream and biscuit. Grounded in Dantigny et al. 2005 (Int J Food Microbiol 98: 261–269): MIC for *Penicillium* spoilage molds is 3–5 % v/v, with a quadratic-decline γ shape. v1.3 uses MIC = 5 % v/v (worst-case end of the literature range).
Practical effect: at 1–2 % aqueous Marsala the vapour-phase mold inhibition is small (γ_EtOH ≈ 0.97 → 3 % rate reduction). At 4–5 % aqueous EtOH it becomes meaningful (γ_EtOH ≈ 0.85 → 15 % reduction). At 8 %+ it's strong. This matches the industrial reality that Marsala-heavy products do enjoy modestly extended shelf life through this mechanism.
What changed numerically
v1.3 predicts a default-scenario shelf life of about 5.4 days reported (7.7 d predicted × 0.7 safety), with the cup rim (a new compartment, see below) as the limiting compartment — not the cocoa. This is because the new cocoa-specific protections (nutrient factor 0.2, thin-layer aw 0.94, modest ethanol-vapour effect) push the cocoa fail time out to ~40 d in worst-case mode, while the cup rim and lid_product_facing have no equivalent protections. The model now correctly highlights that headspace-facing package surfaces become the typical industrial failure mode once cocoa is properly protected.
This is documented in the literature: industrial QA returns for tiramisù regularly cite lid-underside and cup-rim mold colonies (often Cladosporium or Penicillium) from condensation drops, not cocoa-surface colonies. v1.3 now reproduces this hierarchy.
The fourth airborne source: cup rim
A new cup_rim compartment by default — the internal cup-wall ring above the product surface, ~8 cm² for a 100-g cup. This compartment captures three real, previously-unmodelled effects:
- Airborne deposition at filling now distributes by area across the cocoa, the cup rim and (with half-weight) the lid product-facing surface. v1.2 dumped everything onto the cocoa, which is wrong: settle-plate dynamics deposit spores on any exposed surface during the open phase.
- Container CFU/cm² seeds the cup rim with the same pre-fill cleanliness as the cup wall (it's the same cup, same surface).
- Rim → cocoa drip-flux transfers a small fraction (5 % by default) of the rim's initial mold spores to the cocoa surface at t = 0, simulating gravity, vibration during transport, and condensation-droplet runoff. Even with a perfectly sterile lid, the rim picks up airborne spores during filling and bleeds a small fraction onto the cocoa.
Natamycin is applicable to the cup rim (antimicrobial cup-interior coatings exist industrially), so the rim can be protected if it becomes your limiting compartment.
Practical workflows enabled by v1.3
- Cocoa thickness optimisation. Sweep
layer_thickness_mmfrom 0.5 to 4 mm. Diminishing returns above 2 mm. - Heavy-Marsala diagnostics. Raise biscuit EtOH from 1 % to 5 % and see the cocoa surface fail time extend by a real but modest amount.
- Preservative migration check. Apply sorbate to cream only; toggle sorbate transport between off and slow; see how much protection the biscuit "borrows" from the cream over shelf life.
- Surface protection sweep. Once cocoa is protected, the cup rim and lid become the limiters. Apply natamycin 10 ppm to
cup_rimandlid_product_facingto push them out and find the next bottleneck. - Cup-cleanliness sensitivity. Halve
container_mold_per_cm2and see how much it extends the rim-limited fail time. This tells you whether to invest in cleaner cup-supplier specs.
§ 00Typical contamination levels — reference
The numbers below are the values to put into the bioburden inputs based on the kind of plant, line, packaging supplier, and ingredient source you actually have. They are literature-grounded order-of-magnitude estimates, not strict standards; bracket them with your supplier CoAs and your own settle-plate / swab data when possible.
Ingredient bioburden (CFU per gram)
From supplier certificates of analysis for standard EU-grade dairy ingredients, plus industry experience:
| Ingredient | Premium / pasteurised | Standard industrial | Lower-grade / problem batch |
|---|---|---|---|
| Mascarpone (pasteurised, fresh) | < 10 yeast/g · < 1 mold/g | 10–50 / 1–10 | 100–500 / 10–100 (off-spec) |
| UHT cream | < 1 / 0 | 1–10 / 0–1 | > 10 (rare; indicates rework) |
| Pasteurised egg yolk | < 10 / 0 | 1–100 / 0–5 | 100–1000 / 5–20 |
| Sugar (sucrose) | 0 / 0 | 0 / 0 | 0 / 0 (effectively sterile) |
| Marsala / Vin Santo | 10–50 / 0–5 | 50–200 / 5–20 | 500+ / 20+ (suspect of Z. bailii contamination) |
| Coffee infusion (filtered) | 1–10 / 0–1 | 10–100 / 1–10 | 100–500 / 10–50 (unfiltered or aged) |
| Savoiardi (baked, sealed) | 1–10 / 1–10 | 10–100 / 10–50 | 100–500 / 50–200 (broken seal, ambient storage) |
| Untreated cocoa powder | 500–2000 yeast/g · 50–200 mold/g | 2000–5000 / 100–500 | 5000–10000 / 500–1000 |
| Steam-treated cocoa | < 50 / < 10 | 50–200 / 10–50 | > 200 / > 50 (treatment failure) |
| Sterilised cocoa (ALPHA / similar) | < 10 / < 1 | — | — |
Packaging surface bioburden (CFU per cm²)
From swab-test data and supplier specifications. The "container" CFU/cm² applies to the cup interior (which also seeds cup_rim).
| Surface state | Yeast | Mold | Description |
|---|---|---|---|
| Pharma-grade / freshly moulded in clean room | 0.001–0.01 | 0.001–0.01 | Injection moulded under HEPA, immediate sealing; rarely achievable for dairy cups |
| Decontaminated (UV, H₂O₂, or peroxide fog) | 0.01–0.05 | 0.01–0.05 | Cups sterilised inline before filling; specified for premium long-life products |
| Standard industrial (clean storage, prompt use) | 0.05–0.2 | 0.02–0.1 | Cups stored sealed in dust-free conditions, used within days of delivery |
| Standard industrial (default in calculator) | 0.1 | 0.05 | Realistic middle-of-the-road industrial default |
| Long-stored / dusty warehouse | 0.5–2 | 0.2–1 | Cups sat for weeks in ambient warehouse; visible dust accumulation |
| Poor handling / open storage | 2–10 | 1–5 | Pallets handled without dust covers, cups exposed to plant air for hours |
| Lid only — printed inside | 0.1–0.5 | 0.05–0.2 | Ink and printing solvents can carry residual contamination |
Airborne contamination during filling (CFU per cup)
The total number of cells/spores deposited on the exposed product surfaces (cocoa + cup_rim + briefly the lid) during the time the cup is open on the filling line. Driven by air quality and dwell time. Settle-plate measurements next to the filling head, converted to per-cup deposition.
| Plant condition | Yeast | Mold | Typical fit |
|---|---|---|---|
| Pharma-grade (ISO Class 7 / Grade B) | < 1 | < 0.1 | Not realistic for dairy; specified for parenteral pharma |
| Aseptic dairy (ISO Class 8 / Grade C) | 1–3 | 0.1–1 | Modern UHT or extended-shelf-life dairy plant with HEPA fill area |
| Standard dairy production (clean line, default) | 5–20 | 2–10 | Well-maintained dairy plant, daily CIP/SIP, restricted access during fill |
| Older / less controlled plant | 20–100 | 10–50 | Open production floor, lower air-change rate, occasional door opening |
| Poor hygiene / contaminated line | 100–500 | 50–500 | Visible contamination on settle plates; QA action threshold |
| Gross contamination | 500+ | 500+ | Plant shutdown territory; do not produce |
per_cup ≈ (CFU on plate per minute) × (cup-open seconds) / 60 × (cup-opening cross-section / plate area). For a typical 1-s exposure with the cup mouth ~80 cm², a settle plate of ~65 cm² shows roughly the same CFU as one cup picks up per second. Repeat across shifts; use the 95th percentile.
Per-compartment aw, pH and EtOH
Post-equilibration values typically observed:
| Compartment | aw | pH | EtOH % v/v (aqueous) | Notes |
|---|---|---|---|---|
| Cocoa surface | 0.92–0.95 (model-derived from thickness) | 5.5–6.5 (cocoa-cream blend) | 0 (cocoa doesn't carry alcohol) | aw automatically computed from thickness |
| Lid product-facing | 0.88–0.95 (condensate-driven) | ~6.0–6.5 | 0 (vapour-derived) | Coldest surface, often saturated at refrigeration |
| Cup rim | 0.90–0.95 | ~6.0–6.5 | 0 (vapour-derived) | Receives some product splatter |
| Top cream | 0.92–0.95 | 6.0–6.5 (standard); 4.8–5.2 (acidified) | 0.2–2 (depending on Marsala) | Mascarpone-rich, alkaline by default |
| Biscuit soaked | 0.95–0.97 | 5.0–5.8 (coffee + Marsala lower pH) | 1–5 (Marsala-heavy) | Highest aw compartment |
| Bottom cream | 0.92–0.95 | 6.0–6.5 | 0.2–2 | Same physics as top cream |
| Cup wall | 0.92–0.95 (cream contact) | ~6.0–6.5 | 0.2–2 (cream contact) | Anaerobic — mold doesn't grow here in practice |
Lid materials and OTR
| Lid material | OTR (cm³/m²/day) | CO₂TR | Cost-per-cup proxy | When to use |
|---|---|---|---|---|
| PP only | 80 | 320 | cheapest | Short-life products (≤ 7 d), no MAP |
| PET only | 30 | 120 | +10–20 % | Short to mid-life, no MAP |
| PP + EVOH (3-layer) | 2 | 8 | +30–50 % | Mid-life MAP (14–21 d) |
| PET/Al/PE laminate | 0.5 | 2 | +40–60 % | Long-life MAP (21–35 d) |
| Aluminium peel foil | 0.05 | 0.2 | +50–80 % | Premium long-life (35+ d), gas-flushed |
§ 00What's new in v1.2
Five additions to the v1.1 calculator. The predictive engine and parameter set are unchanged; numerical results for identical inputs match v1.1 exactly.
- Auto-compute mode. Toggle at the top of the page. When on, any numeric or selection change triggers a debounced recompute (~200 ms). The UI dims briefly while the engine runs. Useful for live "what-if" sliding; turn off when entering many inputs at once.
- Save / Load. Two buttons in the top bar export the current scenario to JSON and reload it. The file format includes a small header (
_format,_saved) for compatibility checking; older saves missing those fields are accepted as long as they contain the corecompartments,storageandadvancedobjects. - Animation panel. A stylised cup cross-section below the top banner plays the predicted spoilage trajectory after each Compute. Run / Pause / Stop / Reset, with adjustable speed (sim days per real second). Mold colonies appear and grow on surface compartments; cream layers tint amber-to-red as yeast log10 N rises toward the threshold; the headspace tints blue as CO₂ rises. Buttons are disabled until a result is available.
- Preservative applicability shading. Cells where a preservative cannot be physically applied to that compartment type are now shown with a hatched pattern and disabled inputs. Sorbate and benzoate are water-soluble and only applicable to bulk matrices; natamycin works on the cocoa surface (co-dusted) and on the lid product-facing surface (coating), but not on the cup wall. Hover the cell or click the ▦ icon next to the panel title for the full explanation.
- Wider aw column. The aw input in the compartments table was previously too narrow to show the full value (0.93 wrapped or clipped). Now doubled in width; pH and logNmax columns slightly narrowed to compensate.
§ 01What this calculator is — and is not
This tool predicts the time to spoilage of a refrigerated, single-cup industrial tiramisù-type dessert under user-defined conditions. It simulates two worst-case organisms in parallel:
- Yeast: Zygosaccharomyces bailii — preservative-resistant, osmotolerant, ethanol-tolerant. Causes cup deformation, off-flavours and gas pockets.
- Mold: Penicillium roqueforti — psychrotrophic, CO₂-tolerant, the classic MAP-defeating dairy spoiler. Causes visible surface colonies.
For each user-defined compartment of the product (cocoa surface, cream layer, biscuit layer, lid interface, etc.), the calculator computes the predicted time to reach a spoilage threshold and returns the limiting (compartment × organism) combination as the bottleneck for shelf life.
How to think about the result
The headline number is a deliberately conservative estimate of when a worst-case yeast strain or worst-case mold spore would, given the inputs, render the product unacceptable. Two scenarios with identical inputs should rank consistently. The absolute number is most useful as a relative comparison: scenario A predicts 5 days, scenario B predicts 22 days — therefore B is the preservation strategy worth challenge-testing first.
§ 02Quick start (5 minutes)
The fastest path from open-tab to result.
- Open the calculator. All inputs are pre-filled with conservative defaults for an industrial fresh tiramisù (4 °C, PP-only lid, air headspace, no preservatives, pH 6, aw ~ 0.93).
- Click Compute. The output appears below: headline shelf life, per-compartment matrix and a two-panel plot.
- Identify the limiting factor from the headline panel. It will name the compartment, the organism, and the dominant γ term (the hurdle currently doing most of the work).
- Adjust one variable — temperature, lid material, sorbate ppm, pH — and recompute. The new prediction shows how much that one change buys you.
- Iterate until the limiting factor changes. That tells you you've shifted to a different bottleneck and need a different lever.
Default → predicted shelf life ≈ 2.5 days, limited by mold on the cocoa surface, dominant γ = temperature.
Change lid to "Aluminium peel foil laminate" + set headspace flush to 70 % CO₂ → predicted shelf life jumps to ≈ 31 days, limited by mold on cocoa surface, dominant γ = CO₂. Temperature is no longer the bottleneck; you've moved the hurdle stack.
§ 03Filling inputs
Inputs are grouped into seven panels in the calculator. Below: what each one means, what to put in, common pitfalls.
Storage
Temperature (°C)
Single, constant refrigeration temperature. Default 4 °C reflects regulatory dairy-cold-chain target.
range: −5 to 25 · default: 4
Simulation horizon (days)
How long to run the integration. Set comfortably longer than the shelf life you're targeting. 60 d is enough for almost all refrigerated dairy products.
range: 1 to 365 · default: 60
Safety factor
Final multiplier applied to the predicted shelf life. Reported value = factor × predicted. 0.7 is conservative; use lower (0.5) for first-launch products or sensitive matrices, higher (0.85) only with strong historical validation data.
range: 0.5 to 1.0 · default: 0.7
Compartments
The product is modelled as N user-defined compartments. The default template covers six layers plus headspace:
| Compartment | Type | What it represents |
|---|---|---|
cocoa_surface | surface_air | Cocoa dusting at the air interface. Usually the limiting compartment for mold. |
lid_product_facing | surface_package | Underside of the lid in contact with headspace. Mold can colonise from condensation drops. |
top_cream | bulk | The cream layer immediately under the cocoa. |
biscuit_soaked | bulk | Coffee-soaked savoiardi layer in the middle. Often the highest-bioburden compartment. |
bottom_cream | bulk | The cream layer at the base of the cup. |
cup_wall | surface_package | Inner cup wall in contact with the bottom cream. |
aw and pH, enter post-equilibration values — what the layer will be 24–72 h after assembly, when moisture and acid have diffused. v1 does not simulate cross-compartment transport, so a dry cocoa surface entered at aw = 0.4 will be treated as such for the whole shelf life, which is unrealistic. Equilibrated cocoa-cream interface is typically aw ≈ 0.92 to 0.95.
Per-compartment fields
Water activity (aw)
Free water available for microbial growth. Z. bailii grows down to 0.80, P. roqueforti down to 0.83. Mascarpone cream typically 0.92–0.95; soaked biscuit 0.96–0.98.
range: 0.60 to 0.99
pH
Acidity of the compartment. Dairy cream layer ~6.0–6.5, coffee-soaked biscuit slightly lower (~5.5). Lowering pH below 5 is the single most cost-effective hurdle because it dramatically activates sorbate and benzoate.
range: 2.0 to 9.0
Ethanol (% v/v in aqueous phase)
Marsala or other liqueur. Express as the alcohol concentration in the water phase of that compartment, not as % of total mass. Typical: 0.5–2 % for cream, 1–5 % for heavily-soaked biscuit.
range: 0 to 20
Carrying capacity (log CFU/g)
Maximum population that the matrix can support. Standard yeast spoilage carrying capacity in dairy is ~10⁸ CFU/g, which equals log Nmax = 8. Rarely needs adjustment.
range: 6 to 10 · default: 8
Headspace & packaging
Models the gas phase above the product, including initial flush, biscuit-trapped air and slow gas exchange through the lid.
Headspace volume and lid area
Geometric properties of the cup. A typical 100-g single-serve tiramisù cup has Vhs ≈ 25–35 mL and Alid ≈ 8–12 cm². Measure on real product.
Biscuit pore air
Trapped air inside the porous savoiardi structure. Even after coffee soaking, residual microbubbles persist. Acts as an O₂ reservoir that defeats short-term gas flushing.
typical: 1–3 mL for 30–50 g of biscuit
Fraction of biscuit pore air still present
How much of the dry biscuit's pore air survives the coffee soak. 0.5 is a reasonable industrial average. Heavily-soaked, vacuum-impregnated biscuit may go as low as 0.1.
range: 0 to 1 · default: 0.5
Initial gas flush (% v/v)
Composition of the gas blown into the cup before sealing. Air = 21 % O₂, ~0 % CO₂. Inert flush = 0 % O₂, 100 % N₂. CO₂-rich MAP = 30–70 % CO₂ with N₂ balance. The two values do not need to sum to 100 — the remainder is assumed to be inert (N₂).
Lid material and permeability
Choose from the dropdown. Lid permeability is critical because CO₂TR is typically 3–6× OTR for the same film, so a CO₂-enriched headspace deflates faster than air refills — the more you spend on CO₂ flush, the more you need a barrier lid to keep it there.
Aluminium peel foil = best barrier · PP only = no barrier
Preservatives
Each compartment has independent toggles for sorbate, benzoate and natamycin. Add ppm and tick the box; setting ppm without ticking leaves the preservative inactive.
Applicability per compartment (v1.2)
Each preservative cell in the table is enabled only where the preservative can physically be applied to that compartment type. Cells with a hatched pattern are inactive on purpose:
| Compartment type | Sorbate | Benzoate | Natamycin |
|---|---|---|---|
| Bulk (cream, biscuit) | ✓ | ✓ | ✓ |
| Cocoa surface (powder) | — | — | ✓ co-dusted |
| Lid product-facing | — | — | ✓ as coating |
| Cup wall | — | — | — |
Sorbate and benzoate are water-soluble preservatives that act through the aqueous phase of a bulk matrix; they cannot be sprinkled on a powder or deposited on a hard packaging surface in any normal industrial process. Natamycin can be applied as a fine powder (co-dusted with cocoa) or as an antimicrobial lid coating, but the cup wall is not a realistic application target.
| Preservative | Active form | Effective vs | Practical range |
|---|---|---|---|
| Potassium sorbate | Undissociated sorbic acid (pKa 4.76) | Yeasts, molds | 500–1000 ppm at pH ≤ 5.0 |
| Sodium benzoate | Undissociated benzoic acid (pKa 4.20) | Yeasts, molds | 200–800 ppm at pH ≤ 4.5 |
| Natamycin | Direct membrane binding | Molds only (surface) | 5–20 ppm on surface, dry-coat or dusted |
Bioburden
The initial microbial load on day zero, split into yeast and mold and into four sources:
- Ingredients — mass × CFU/g for each ingredient routed to each bulk compartment.
- Container / cup wall — CFU/cm² × surface area in contact.
- Lid — CFU/cm² × lid area facing product.
- Airborne — total CFU deposited per cup during filling (simpler than CFU/m³ × time).
- Cocoa — dosed separately because it goes only to the cocoa_surface.
Reference contamination levels
Practical ranges for the four bioburden sources, by scenario class. All values are total CFU (or mold spores) per gram, per cm², or per cup as indicated. The "yeast" and "mold" splits below refer to total yeast CFU/g and total viable mold spores/g respectively.
Ingredients (CFU/g)
| Ingredient | Clean (premium / EU dairy) | Standard (typical supplier) | Poor (uncontrolled / commodity) |
|---|---|---|---|
| Mascarpone (pasteurised) | yeast < 10 mold < 1 | yeast 10–50 mold 1–10 | yeast 100–1000 mold 50–500 |
| UHT cream | yeast < 1 mold < 1 | yeast 1–10 mold < 1 | yeast 10–100 mold 1–10 |
| Pasteurised egg yolk | yeast < 1 mold < 1 | yeast 1–10 mold < 1 | yeast 10–100 mold 1–10 |
| Sugar (sucrose) | 0 / 0 | 0 / 0 | yeast 0–10 mold 0–10 |
| Coffee infusion (filtered) | yeast 1–10 mold < 1 | yeast 10–100 mold 1–10 | yeast 100–1000 mold 10–100 |
| Marsala / Vin Santo wine | yeast 10–100 mold < 10 | yeast 100–500 mold 10–50 | yeast 500–5000 mold 50–500 |
| Savoiardi (baked biscuit) | yeast < 100 mold < 50 | yeast 100–500 mold 50–200 | yeast 500–5000 mold 200–2000 |
| Cocoa powder — untreated | — | yeast 1000–5000 mold 100–500 | yeast 5000–50000 mold 500–5000 |
| Cocoa powder — steam-treated | yeast 10–100 mold 10–50 | yeast 100–500 mold 50–100 | — |
Sources: ICMSF microbiological specifications for dairy, IFST guidelines, Pomilio et al. 2022 (cocoa retail survey), Codex Alimentarius dairy standards, supplier datasheets from major EU/IT dairy ingredients suppliers (Galbani, Granarolo, Lattebusche).
Container (cup) and lid surfaces (CFU/cm²)
| Pre-fill state | Yeast CFU/cm² | Mold spores/cm² |
|---|---|---|
| Pharma-grade decontaminated (UV-treated, freshly extruded, ISO 5 cleanroom) | < 0.01 | < 0.005 |
| Clean — freshly moulded, kept in sealed sleeves until use | 0.01–0.05 | 0.005–0.02 |
| Standard — typical industrial storage, ISO 8 fill area, no decontamination | 0.05–0.5 | 0.02–0.2 |
| Poor — open-warehouse storage, dust exposure, long lead time between moulding and filling | 0.5–5 | 0.2–2 |
| Very poor — visible dust at inspection, contaminated supplier | 5–50 | 2–20 |
Lids are typically slightly cleaner than cups (smaller surface, more often sealed in stacks); use 50–80 % of the cup value. Steam decontamination of cups before filling (industrial practice for premium long-life dairy) brings values down to the "Clean" range; H₂O₂ vapour decontamination (pharma-grade) brings them to the "Pharma" range.
Airborne deposition during filling (total CFU per cup, open phase)
| Air class | Yeast CFU/cup | Mold spores/cup | Typical setting |
|---|---|---|---|
| ISO 5 (pharma) | < 0.1 | < 0.1 | HEPA-filtered isolator over fill head |
| ISO 7 | < 1 | < 0.5 | HEPA-filtered laminar flow, validated |
| ISO 8 — clean dairy line | 1–5 | 0.5–2 | Modern dairy fill room with positive pressure, HVAC filtration |
| Standard dairy line | 5–50 | 2–20 | Conventional refrigerated dairy production, basic ventilation |
| Poor / open line | 50–500 | 20–200 | Open production environment, no air conditioning, doors to outside |
| Very poor | > 500 | > 200 | Outdoor / artisanal, no air control, near soil or plant matter |
Source: EN ISO 14644-1 cleanroom classification, EHEDG hygiene guidelines, settle-plate data from published dairy-plant audits. Convert from settle-plate (CFU per plate per hour) using: CFU/cup ≈ (CFU/plate/h × open_time_s) / 60 for a ~90 cm² standard settle plate.
Quick reference: putting it together
| Plant scenario | Container CFU/cm² | Airborne CFU/cup | Lid CFU/cm² |
|---|---|---|---|
| Pharma-grade (UV-cup, ISO 5 fill) | 0.01 / 0.005 | 0.5 / 0.2 | 0.01 / 0.005 |
| Premium dairy (clean cups, ISO 8) | 0.05 / 0.02 | 3 / 1.5 | 0.04 / 0.01 |
| Standard (typical industrial) | 0.2 / 0.1 | 30 / 10 | 0.15 / 0.07 |
| Poor (uncontrolled) | 1 / 0.5 | 100 / 50 | 0.8 / 0.4 |
Format: yeast / mold per scenario. The calculator's default scenario uses values close to "Standard". For a meaningful shelf-life prediction, edit to match your actual plant audit data.
- Container / lid CFU/cm²: contact-plate (Rodac) on a representative sample, incubate 5 d at 25 °C for total + 7 d on Sabouraud or Rose Bengal agar for yeast/mold count, divide by plate area (~24 cm²).
- Airborne: 90 mm settle plate next to the fill head, exposed for 1 h, incubate as above. Per-cup deposition ≈ (CFU/plate/h) × (open time / 60).
- Ingredients: supplier certificate of analysis, or plate-count agar at your QC lab.
Thresholds
Yeast spoilage threshold (log CFU/g or CFU/cm²)
The population level above which the product is deemed spoiled. Industry standard for visible/organoleptic spoilage in dairy is 10⁵–10⁶ CFU/g (log 5 to 6). Use 5.0 for worst-case screening, 6.0 for best-estimate.
Visible mold probability threshold
Probability that at least one mold colony has grown to visible size (~1 mm). Industrial QA targets typically < 0.01 (1 % of cups), so 0.01 is the appropriate worst-case threshold.
Advanced
Hidden behind a collapsible panel. Contains the cardinal parameters for both organisms (Tmin, Topt, aw,min, pHmin, IC₅₀ for ethanol and CO₂, MICs for preservatives) plus the lag-phase parameter h₀ and the mold-specific KO₂. Most users should leave these alone. See the technical reference for parameter sources.
Best-estimate mode toggle
Flips the entire calculator from conservative (worst-case) to realistic (best-estimate). See §05 for the full distinction. Worst-case is the default for a reason; do not switch to best-estimate for commercial decisions.
§ 04Reading the output
After Compute, three blocks appear.
Headline
The single most important number: reported shelf life in days, computed as safety_factor × predicted_time. Below it: the limiting compartment, the limiting organism (yeast or mold), and the dominant γ factor — the one currently doing most of the work to keep growth slow.
Reported: 2.45 days · Limiting: cocoa_surface (mold) · Dominant γ: temperature (0.15)
Means: the product will spoil from mold growth on the cocoa surface in ~3.5 days predicted (×0.7 safety factor = 2.45 reported). Temperature is currently the strongest hurdle, but it's only γ = 0.15 (i.e. the mold is growing at 15 % of its optimal speed). Pushing other levers won't extend shelf life much unless they bring another γ below 0.15.
Matrix
One row per compartment, columns for yeast tfail and mold tfail. Cells are colour-coded: red = the limiting cell, amber = within 20 % of limiting, green = comfortably long. — means the organism doesn't apply to that compartment type (mold is surface-only, yeast may be either).
Use the matrix to see whether the bottleneck is sharp or shallow. If the limiting cell is 3 d but the next-worst is 30 d, fixing the limiting hurdle yields a 10× improvement. If they're 3 d and 4 d, you'll need to fix both.
Plot — two panels
Panel A — yeast log₁₀ N(t): growth curves for every compartment, plus a horizontal dashed line at the yeast threshold. Curves stay flat through lag, then sigmoid up to Nmax. The first curve to cross the threshold is the yeast-limiting compartment.
Panel B — mold P_visible(t): probability of visible mold over time for each surface compartment. Curves are sigmoid around the visible-time. The first curve to cross the visible-mold threshold is the mold-limiting compartment.
§ 05Bias modes — worst-case, realistic, best-estimate
The calculator runs in one of three bias modes selected by the segmented control above the headline. Each mode sets a coherent group of conservatism parameters.
| Parameter | Worst-case (default) | Realistic (v1.3.3) | Best-estimate |
|---|---|---|---|
| Le Marc ξ interaction | Off | Off | On (synergistic hurdles) |
| Lag parameter h₀ (mold / yeast) | 0.5 d / 1.5 | 1.0 d / 2.5 | 2.0 d / 4.0 |
| Mold KO₂ | 0.2 % | 0.5 % | 1.0 % |
| Yeast threshold | 10⁵ CFU/g | 10⁵·⁵ CFU/g | 10⁶ CFU/g |
| Visible mold threshold | 1 % | 2 % | 5 % |
| Dose-dependence σgerm | 0.10 | 0.13 | 0.15 |
| Safety factor on output | 0.7 | 0.85 | 1.0 |
| Output banner | Standard (cream) | Yellow (caution) | Red ("NOT for validation") |
When to use which
Worst-case mode is the default and the only mode for label claims:
- Setting commercial shelf life with a safety margin
- Pass/fail formulation decisions for regulatory submissions
- HACCP risk assessments
- Customer-facing documentation
Realistic mode (new in v1.3.3) is the central estimate consistent with industry-reported declared shelf life ranges (not strictly validated against peer-reviewed data — see the strategy report § 04 for available reference sources):
- Product strategy and benchmarking against competitor products
- Estimating what your own challenge tests will likely show
- Reconciling model predictions with historical data
- Cost-benefit analysis of intervention options
Best-estimate mode is a sensitivity-analysis tool only:
- Understanding which input variables matter most
- Internal R&D exploration of an upper bound
- Identifying parameter combinations that might justify additional investigation
§ 06Common workflows
Workflow A — Reformulation screening
You're proposing 5 formulation tweaks and need to pick the 2 worth challenge-testing.
- Baseline: enter the current formulation and record predicted shelf life and limiting factor.
- For each variant, change one field, recompute, record.
- Rank by predicted improvement. The variants that move the bottleneck (change the dominant γ) are the most informative.
- Send the top 2 to challenge testing. Do not skip challenge testing.
Workflow B — Packaging trade study
You're comparing PP-only cup with peel-foil vs full Al-PE laminate.
- Lock all formulation inputs.
- Vary lid material dropdown across the options. Record reported shelf life for each.
- Plot results vs lid OTR. Look for the inflection point: beyond a certain OTR threshold, lid permeability stops being the bottleneck and something else takes over (usually cocoa pH or storage T).
- That inflection point tells you the OTR you actually need to buy; anything tighter is overspecified.
Workflow C — Cold-chain abuse test
You want to know how robust the formulation is to 12 °C abuse for 1 day.
- v1 supports a single fixed temperature, not a profile, so run two scenarios: one at 4 °C, one at 12 °C.
- Read off the predicted shelf life ratio. If 12 °C gives 1/5 of the 4 °C result, then 1 day at 12 °C "consumes" ~5 days of 4 °C shelf life.
- Subtract that consumption from the 4 °C reported shelf life to get a manual abuse-corrected estimate.
Workflow D — Preservative effectiveness
You want to know whether to add sorbate, and at what ppm.
- First check what the limiting factor is. If it's surface mold on the cocoa, sorbate in the cream is irrelevant — the cocoa surface doesn't see the cream preservative.
- If the limiting factor is yeast in the cream, then sorbate matters — but only if the cream pH is ≤ 5.0.
- Run a sweep: 0 / 250 / 500 / 1000 ppm sorbate at the lowest pH you can technologically accept. The curve should show diminishing returns above ~500 ppm.
- Pick the lowest ppm that delivers the target shelf life. Don't overdose; sorbate above 1000 ppm hits flavour and may exceed regulatory limits in some markets.
Workflow E — Visual diagnosis with the animation
You're presenting results to a colleague or a customer and want to convey where spoilage happens, not just when.
- Configure the scenario as usual and click Compute.
- Set the animation speed to a comfortable pace (5–10 days/sec for short shelf lives, 2–3 for premium).
- Click Run. Watch the cocoa surface for the first mold colonies; watch the cream layers darken as yeast multiplies; watch the headspace tint change with CO₂.
- Pause at the moment of predicted failure (shown in red below the timeline). The frozen frame is a defensible visual of what fails first.
The animation is qualitative — colony positions are seeded pseudo-randomly so two cups with the same inputs will show the same pattern. The radii and tints are derived from the underlying simulation results.
Workflow F — Saving and comparing scenarios
You're iterating on five formulation variants and want to come back to each.
- Configure variant 1, click Save, name the file (the calculator suggests a timestamp).
- Repeat for each variant. JSON files are tiny (~5 KB), easy to email or store in a shared folder.
- To compare, Load each in turn, recompute, screenshot the headline + matrix.
- If the model is updated (new version), saved files remain readable as long as the core structure stays the same — missing fields fall back to defaults.
§ 07Limitations
v1 has a deliberately narrow scope. The following are not modelled.
Out of scope for v1
- Pathogens. No Salmonella, Listeria, S. aureus, B. cereus, Clostridium botulinum. The calculator is spoilage-only.
- Cross-compartment transport. aw, ethanol and preservatives do not diffuse between compartments. Enter post-equilibration values.
- Temperature profiles. Single fixed T only. Use the abuse workflow above for rough estimates.
- Competing microbiota. No Jameson effect, no lactic acid bacteria, no protective cultures.
- Multiple strains. One yeast strain, one mold strain. Worst-case from literature ranges.
- Mycotoxins. Mold visibility is modelled, but toxin production rate is not.
- Structural / matrix effects. γmatrix is fixed at 1.0. No fat-globule protection effect, no gel-network constraint on diffusion.
- Probabilistic inputs. Deterministic only; no Monte Carlo on input uncertainty.
- Persistence. No saving of sessions. Take screenshots or export the matrix manually.
Known v1 issues from validation
The following were identified in the v1 validation study (see validation_report.md) and are flagged for v1.1:
- Detection floor. Every compartment is rounded up to a minimum of 1 CFU before computation, which sets Pinit = 0.63 on surfaces and makes the bioburden inputs ineffective for any cup with truly low surface contamination. Workaround: do not interpret very-short surface-mold predictions as discriminating between "low spore count" and "no spore count" — they're not.
- γpH above the optimum. Between pHopt and pHmax, γ can exceed 1.0 by 1–3 %. Small effect, will be clamped in v1.1.
- Mold lag length. Current implementation gives germination times slightly shorter than literature for P. roqueforti at 4 °C. Conservative bias direction, but parameter values may need refitting.
- Default ingredient mass overshoots. The default ingredient table places more grams into each cream/biscuit compartment than the declared compartment mass. Either correct the masses to match your real formulation, or accept that the default scenario inflates CFU/g by 3–4×.
§ 08Glossary
- aw
- Water activity. Ratio of the vapour pressure of water in the food to the vapour pressure of pure water, 0 to 1. Free water available for microbial growth.
- Bioburden
- Initial microbial load on day zero, from all sources (ingredients, packaging, air).
- Cardinal model
- A predictive-microbiology model in which growth rate depends on each environmental factor through its minimum, optimum and maximum values. See Rosso et al. 1995.
- CFU
- Colony-forming unit. Standard count of viable microbial cells (or, for molds, viable spores).
- Compartment
- A user-defined region of the product treated as homogeneous, with its own aw, pH, preservatives and bioburden.
- γ (gamma) term
- A normalised factor between 0 and 1 representing the fractional reduction in growth rate due to one environmental hurdle. γ = 1 means no inhibition; γ = 0 means complete inhibition.
- Headspace
- Gas-filled volume between product and lid.
- Hurdle technology
- The combination of multiple sub-lethal stresses to achieve microbial stability that no single one could.
- IC₅₀
- Concentration of an inhibitor at which growth rate is halved.
- Lag phase
- The initial period after inoculation during which cells adapt to their environment before exponential growth begins.
- Le Marc ξ
- An interaction term that captures the synergistic effect of multiple hurdles when several are simultaneously near their inhibitory limits.
- MAP
- Modified atmosphere packaging. Gas composition in the headspace deliberately set to inhibit spoilage organisms.
- MIC
- Minimum inhibitory concentration. The lowest concentration of an antimicrobial that prevents visible growth.
- μ (mu)
- Specific growth rate of a population, 1/time. μopt is the optimal value; the actual μ at conditions is μopt × Π γ.
- OTR / CO₂TR
- Oxygen / CO₂ Transmission Rate of a packaging film: cm³ of gas through 1 m² of film per day at standard conditions.
- Poisson visibility
- Probability that at least one viable spore is present on a surface, given an expected spore count λ: P = 1 − exp(−λ).
- RLT / h₀
- Relative lag time, a dimensionless parameter capturing how long the lag phase is, expressed in units of generation time.
- Worst case
- In this calculator, the deliberate use of the most permissive parameters and shortest lag values for the spoilage organisms, biased toward predicting shorter shelf life than reality.
§ 09FAQ
The calculator says my tiramisù lasts 2.5 days. Industry standard is 5–7. Why?
The 2.5 d figure is the worst-case-mode reported shelf life, which already includes the 0.7 safety factor. The predicted value is 3.5 d. In best-estimate mode you'd get ~7 d, matching industry. The worst-case bias is deliberate — see §05.
I added 1000 ppm sorbate and nothing changed.
Check your pH. At pH 6, sorbate is ~93 % dissociated and therefore inactive. Lower the cream pH to 5.0 or below and sorbate becomes effective.
Adding alcohol to the biscuit didn't extend shelf life.
The limiting compartment is almost always the cocoa surface (mold). Biscuit alcohol doesn't reach the cocoa in v1 (no cross-compartment transport). To extend mold-limited shelf life, intervene on the surface: natamycin, MAP, barrier lid, or lower T.
What does "γ = 0.15" mean?
The organism is currently growing at 15 % of its optimal speed because of that hurdle. γ values multiply, so several γ at 0.5 each combine to a much smaller effective growth rate than one γ at 0.5.
Why does the matrix show "—" for some cells?
Mold is modelled only on surface compartments (it grows on interfaces). Yeast may be modelled on both bulk and surface, but the threshold interpretation differs (CFU/g vs CFU/cm²). When a column doesn't apply to a compartment type, the cell shows "—".
Can I trust the absolute predicted days?
No. Trust the ranking. Two formulations whose predicted shelf lives differ by 2× are likely to rank in the same order in challenge tests. Absolute numbers must be validated empirically.
Is the model conservative enough for regulatory use?
This is a screening and exploration tool, not a regulatory model. Regulatory shelf life requires challenge testing or durability studies per ISO 11290 / ISO 16649 and equivalents. Use the calculator's output to design those studies, not to replace them.
My product has unusual preservatives (lysozyme, lactoperoxidase, …). Can I model them?
Not in v1. Only sorbate, benzoate and natamycin are supported as explicit γ terms. For other antimicrobials, you can approximate via the IC₅₀ ethanol field as a generic inhibitor, but the result will be misleading. Wait for v2 or use an external model.
The cup_wall shows yeast tfail = never. Is that right?
Probably yes. Default cup-wall yeast bioburden is 0.1 CFU/cm² × ~60 cm² = 6 CFU per cup, distributed over the wall area, giving log10 N0 = −1.0 CFU/cm². To reach 105 CFU/cm² from there takes many doublings; under refrigeration's slow growth, it doesn't happen within max_days. The cup wall is rarely the bottleneck.
Tiramisù Spoilage Calculator v1 · User Guide · For internal R&D use only. Predictive screening tool; not a substitute for challenge testing or shelf-life validation.