Ecommerce App Starter · Industry version
A store that understands perishables — pickup windows, lot tracking, and rush-day order flow — in code your brand owns.
Selling food online means selling time: this batch, that pickup window, gone by Sunday. Generic stores pretend inventory is eternal and delivery is a courier's problem. This starter builds shelf life and fulfillment windows into the schema, then hands the code to your kitchen.
01 · The problem
Food inventory expires, and that changes everything downstream. Stock isn't a number — it's a set of lots with production dates and shelf lives, sold oldest-first. A generic store that can't distinguish Tuesday's batch from Friday's will happily sell you into a spoilage write-off or, worse, ship the stale one.
Fulfillment is scheduled, not shipped-whenever. Customers choose Saturday pickup or Thursday local delivery, capacity per window is finite, and the kitchen plans production against those slots. When windows live in an order-note field, the Saturday list gets rebuilt by hand every Friday night — from data the store already had.
And the demand curve is spiky by design: weekend markets, holiday preorders, a drop of fifty cakes that sells out in an hour. Rented platforms meter exactly the moments that make a food brand's month; a store you own treats the rush as the normal case to engineer for.
02 · Data model
Everything in the base Ecommerce starter —
productsvariantscollectionscartsordersdiscountsinventory— plus the entities this industry actually runs on:
| table | what it holds |
|---|---|
pickup_windows | Dated fulfillment slots with capacity — Saturday morning pickup, Thursday delivery — that orders book into. |
lots | Production batches with made-on and best-by dates, linked to variants so stock sells oldest-first. |
delivery_zones | Postcode-bounded areas with their own fees, minimums, and available windows for local delivery. |
03 · Screens
The cart asks when, not just where: customers pick an open window, full slots close automatically, and the cutoff for Saturday pickup is a rule in your code. Every order arrives already scheduled, which is the difference between a queue and a plan.
Stock counts roll up from lots, so availability reflects what's actually fresh. Best-by pressure surfaces in the admin — sell it, discount it, or pull it — and traceability back to a batch is a lookup, which matters a great deal on the day it matters at all.
Orders group by window and product into a make list: forty sourdough, twelve tiramisu, Saturday 9–12. The kitchen bakes to the board, packs against it, and marks pickup complete on it — the store speaks production, not just retail.
04 · In practice
Publish the week's menu Monday, take orders until Thursday 6 p.m., bake Friday against the aggregated make list, hand off Saturday by window. The cutoff closes checkout automatically; nobody refunds an order the kitchen can't make.
Preorder products carry future windows and capacity caps per day. When Christmas Eve pickup hits its limit, the slot closes itself instead of overcommitting the ovens — and the deposit-now, balance-later pattern is yours to add, since checkout is your code.
Lots approaching their date trigger a flag in the admin; a scoped discount moves them through the storefront's sale section by Friday. Spoilage becomes a managed metric with a report behind it, not a bin behind the kitchen.
Yes — windows cover both modes, and delivery zones add postcode boundaries, fees, and minimums. Customers only see options valid for their address and date, which kills the most common source of refund emails before it starts.
Lots carry production and best-by dates and link to the variants they stock, so tracing a batch to the orders that contained it is one query. Your recall story — should you ever need one — is in your own database, immediately.
Product pages are your components, so allergen declarations, ingredient lists, and net-weight fields render exactly as your local rules require. Regulations change by jurisdiction; owning the template means compliance is an edit, not a feature request.
A wholesale tier fits naturally: separate price lists on variants, minimums by account, and standing weekly orders are all schema-level additions. Retail and wholesale read from the same inventory, so the kitchen plans once.
Dual7 App Starters
A store that understands perishables — pickup windows, lot tracking, and rush-day order flow — in code your brand owns. Describe your version to start — the output is a project you own.