Inspiration: Independent restaurants run on two disconnected systems — invoices and recipes. Connecting them takes an analyst, and analysts cost more than the restaurant's entire software budget. MarginPlate is the connector.
What it does: Photograph a supplier invoice. MarginPlate extracts every line item, normalizes units across case, pound, ounce and each, recomputes cost-per-plate for the whole menu, detects supplier price creep with the dollar impact, and forecasts stockouts before they happen.
How we built it: Next.js on Vercel, Supabase Postgres with row-level security for multi-tenancy, storage-triggered job queue, a vision model for extraction, and four pure, unit-tested algorithms in lib/ for unit normalization, recipe costing, creep detection and stockout forecasting.
Challenges: Unit normalization. "1 case (24 ct)" and "6 lb" must become the same number before any costing is meaningful, and suppliers name things inconsistently. We built a canonical unit map, a yield-factor table, and per-supplier alias memory that learns from a single correction.
Accomplishments: A working end-to-end pipeline that turns a photo into a defensible margin number, with the arithmetic shown on screen so the owner can verify it.
What we learned: The hard part of a data product isn't the model — it's making the units agree.
What's next: POS integration for real usage data, supplier ordering APIs, and benchmarking against cuisine-level food cost averages.
Built With
- built-with:-next.js
- inngest
- openai
- postgresql
- stripe
- supabase
- tailwind
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.