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

  1. 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.
    Each species has its own speed setting (off / slow / fast). Defaults: fast for water and ethanol (matrix equilibrates quickly), slow for preservatives (large molecules in dairy gel).
  2. Cocoa thin-layer aw coupling. Effective surface aw from cream below + headspace humidity above, weighted by cocoa thickness.
  3. 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 cupPredicted 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:

  1. 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.
  2. Container CFU/cm² seeds the cup rim with the same pre-fill cleanliness as the cup wall (it's the same cup, same surface).
  3. 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

  1. Cocoa thickness optimisation. Sweep layer_thickness_mm from 0.5 to 4 mm. Diminishing returns above 2 mm.
  2. Heavy-Marsala diagnostics. Raise biscuit EtOH from 1 % to 5 % and see the cocoa surface fail time extend by a real but modest amount.
  3. 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.
  4. Surface protection sweep. Once cocoa is protected, the cup rim and lid become the limiters. Apply natamycin 10 ppm to cup_rim and lid_product_facing to push them out and find the next bottleneck.
  5. Cup-cleanliness sensitivity. Halve container_mold_per_cm2 and 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:

IngredientPremium / pasteurisedStandard industrialLower-grade / problem batch
Mascarpone (pasteurised, fresh)< 10 yeast/g · < 1 mold/g10–50 / 1–10100–500 / 10–100 (off-spec)
UHT cream< 1 / 01–10 / 0–1> 10 (rare; indicates rework)
Pasteurised egg yolk< 10 / 01–100 / 0–5100–1000 / 5–20
Sugar (sucrose)0 / 00 / 00 / 0 (effectively sterile)
Marsala / Vin Santo10–50 / 0–550–200 / 5–20500+ / 20+ (suspect of Z. bailii contamination)
Coffee infusion (filtered)1–10 / 0–110–100 / 1–10100–500 / 10–50 (unfiltered or aged)
Savoiardi (baked, sealed)1–10 / 1–1010–100 / 10–50100–500 / 50–200 (broken seal, ambient storage)
Untreated cocoa powder500–2000 yeast/g · 50–200 mold/g2000–5000 / 100–5005000–10000 / 500–1000
Steam-treated cocoa< 50 / < 1050–200 / 10–50> 200 / > 50 (treatment failure)
Sterilised cocoa (ALPHA / similar)< 10 / < 1
The cocoa decision dominates if mold-limited Switching from untreated to steam-treated cocoa drops mold spore input by roughly 10×. For mold-on-cocoa-limited shelf life this often buys 3–5 days. If the limit is on the cup rim, cocoa cleanliness barely moves the needle.

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 stateYeastMoldDescription
Pharma-grade / freshly moulded in clean room0.001–0.010.001–0.01Injection moulded under HEPA, immediate sealing; rarely achievable for dairy cups
Decontaminated (UV, H₂O₂, or peroxide fog)0.01–0.050.01–0.05Cups sterilised inline before filling; specified for premium long-life products
Standard industrial (clean storage, prompt use)0.05–0.20.02–0.1Cups stored sealed in dust-free conditions, used within days of delivery
Standard industrial (default in calculator)0.10.05Realistic middle-of-the-road industrial default
Long-stored / dusty warehouse0.5–20.2–1Cups sat for weeks in ambient warehouse; visible dust accumulation
Poor handling / open storage2–101–5Pallets handled without dust covers, cups exposed to plant air for hours
Lid only — printed inside0.1–0.50.05–0.2Ink 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 conditionYeastMoldTypical fit
Pharma-grade (ISO Class 7 / Grade B)< 1< 0.1Not realistic for dairy; specified for parenteral pharma
Aseptic dairy (ISO Class 8 / Grade C)1–30.1–1Modern UHT or extended-shelf-life dairy plant with HEPA fill area
Standard dairy production (clean line, default)5–202–10Well-maintained dairy plant, daily CIP/SIP, restricted access during fill
Older / less controlled plant20–10010–50Open production floor, lower air-change rate, occasional door opening
Poor hygiene / contaminated line100–50050–500Visible contamination on settle plates; QA action threshold
Gross contamination500+500+Plant shutdown territory; do not produce
How to measure your own airborne value Place a Sabouraud Dextrose Agar (or similar) settle plate next to the filling head with the lid off. Leave open for 1 minute during normal production. Incubate at 25 °C for 5–7 days. Count yeast and mold colonies separately. Convert: 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:

CompartmentawpHEtOH % v/v (aqueous)Notes
Cocoa surface0.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-facing0.88–0.95 (condensate-driven)~6.0–6.50 (vapour-derived)Coldest surface, often saturated at refrigeration
Cup rim0.90–0.95~6.0–6.50 (vapour-derived)Receives some product splatter
Top cream0.92–0.956.0–6.5 (standard); 4.8–5.2 (acidified)0.2–2 (depending on Marsala)Mascarpone-rich, alkaline by default
Biscuit soaked0.95–0.975.0–5.8 (coffee + Marsala lower pH)1–5 (Marsala-heavy)Highest aw compartment
Bottom cream0.92–0.956.0–6.50.2–2Same physics as top cream
Cup wall0.92–0.95 (cream contact)~6.0–6.50.2–2 (cream contact)Anaerobic — mold doesn't grow here in practice

Lid materials and OTR

Lid materialOTR (cm³/m²/day)CO₂TRCost-per-cup proxyWhen to use
PP only80320cheapestShort-life products (≤ 7 d), no MAP
PET only30120+10–20 %Short to mid-life, no MAP
PP + EVOH (3-layer)28+30–50 %Mid-life MAP (14–21 d)
PET/Al/PE laminate0.52+40–60 %Long-life MAP (21–35 d)
Aluminium peel foil0.050.2+50–80 %Premium long-life (35+ d), gas-flushed
Match lid to flush ambition A CO₂ flush under a PP-only lid leaks out within a week. If you spend on flush gas, you must spend on the lid too. The other direction is cheaper but less common: a barrier lid without flush still gives meaningful protection by keeping atmospheric O₂ out, but doesn't deliver the active CO₂ inhibition.

§ 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 core compartments, storage and advanced objects.
  • 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.
Saved scenarios are portable The JSON files saved by v1.2 can be re-opened on any computer running the same calculator. Useful for sharing formulations between team members, archiving the inputs that went into a challenge test, or comparing two formulations side-by-side by saving each and computing one at a time.

§ 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.

Out of scope This is not a food-safety tool. It does not predict pathogens (Salmonella, Listeria monocytogenes, S. aureus, B. cereus) or toxin formation. It does not replace challenge testing, durability studies, or HACCP analysis. Use the output to rank and screen formulations, never to certify a shelf life or label a product.

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.

Mental model Think of the calculator as a structured way to ask "which hurdle is currently doing the work, and which one should I push on next?" The "limiting factor" output is the answer.

§ 02Quick start (5 minutes)

The fastest path from open-tab to result.

  1. 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).
  2. Click Compute. The output appears below: headline shelf life, per-compartment matrix and a two-panel plot.
  3. 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).
  4. Adjust one variable — temperature, lid material, sorbate ppm, pH — and recompute. The new prediction shows how much that one change buys you.
  5. Iterate until the limiting factor changes. That tells you you've shifted to a different bottleneck and need a different lever.
