Inventory that expires: modelling cutoff times
Prechop's tagline is "order before they cook," and that preposition is the entire product. A vendor posts a dated listing with a cutoff time; students pre-order and prepay; the kitchen cooks to demand it can actually see.
A catalog with a clock
Most marketplaces sell from standing inventory. Prechop sells from inventory that doesn't exist yet and expires. A listing is orderable only until its cutoff, after which it locks for the kitchen. That single constraint reframes the whole thing: it isn't a store, it's a scheduling problem where each listing is a window that opens and closes.
Prepayment is the commitment device
Cutoffs only mean something if the demand behind them is real. Paystack prepayment is what makes a pre-order binding — a vendor can commit to cooking a known quantity because the orders are already paid, not just intended. The money turns "maybe" into a number the kitchen can trust.
The build
A Next.js / TypeScript frontend (tested with Vitest + Playwright) over a Node/ TypeScript API on Prisma. The relational model earns its place here: listings, their cutoffs, and paid orders have clear, enforced relationships, and "is this still orderable?" is a query, not a guess.