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

Share this project:

Updates

Submission history