Worked example

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

T_C

Temperature (°C)

Single, constant refrigeration temperature. Default 4 °C reflects regulatory dairy-cold-chain target.

range: −5 to 25 · default: 4

max_days

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

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:

CompartmentTypeWhat it represents
cocoa_surfacesurface_airCocoa dusting at the air interface. Usually the limiting compartment for mold.
lid_product_facingsurface_packageUnderside of the lid in contact with headspace. Mold can colonise from condensation drops.
top_creambulkThe cream layer immediately under the cocoa.
biscuit_soakedbulkCoffee-soaked savoiardi layer in the middle. Often the highest-bioburden compartment.
bottom_creambulkThe cream layer at the base of the cup.
cup_wallsurface_packageInner cup wall in contact with the bottom cream.
Critical input For 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

aw

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

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

EtOH

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

Nmax

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.

V_hs / A_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.

V_biscuit_pore

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

f_trapped_air

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

flush_O2 / flush_CO2

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₂).

OTR / CO2TR

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.

Common mistake Adding sorbate at the typical 500–1000 ppm but leaving cream pH at 6.0 produces essentially zero effect. Sorbate works only via the undissociated sorbic acid fraction, and at pH 6 only ~7 % is undissociated. To make 1000 ppm sorbate do real work you need pH ≤ 5.0 (~23 % undissociated) or ideally pH ≤ 4.5 (~50 % undissociated). The calculator models this correctly; the surprise often comes from realising the chemistry doesn't allow the shortcut.

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 typeSorbateBenzoateNatamycin
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.

