Skip to content

Inventory — overview

The inventory is the kitchen’s digital pantry. Every box of tomatoes in the walk-in, every kilo of pasta on the dry shelf, every prep the cooks make in the morning, every bottle of wine in the cellar — they all live here as one row each. When the kitchen counts something, this is where the number lands. When the till sells a dish, this is where the ingredients get deducted from. When the owner asks “what did food cost me this week?”, the answer is built from these rows.

This page is the entry point. The owner who’s never seen the system reads the “Why this page exists” section to understand what they’re looking at; the head chef who already runs a kitchen jumps to “How the kitchen uses it” for the workflow.

Why this page exists

The owner reads numbers. The chef runs the kitchen. The inventory is the place where the two agree on reality: the cooks count what’s actually on the shelf, the owner reads the same number from a dashboard, and the till deducts from the same number when a dish leaves the pass. The pantry is the only place in the system where the physical kitchen and the accounting kitchen are the same number.

That’s the whole point. If the kitchen runs “in the chef’s head” — “we still have plenty of ragù” — the owner can’t see what tomorrow’s order should be, the till doesn’t know what to deduct, and the cost-of-goods report at the end of the week is a guess. The pantry replaces all of that with one row per thing, one number per row, kept honest by the people who touch it.

The other reason it exists is sourcing. The same San Marzano tomato can cost you €3.80 a tin from one supplier and €5.50 from another. The dish that uses it doesn’t change — the cost does. Locking each item to a preferred supplier, and letting you swap that supplier without rewriting any recipe, is how the kitchen stays sane when prices move.

The rule

The inventory is not a shopping list. It’s the memory of the kitchen. Every number here governs three places at once: how much to order tomorrow, what the dish costs tonight, what the till deducts when it sells. Get a number wrong here and you’ve got a number wrong in three places.

What lives in the pantry

Three kinds of things, all in the same list. The app tags each row with a small chip — L1, L2, or L3 — that tells you which kind it is.

L1 — things you buy from a supplier. Tomatoes, ground beef, wine, olive oil, pasta, onions. These are the raw materials of the kitchen — what arrives at the back door from a delivery truck. Each one has a preferred supplier, a current cost, a current stock level, and a target stock level (called the par level — the minimum quantity the chef wants to always have on hand). When the stock falls below par, the item shows up on a short list of things to reorder.

L2 — things the kitchen makes. Ragù, stock, fresh pasta, pizza dough, mirepoix, sauces, fillings. These are not bought — they’re produced by a recipe the kitchen runs, usually in the morning, and stored in a container for the day’s service. Every prep the kitchen makes appears here as a row because it occupies shelf space, has a cost (the sum of its ingredients), and gets deducted from when service uses it.

L3 — things you sell as a bottle or a finished item. A bottle of wine, a bottle of olive oil for retail, a can of San Pellegrino. They live in the pantry just like raw materials, because the till sells them whole and the kitchen counts them by the unit. No recipe transforms them — they go in and out unchanged. L3 also covers any finished dish that the system needs to attribute the sale to (Carbonara, Cacio e Pepe, Tagliatelle al Ragù) — but those rows are hidden from the inventory list when they have no stock to count, because they’re plated to order and never sit on a shelf. See the next paragraph.

The level chip is more than a label — it tells the kitchen and the till how to treat the row. L1 rows can never be the output of a recipe; they’re always bought from a supplier. L2 rows are always produced by a batched recipe and always have stock to count. L3 rows are sometimes counted (bottles, finished goods) and sometimes invisible (plated-to-order dishes). The system maintains the chip automatically — you don’t pick L1/L2/L3 manually, the kitchen workflow decides for you.

What does not show in the pantry list: dishes plated to order. A Cacio e Pepe never sits on a shelf. When the till sells one, the system silently walks the recipe and deducts the pasta, pecorino, and pepper from their pantry rows. The Cacio e Pepe itself exists as a hidden L3 plumbing row — present so the till has something to attribute the sale to, invisible in the pantry list because it has no stock and never will.

How the kitchen uses it

Open /admin/inventory and you land on the full list, sortable and filterable. A typical day has the chef using the page in three or four bursts:

Morning, before service. The chef opens the page, filters to Below par, and reads the short list of things that came in lower than the target the day before. Half are real reorders that go on the daily supplier message. The other half are things that look low but will be replenished by today’s prep — the dough, the ragù, the brodo. The chef leaves those alone.

Mid-service. Something runs out. The line shouts. The chef opens inventory on the phone, finds the item, marks it out, and tells the floor to 86 the dishes that depend on it. The row’s stock now reads 0, the dishes on the menu auto-flag as unavailable, and the till stops selling them.

After service. The kitchen does a quick count of three or four high-value items (the proteins, the wines opened, the truffles). The chef updates the rows. The stock numbers reconcile with reality before tomorrow’s order goes out. For a full count of the whole pantry, the stock count flow runs weekly or monthly and reconciles everything at once.

