Each one is a real morning Vitrina would face. The chef just says what they want; the model decides the route.
That's the trade. We take less margin per chef on purpose — because we have no warehouse, no fleet, no salaried payroll to feed. What we lose in slice we more than win in volume × number of cities × no plateau. Three charts walk through it.
Distributor pays the farmer €40; we pay €70. Yes — our cut shrinks too. That's the trade. We don't need a fat margin because we don't have a warehouse, payroll, or fleet to feed. The next two charts are where our small slice turns into a big number.
Distributor settles around €25/chef at scale (warehouse + cold room + picker + dispatcher + truck never go away). We settle around €18/chef. That €7 we save is what makes our smaller slice still pay off, on every single chef, in every single city.
Opening a new city costs us about €20K — one organiser, one month of rented vans, recruiting budget. The distributor needs ~€300K — warehouse lease, cold infra, two trucks, six months of ramp. If a city flops, we walk away in a month; they're stuck with a five-year lease.
Thin slice × cheaper per chef × almost-free replication = a business that compounds without ever capping out. The distributor takes 30% per basket but can only serve one city at a time, with €300K of fixed plant burning before order one. Ocado takes 20% per basket but only at 21,000 orders/day — a HORECA chef is invisible to them. We take ~9% per basket, serve every chef €7 cheaper, and can be in 15 cities by the time they're in two. The slice doesn't have to be fat if the volume × footprint × replication speed is uncapped.
What would break this model: if we end up needing a cold warehouse at scale (the €7 gap closes), if wholesalers cut margins on contested corridors (gap halves), or if basket variance is much wider than the €150 average we used (low-end mornings miss the floor longer).
Same model, zoomed to one basket. Does this morning clear its floor?
Every kilo we move has the same shape: chef pays us, we pay the farmer, we keep the gap. The gap is small per kilo (a few coins) but it stacks. The morning costs us roughly the same whether we move 25 kilos or 1,000 — one van for the day, one paid driver, a bit of diesel. So the question is just: how many kilos clear the floor? Below that number we lose money. Above it, every extra kilo drops straight into gross profit.
The number moves with what's in the basket. A morning of cheap potatoes needs more kilos to clear the floor than a morning of expensive peppers. Long routes burn driver hours and diesel, which raises the floor; tight clusters lower it.
Each row is one scenario from the picker. The bar shows the estimated gross profit (or loss) per morning under today's anchors — Baovans van, TaskRabbit-grade hourly driver, gasolinera diesel. Click any row to load it into the simulator and see what the actual VROOM-routed numbers look like.
These are estimates based on a simple route heuristic so the report opens fast. Open a scenario and press Calculate for the exact figure with VROOM picking the route.
We do not beat them at moving 50,000 kilos through a depot — they win that game forever. We win the opposite game: short batches of small farm-to-chef orders that a depot can't handle profitably. The simulator's job is to show, on real baskets, where the line between those two games sits.
data/scenarios.json, computed by computeScenarioEconomics() in app.js (revenue at chef's price = vitrina_target_eur_kg; farmer cost at farm_gate_typical_eur_kg; logistics from estimateRouteCost() mirroring the simulator's van+driver+diesel charge). HORECA distributor shares from MAPA Observatorio de la Cadena de Valor (Spain, fresh produce: producer ≈ 35–45% of retail). Ocado-style B2C shares from the Ocado Group 2024 annual report + UK grocery norms (supplier share ≈ 55%, CFC fulfilment ≈ 25%, retailer margin ≈ 20%).company/notes/barcelona-fresh-logistics-2026-05/transport-economics.md.company/notes/distribution-landscape-2026-05/spain.md.data/products.json. Variance by basket composition is real and acknowledged in the caveats section above.Each line is quantity × Vitrina target price. Our target is MercaBarna wholesale × 1.15 — a 15% premium over the wholesale floor for delivery, 24–48h freshness, and traceability, still well under what a chef pays through a HORECA distributor (≈ MercaBarna × 1.30, MAPA observatorio). Each row shows the MercaBarna anchor inline so the math is auditable.
We pay each farm the same per-kilo as MercaBarna's mayorista would — MercaBarna × 0.79 (1 − 21% mayorista margin, MAPA Observatorio Cadena de Valor). The farmer is indifferent between selling to MercaBarna or to us. Glut-clearance / pack-house drops sit at × 0.65, DOP-protected lines at × 0.88. Each row exposes the multiplier so you can audit it. The model picks the cheapest feasible farm combination that respects MOQs; VROOM 1.15 confirms the stop ordering.
Three lines, all anchored to today's real-world quotes. Van is a Getaround spot in Eixample, billed hourly: €10/h with the meter capping around €60/day. We bill ceil(route hours × 1.5) hours per morning to cover van pickup, restaurant offloads and the return drop-off, capped at the daily — so a 3-hour drive bills 5h = €50, a 4-hour drive bills 6h = €60, and anything longer is still €60. The route always ends at the same address it started: the van must be dropped where it was picked up. Diesel is the variable piece, today's Spanish gasolinera average × the road distance OSRM returned (the rental absorbs tyres / wear / maintenance, so the per-km figure here is fuel-only). Driver is billed hourly at the TaskRabbit Barcelona handyman tier — €30/h, same shape as the van rental: ceil(route × 1.5) billable hours, no minimum-hours floor, so a 1-hour drive bills 2h not 4h. Buffer covers van pickup, offloads, and return drop-off. We always bill this line, even on mornings the founder is driving — otherwise the calc can't tell the difference between "this works" and "this works because someone is donating time".
| Van rental €10/h hourly, ceil(drive × 1.5) billable hours, capped at €60/day | — |
| Diesel — km × €0.13/km (≈9 L/100 km × €1.385/L gasolinera avg, 12 May 2026) | — |
| Driver €30/h hourly, ceil(drive × 1.5) billable hours — scales with the route, no minimum floor | — |
Sources: van rate Getaround Barcelona
(€10/h hourly, ~€60/day cap, verified May 2026 on the Eixample listings); diesel
Spanish gasolinera average, 12 May 2026
(€1.385/L); driver hourly rate
TaskRabbit Barcelona handyman tier
(€27/h general, €33/h electrical, €36/h plumbing — €30/h used here for driver-with-load).
These are starting anchors, not permanent assumptions — every lever and what would
change it is documented in data/depot.json.
Revenue €— − COGS €— − Van+driver €— = €—
What's NOT deducted: founder salary, insurance, sales time, software
amortisation — ~€2–4k/month of overhead lives above this line. The bridge to net
is in stoyan-qa.md Part 10.
What's anchored to today's quotes: Getaround hourly rental, Spanish
gasolinera-average diesel, TaskRabbit-tier hourly hire (Peter drives the first few
mornings himself; we still bill the labour line so the calc doesn't lie about what
the morning takes). Levers that would move these numbers — fixed driver-with-van
living outside the city, isotermo / frigo van class, volume contracts at the rental
yard — are listed in data/depot.json.
| Chef pays distributor ≈ MercaBarna × 1.30 (MAPA observatorio) | €— |
| Distributor margin ≈ 30% — covers fleet, staff, depot, depreciation | €— |
| Total channel spread chef price minus farmer gate; not net profit | €— |
| Goes to the farmer MercaBarna × 0.79 — mayorista buy price | €— |
| Chef pays Vitrina MercaBarna × 1.15 — 15% over wholesale floor | €— |
| Vitrina gross margin after farms + van + paid driver | €— |
| Goes to the farmers same as mayorista — farmer is indifferent | €— |
—
The ~30% HORECA-distributor margin and ~21% mayorista margin are sector averages from MAPA Observatorio Cadena de Valor (Spanish vegetables). Both vary by SKU, season, and channel. We're comparing what each side captures on a delivered basket, not what each side nets after fixed costs. We do not estimate MercaBarna's warehouse rent, payroll, waste, or depreciation per order here, because those costs are not visible at basket level and would give a false precision. MercaBarna and the wholesalers almost certainly win on physical handling cost per kilo. The useful question for this simulator is different: on this exact order, how much spread exists between farmer gate and the chef's delivered price, and can Vitrina cover its own farms, van, driver, and still leave the chef better off?
Every feasible combination of farms was evaluated in-browser (capped at 1500), then VROOM 1.15 confirmed the stop ordering for the winner. Below is the full ranked list — winner first. They render as faint grey ghost lines on the map; this list shows the full € tally per combination.