PreservativeActive formEffective vsPractical range
Potassium sorbateUndissociated sorbic acid (pKa 4.76)Yeasts, molds500–1000 ppm at pH ≤ 5.0
Sodium benzoateUndissociated benzoic acid (pKa 4.20)Yeasts, molds200–800 ppm at pH ≤ 4.5
NatamycinDirect membrane bindingMolds only (surface)5–20 ppm on surface, dry-coat or dusted
Natamycin — regulatory restrictions in the EU Under EC Regulation 1129/2011, natamycin (E235) is authorised in the EU only for surface treatment of hard, semi-hard and semi-soft cheese, and dried sausage. Application to dairy-dessert categories (tiramisù, mousses, panna cotta, etc.) is not currently permitted without specific category authorisation, novel-food approval, or product reclassification. In other markets (US under FDA 21 CFR 172.155 with category-specific limits, several Latin American countries, parts of Asia) the use is broader but still subject to regulatory limits. Confirm with your regulatory affairs team before specifying natamycin in any product formula. The calculator allows it because the physics is real, but the legal use may not be.
Storage temperature — physically powerful, operationally risky Lowering storage temperature is the single biggest physical lever in the model (every degree closer to Tmin roughly halves growth rate). However, EU dairy cold chains validate to 4 °C ± 2 °C, retail displays oscillate ±2–3 °C, and setting the storage target at 2 °C means the cold cycles drop below 0 °C and the mascarpone freezes — ruining the texture irreversibly. Use the temperature lever in the calculator for scenario exploration, but treat it as generally unavailable in practice for products distributed through standard retail cold chains. The lever is genuinely available only when the producer owns the full end-to-end cold chain (direct-to-consumer, food-service, or institutional).

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.
Where to get the numbers Supplier certificates of analysis are the primary source for ingredient CFU/g. Lot-to-lot variability is significant — what's tabulated below are typical industry midpoints for screening calculations. For real production decisions, use your own supplier specs and your own settle-plate / swab data.

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)