Adding a new ingredient. Two ways. The clean way is to start from the supplier: open Suppliers, find or add the supplier, paste their price list or add the product manually, approve it. The system creates the inventory row for you, already linked to the supplier and already costed. The other way is to add the row directly from inventory — handy if the supplier isn’t in the system yet — and link the supplier later from the item’s detail page. See editing an item for the field-by-field walkthrough.

Adding a prep. This one starts from recipes, not from inventory directly. Write the recipe, mark it as batched, save — the inventory row for the prep is created for you, in a Kitchen production category, with the cost rolled up from the ingredients. From that point on the prep is a normal pantry row that the daily prep board can produce and the till can deduct from.

What happens behind the scenes

Every number on this page is connected to every other number that touches it.

When you change an item’s cost — by recording a delivery at a new price, or by switching the preferred supplier — the system walks every recipe that uses that item and recomputes it. The total cost of the recipe updates, the cost-per-portion updates, and every menu item that points at that recipe shows a fresh food-cost percentage on the dashboard. No one edits the recipes; the cascade does it.

When you change an item’s par level, the Below par filter updates instantly on the next page load and the daily reorder shortlist follows.

When the till sells a dish, the stock of every ingredient in that dish’s recipe drops by the right amount. If the dish is a prep (a batched recipe like ragù), the prep itself drops. If the dish is plated to order, the prep’s ingredients drop one level down — the pasta, the pecorino, the pepper.

When the kitchen logs waste (a spilled bottle, a tray that went bad), the stock drops without a sale. The cost of that waste rolls up into the weekly cost-of-goods report.

The pantry is the verb that ties everything together. A delivery comes in — the pantry gets bigger. A dish goes out — the pantry gets smaller. The numbers always reconcile because every event in the kitchen moves a pantry row by the right amount.

Worked example — San Marzano tomatoes, three months

Marco opens your venue for January. He sets up San Marzano tomatoes in the pantry: supplier ItalianDirect, 1 kg tin at €3.80, par level 20 tins, current stock 24 tins. The recipe for the house ragù uses 2 kg per batch, so each batch costs €7.60 in tomatoes. The ragù feeds eight portions of Tagliatelle al Ragù, which sells at €18 on the menu. Marco glances at the food-cost on the dashboard: 32%. He’s happy.

February. The ItalianDirect price goes up to €4.20. The next delivery is recorded at the new price. By the time Marco’s coffee is cold, the ragù has recomputed — €8.40 instead of €7.60 — and the tagliatelle’s food cost on the dashboard reads 33%. Marco doesn’t touch a recipe; he just notices the number moved.

March. A new supplier shows up at the back door offering premium San Marzano at €5.50 a tin. Marco wants to test it without committing. He opens the San Marzano tomatoes row, goes to the Suppliers tab, and adds the new product. He leaves ItalianDirect as the preferred supplier — meaning the cost on the row still reads €4.20 — and lets the new supplier sit there as an option. He receives one delivery from the new supplier to test in the kitchen.

April. The chef likes the premium tomatoes. Marco flips the Preferred flag from ItalianDirect to the new supplier. The pantry row’s cost jumps to €5.50. The ragù recomputes to €11.00. The tagliatelle’s food cost reads 37% — five points worse than January. Marco does the math: that’s €1.60 less margin per plate, on ~40 plates a week, about €260 a month less profit on one dish. The taste isn’t worth it. He flips Preferred back to ItalianDirect. Within a minute the numbers everywhere are back to 33%. One toggle, four places reconciled.

  • Editing an inventory item — the detail page for every row: name, category, supplier, par, units, notes, history
  • Recipes — how the kitchen turns ingredients into a costed output — why batched recipes produce their own inventory row, and how cost flows from ingredients to recipe to dish
  • Inventory categories — the catalogue that groups rows in the list (Vegetables, Dairy, Wines, Kitchen production, …)
  • Storage locations — the catalogue of physical places (walk-in, dry store, bar, freezer) attached to each row
  • Stock counts — the periodic physical audit that resets the numbers when reality and the system drift apart
  • Waste log — how to take stock down without a sale (spoilage, breakage, theft)
  • Separations — when one ingredient (a whole egg, a whole fish, a whole leg of veal) is physically split into its parts, each with its own row and its own slice of the cost
  • Re-pointing inventory links — two surgical operations: changing which inventory item a recipe produces, and merging two duplicate rows into one
  • What shows up in the inventory list — the rule that decides which rows are visible (only items linked to at least one supplier, or produced by a recipe, appear)
  • Product samples — a separate ledger for free or paid samples received from suppliers, tracked apart from live stock until the kitchen approves them
  • Adding photos to inventory items — uploading a photo gallery per item; the starred photo becomes the row thumbnail
  • Beverage Margins and Food Margins — the dashboards that hunt down the worst-margin sellers across both kinds
  • Where your information lives — the five rooms of the system; this page is the pantry
  • Prices, costs, and margins — the broader rule about how the cost number you set here cascades through three different prices