Sunday 03:00 UTC
Network median aggregation
Walks every chef's pricebook entries verified in the last 4 weeks, groups by ingredient × zip3 × unit, computes median + p25 + p75, writes to aggregated_prices.
How it works
Seven sources, in priority order. Three weekly jobs that keep the data fresh. One commitment: every price you see is sourced, dated, and one tap from override.
The resolution cascade
A price you explicitly set for one menu. Highest priority because it's your intent — Studio never second-guesses an override.
As fresh as the day you set it.
Your personal price library, built up automatically every time you confirm a price during costing. Every entry is timestamped with last_verified_at — produce expires after 14 days, everything else after 90, and you'll see a yellow badge nagging you to verify when an entry ages out.
You control it. We nag you when it goes stale.
The median price paid by other SERVD chefs in your 3-digit zip area over the last 4 weeks. We aggregate this every Sunday morning. Auto-deprecated after 60 days so a long-stale bucket doesn't poison the cascade. Fires only when there are at least 3 chefs in the bucket.
Refreshed every Sunday 03:00 UTC. Auto-deprecates at 60 days.
If you marked Kroger as your primary market and set your store location, Studio hits the live Kroger Products API for real-time shelf prices. Returns the lower of regular and promo pricing. Low-confidence matches get a 'confirm before relying on it' badge.
Real-time. Pulled the moment you cost a menu.
Generic NLP-aided estimate, multiplied by your primary-market tier (premium = 1.4×, wholesale = 0.65×). Always labeled 'estimate' in the UI so you know to verify before locking margin.
Refreshed on-demand. Treat as a ballpark.
The seeded catalog price for the ingredient. Last-resort fallback. Refreshed weekly across the top 200 most-used ingredients via Kroger + Spoonacular sweeps so even the fallback layer is never more than 7 days old.
Refreshed every Sunday 04:00 UTC.
If nothing fires, Studio refuses to make up a number. The line is flagged 'unpriced' and the UI prompts you to set it before generating a proposal.
N/A — we don't guess.
What runs every week
Sunday 03:00 UTC
Walks every chef's pricebook entries verified in the last 4 weeks, groups by ingredient × zip3 × unit, computes median + p25 + p75, writes to aggregated_prices.
Sunday 04:00 UTC
Walks the top 200 most-used ingredients across the SERVD network. For each, hits Kroger Products API (Denver baseline location) and Spoonacular, blends the result, and updates the catalog baseline. Skips any update where the new price is >5× or <0.2× the existing one (almost certainly an API mismatch).
Sunday morning
Every chef whose pricebook has stale entries gets a personal email listing them, ranked by usage. One tap to update each.
The promise
Studio doesn't pretend to know prices. It learns yours. Day one, we use what other chefs near you are paying — refreshed weekly — as your starting truth. Day thirty, your pricebook is the truth. Either way, every price is sourced, dated, and one tap from override.