IngredientClean (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 creamyeast < 1
mold < 1
yeast 1–10
mold < 1
yeast 10–100
mold 1–10
Pasteurised egg yolkyeast < 1
mold < 1
yeast 1–10
mold < 1
yeast 10–100
mold 1–10
Sugar (sucrose)0 / 00 / 0yeast 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 wineyeast 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 — untreatedyeast 1000–5000
mold 100–500
yeast 5000–50000
mold 500–5000
Cocoa powder — steam-treatedyeast 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 stateYeast 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 use0.01–0.050.005–0.02
Standard — typical industrial storage, ISO 8 fill area, no decontamination0.05–0.50.02–0.2
Poor — open-warehouse storage, dust exposure, long lead time between moulding and filling0.5–50.2–2
Very poor — visible dust at inspection, contaminated supplier5–502–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 classYeast CFU/cupMold spores/cupTypical setting
ISO 5 (pharma)< 0.1< 0.1HEPA-filtered isolator over fill head
ISO 7< 1< 0.5HEPA-filtered laminar flow, validated
ISO 8 — clean dairy line1–50.5–2Modern dairy fill room with positive pressure, HVAC filtration
Standard dairy line5–502–20Conventional refrigerated dairy production, basic ventilation
Poor / open line50–50020–200Open production environment, no air conditioning, doors to outside
Very poor> 500> 200Outdoor / 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 scenarioContainer CFU/cm²Airborne CFU/cupLid CFU/cm²
Pharma-grade (UV-cup, ISO 5 fill)0.01 / 0.0050.5 / 0.20.01 / 0.005
Premium dairy (clean cups, ISO 8)0.05 / 0.023 / 1.50.04 / 0.01
Standard (typical industrial)0.2 / 0.130 / 100.15 / 0.07
Poor (uncontrolled)1 / 0.5100 / 500.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.

How to measure your own values
  • 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_log

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.

mold_P

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.

When to touch advanced Three legitimate reasons: (1) you have strain-specific challenge-test data and want to override defaults; (2) you're swapping in a different target organism (e.g. Debaryomyces hansenii for natamycin-resistant yeast scenarios); (3) you're stress-testing the model's sensitivity to parameter uncertainty.

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.

Reading the headline

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.

Pattern to look for A "step-change" plot, with all compartments crossing the threshold within a narrow time window, means the hurdles are well-balanced and shelf life is at the equilibrium your formulation can support. A plot with one compartment failing far earlier than the rest means there's a low-hanging fruit — fix it and you'll get a big jump.

§ 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.

ParameterWorst-case (default)Realistic (v1.3.3)Best-estimate
Le Marc ξ interactionOffOffOn (synergistic hurdles)
Lag parameter h₀ (mold / yeast)0.5 d / 1.51.0 d / 2.52.0 d / 4.0
Mold KO₂0.2 %0.5 %1.0 %
Yeast threshold10⁵ CFU/g10⁵·⁵ CFU/g10⁶ CFU/g
Visible mold threshold1 %2 %5 %
Dose-dependence σgerm0.100.130.15
Safety factor on output0.70.851.0
Output bannerStandard (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
Never quote a best-estimate number externally Even if you trust the parameters and the matrix in best-estimate mode, you have no business communicating it as a shelf life. Best-estimate has no safety factor. Realistic mode is the appropriate communication for internal product-strategy work; worst-case is what you put on a label after challenge-test confirmation.
Why realistic mode exists The original two-mode system (worst-case ↔ best-estimate) gave a 3-5× spread between modes — too wide for either to match observed reality well. The realistic mode fills the gap with literature-midpoint parameters chosen to be consistent with the limited industry-source data available for chilled dairy desserts (e.g., a "two-week standard pasteurised shelf life" cited by industry interviews, retailer "minimum days at delivery" inference for branded products — see strategy report § 04). Use it as the central estimate; bracket with worst-case for the safety floor and best-estimate for the optimistic ceiling. The relative ranking of scenarios is more robust than the absolute days.

§ 06Common workflows

Workflow A — Reformulation screening

You're proposing 5 formulation tweaks and need to pick the 2 worth challenge-testing.

  1. Baseline: enter the current formulation and record predicted shelf life and limiting factor.
  2. For each variant, change one field, recompute, record.
  3. Rank by predicted improvement. The variants that move the bottleneck (change the dominant γ) are the most informative.
  4. 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.

  1. Lock all formulation inputs.
  2. Vary lid material dropdown across the options. Record reported shelf life for each.
  3. 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).
  4. 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.

  1. v1 supports a single fixed temperature, not a profile, so run two scenarios: one at 4 °C, one at 12 °C.
  2. 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.
  3. 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.

  1. 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.
  2. If the limiting factor is yeast in the cream, then sorbate matters — but only if the cream pH is ≤ 5.0.
  3. 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.
  4. 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.

  1. Configure the scenario as usual and click Compute.
  2. Set the animation speed to a comfortable pace (5–10 days/sec for short shelf lives, 2–3 for premium).
  3. 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₂.
  4. 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.

  1. Configure variant 1, click Save, name the file (the calculator suggests a timestamp).
  2. Repeat for each variant. JSON files are tiny (~5 KB), easy to email or store in a shared folder.
  3. To compare, Load each in turn, recompute, screenshot the headline + matrix.
  4. 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.