Beverage Margins and Food Margins — the two dashboards that hunt down the worst sellers
The menu has two hundred items; the till sells them at different prices; the kitchen pays different costs for each. Somewhere in that grid sits the dish costing you ninety baht to make and selling for one hundred and ten. Without a dedicated dashboard the leak hides — the rest of the menu compensates and the owner only notices at year-end. The Margins dashboards exist to surface the leak the moment it appears.
This page is for the owner running the monthly cost pass and the head chef checking that the kitchen’s actual cost matches what the menu promises. It covers both Beverage Margins (the surface for wines, spirits, cocktails, coffees) and Food Margins (the surface for pasta, mains, desserts) — they’re sibling pages with identical layouts.
Why this page exists
Margins drift. A bottle of olive oil goes up three baht; the carbonara’s food-cost percent shifts from 18 to 22; nobody notices until the monthly close. A wine supplier raises a Chianti by 8 percent; the bottle margin slides from 74 to 71 and the glass-by-the-pour margin from 46 to 41; nobody notices until the bar’s quarterly profit-and-loss comes in flat. The fix is not better month-end reconciliation — it’s having a screen the owner opens once a week and reads as fast as a thermometer.
The two dashboards do exactly that. Every dish you sell appears as a row with its cost, sell price, and a margin pill colored on a four-band scale: emerald above 60 percent, amber 40–60 percent, rose below 40 percent, rose with the underwater badge below zero. The owner scrolls; the screen draws their eye to the rose rows; they click the row, the editor opens, they raise the price or relink the inventory. Three minutes. The leak closes the same morning.
The rule
The dashboard never invents numbers — it only surfaces them. Every cost on every row is the live cost recorded in the pantry; every sell price is the live price set on the POS item. If a row looks wrong, the bug is on the pantry side (cost typed in wrong, inventory not linked) or on the POS side (price not set, tier not used) — not on the dashboard. Always trace the rose row back to the pantry or to the POS item to find the fix.
How to read the dashboard
You open Beverage Margins or Food Margins from the Back of House sidebar. The page is identical between the two — the only difference is the kind of items it loads. At the top you see four KPI tiles, then a horizontal per-category strip, then the filter toolbar, then the table.
The KPI tiles answer the headline question for the whole kind. Total beverage items — how many. Cost recorded — how many of those have a price-to-cost number; the rest are unlinked and the dashboard can’t compute their margin. Low margin (< 40 %) — how many are leaking. Underwater — how many are selling for less than they cost.
The per-category strip scrolls horizontally; one card per POS category that exists for this kind. Each card carries the category name, the item count, an average worst-margin percentage, and a thin distribution bar that splits four ways: emerald for the healthy items, amber for the thin ones, rose for the low, gray for the items with no cost yet. The bar gives the owner a one-glance read of the category’s health — a category whose bar is mostly gray means cost data is missing across the board; a category whose bar is mostly rose is leaking everywhere.
Click a category card to filter the table to that category. Click “All categories” to clear. The active card is purple-ringed.
The filter toolbar lives at the top of the table and stays sticky as you scroll — the search box (which matches name, category, and supplier all together) plus four sort pills (Worst first / Best first / A → Z / By category) plus the Needs attention toggle, which narrows to anything missing cost OR sitting below 40 % margin.
The table shows one row per POS item, with the per-tier breakdown stacked inside the rightmost column. Tiers with a price of zero (the unconfigured ones in the category blueprint, e.g. the 330 ml tier you don’t pour on this wine) are hidden, with “+N unused tiers hidden” beneath the visible rows to keep the line count honest.
Reading a tier row
Each tier on a row shows three pieces: the tier name, the quantity-and-unit (e.g. 750 mL) when the tier consumes a fraction of the inventory unit, the sell price, and the margin pill. The pill carries the percentage and a tone — emerald for healthy, amber for thin, rose for low, gray + “NO COST” when the cost couldn’t be computed.
The reason the pill might read NO COST is one of three:
- The POS item isn’t linked to inventory. Open the item editor and use the Inventory bridge card to link it.
- The tier’s
Pour sizeis zero or 1 mL (a leftover from a category-blueprint default). Set it to a real number; the cost will appear. - The linked inventory item has no cost yet — it was created without a supplier or purchase. Receive a purchase or set the last purchase price on the inventory row.
Worked example — a Chianti and a carbonara
It’s Monday morning, the start of the monthly cost pass. Marco opens Beverage Margins. The KPI tiles read 164 beverage items, 48 with cost recorded, 6 low margin, 0 underwater. He scrolls past the per-category strip — wines are sitting at a healthy 62 % average, cocktails at a worrying 46 %.
He clicks the Cocktails card. The table refilters; he sees twenty-eight cocktail rows, sorted worst-margin-first. The top row is Negroni Sbagliato — Glass tier at ฿320, cost ฿180, margin 44 %. Below recipe target. He clicks the row, the editor opens. The bar shows him Glass, 60 mL; the inventory link points at the Prosecco bottle the bartender topped the drink with. The Prosecco line went up two months ago; nobody adjusted the cocktail. He raises the sell price to ฿340 and saves. Closes the drawer. The row’s margin pill re-renders at 47 %. Still amber, but he keeps it parked there — the bar charges within Bangkok’s market range.
He clears the filter, taps the Beverage → Food tab band at the top of the page. The page swaps to Food Margins with the same shape. KPI tiles read 77 food items, 0 with cost recorded — a red flag. He scrolls; the table fills with rows tagged ⚠ Not linked to inventory because none of the recipes are bridged to the cost rollups. The fix isn’t on the dashboard; it’s on the recipe side. He notes the count, opens a calendar block to spend the afternoon with the head chef linking pasta and main recipes to their pantry ingredients.
A week later, with cost data in place, the same dashboard reads 77 items, 64 cost recorded, 2 low margin, 0 underwater. The two low-margin rows are Tagliatelle al Tartufo Nero (truffle prices spiked) and Aragosta del Capitano (lobster sourcing changed). He addresses both individually — one through a menu-price adjustment, one through a sourcing switch. Both rows turn emerald the next day.
What the dashboard does NOT do
- It doesn’t surface labour or overhead. Margins here are food-cost margins — ingredients in, sell price out. A 70 % gross margin on a labour-heavy dish is not necessarily profitable. Use accounting for that — see bitethemenu-invoicing.
- It doesn’t auto-fix items. The dashboard surfaces; the operator clicks through and fixes. The fix is always one click away — the row is clickable — but the dashboard never changes a price or cost on its own.
- It doesn’t include modifiers. A dish whose modifier (Add-on Truffle, +฿180) leaks margin is invisible here. Modifier-level margin is a separate (future) surface.
Related features
- Editing an inventory item — where
costPerUnitandlastPurchasePriceare set; the dashboard reads from those - Selling the same dish in two sizes — explains the per-tier shape that drives the row breakdown
- Recipes — how the kitchen turns ingredients into a costed output — recipes are what makes “cost recorded” land on food items
- Prices, costs, and margins — the foundational rule about what each number means