How the calculator decides

The calculator does one thing: it adds up what a provider published, then tells you which parts of that sum it could not verify. It never estimates, never fills a gap with a neighbouring number, and never chooses an introductory discount on your behalf. Every rule below is in the code, and you can disagree with any of them.

Rule 1: a per-serve price is multiplied by every serve in the box

One serve is one person eating one meal. A box for four people with five recipes holds 20 serves, not 5. When a provider publishes a price per serve, the calculator multiplies it by people × recipes. Multiplying by the recipe count alone is the single most common way a meal-kit comparison gets it wrong, because it silently leaves out the household size.

HelloFresh’s own page is the proof that this is the right reading. It quotes the family-of-4, 5-meal box as “$165 + shipping”, which is $8.25 a serve — and $165 ÷ 20 serves is exactly $8.25.

Rule 2: a per-box price is used as-is, and shipping is not added twice

Some providers publish a box price instead of a per-serve price. When that box price already contains shipping, the calculator does not add a delivery fee on top. This is why the two price bases are never mixed into one column: a per-serve figure and a shipping-inclusive box figure are not the same kind of number.

Rule 3: an unpublished amount is never shown as zero

A missing delivery charge is not $0. When a provider does not publish a delivery amount, that amount stays out of the sum and the total is labelled “at least”. The figure can only go up, and the page says so. This is the difference between an honest lower bound and a total that is wrong by whatever the missing part happens to be.

Rule 4: a known fee with an unknown area top-up is also a floor

Dinnerly includes $11.99 shipping in its box prices, then adds “$1 or $2 in some delivery areas”. The base fee is known; the top-up depends on the reader’s postcode, which this site never asks for. Every Dinnerly total is therefore also a floor — for a different reason, and with a different message, so you know which number to go and check.

These two unknowns are kept separate on purpose. “Delivery not published” and “some areas pay more” have different fixes: the first means asking the provider, the second means entering your own postcode on their site.

Rule 5: nothing is interpolated between box sizes

If a provider publishes 4 × 5 but not 4 × 6, the calculator reports that gap instead of averaging its neighbours. It applies to household sizes and to recipe counts, and the recipe limits are read per box row rather than per provider — Dinnerly’s 6-person box stops at 5 recipes while its 4-person box runs to 6. Reading that limit off the provider as a whole is how a tool ends up quoting a box that is not for sale.

Rule 6: the default result is the ongoing cost, not the offer

No provider published a discount amount, a discounted week count or a post-offer price we could quote on 2026-10-04. So the introductory offer is a labelled unknown and the headline figure is what you keep paying. If you have actually been shown an offer, you can enter the amount and week count yourself, and both sides are shown.

Two refusals sit behind that. If the discount you enter is larger than the box, the calculator will not print a negative weekly cost — it tells you the amount exceeds the box. And when the box total is itself a floor, it refuses to declare your offer “too large” at all, because it genuinely cannot tell whether a real box would be bigger than what it could verify.

Rule 7: where a provider contradicts itself, both numbers are shown

For one plan, HelloFresh’s page quotes $8.25 a serve in the intro copy and $9.59 in the price table. The calculator costs that box at the table price, because every other box size only appears in the table and comparing on one basis is the only way the numbers mean the same thing — and it prints the disagreement rather than picking a side quietly.

What the calculator never does

Where each figure comes from, and what this site decides rather than cites, is set out on the sources page. The arithmetic itself lives in src/lib/cost.mjs, with a unit test for each of these rules.