The restaurant module of Cardinal

Nothing in the bin. Nothing 86'd.

Throwing it out and running out look like opposite problems. They're the same one: nobody knows what's actually on the shelf. Chowhound is a phone app your crew will pick up and a console that turns what they tap into dollars — so you buy enough, and no more.

We're building it for one restaurant. Not a market.

No waste — what's turning, while it's still food No 86s — what runs short, before service Dollars that add back up Your day ends at 4am. So does ours

Two ways it costs you. One cause.

Order heavy and it dies in the walk-in. Order light and you're 86'ing the special at 7:15 and sending someone to the store at retail. Most kitchens swing between the two all year, because the one number that would settle it — what actually left the shelf — is the one nobody can see.

Two counts, the invoices in between, and the recipes behind the sales give you that number. Per product. In whatever you actually count in, so litres stay litres and a keg stays a keg.

Then it breaks into four pieces that add back up to what you really paid. What the recipes say you sold. What somebody logged when they dropped it. What moved because a price moved. And the rest — the part that left without being sold, logged, or priced. That's the waste you can still do something about.

Bar, count to count — one week, 22 bottles

example layout · the numbers are made up Solid
$332 theoreticalWhat the recipes say the week's drinks used
$14 logged wasteSpills, a dropped bottle, a comped round — three taps each
$38 unexplainedUsed, not sold, not logged. $34 of it actionable
$6 price effectLast invoice price moved between the two counts

332 + 14 + 38 + 6 = $390. Begin stock, plus what you bought, less end stock. Same number your own invoices give you. It balances every time, because a price move gets its own line instead of being smeared through the loss.

ProductUsedRecipes sayLogged waste Unexplained
Well vodka6.1 L5.0 L0.2 L $11chase it
Tequila blanco3.4 L2.8 Lnone $14chase it
House red11 btl9.6 btl0.5 btl $9chase it
Draft IPA1.28 kegs1.26 kegsnone $3within counting noise
Lime juice2.1 L1.9 L0.1 L $1within counting noise
sorted by unexplained dollars rows inside the count method's tolerance are greyed and left out of the actionable total a product not counted this week is listed, never estimated

Two screens. Nobody uses both.

Whoever's wiping down the well at midnight and whoever reads the P&L on Sunday want nothing in common. Same number underneath, though.

ON THE PHONE

For whoever is holding the bottle

Item, amount, reason. Saved on the third tap, then "Logged. About $4. Thanks." and an Undo for when they fat-finger it. Counting walks the shelf in order with a photo of each product, so nobody's standing there wondering which bottle is which. The bar is two taps: tap the drawn bottle where the liquid actually sits.

It works in the walk-in with no bars on the phone. Everything saves the second it's tapped, and the screen never lets saved here look like sent. English or Spanish, per person. A manager enrolls the phone once. After that the PIN just says who's counting.

IN THE CONSOLE

For the person who pays the invoices

Today answers one question: what needs me. Somewhere between zero and three cards, dollars first, and tapping one opens the actual record with the fix already in focus. Under that, five numbers for yesterday, and the feeds written as times instead of a green dot.

Invoices are reviewed by exception. You only see the lines that failed a check, each one next to the crop of itself off the page. Counts close here and nowhere else. No phone closes a count.

ON EVERY NUMBER

One mark, not three

Every figure carries one word. Solid means act on it. Partial means watch it, and the popover tells you why: "Clover data is 3 hours old", "Recipes cover 86% of sales". Too early means it isn't a number yet, and here's what it's still waiting on.

Cards only get built from Solid numbers. An unknown never shows as $0 or 0%, and an empty chart doesn't get drawn at all.

One email a day. Both sides of it.

Not a dashboard you have to remember exists. One message at 6:30 naming what's about to be thrown out and what's about to run short, then it leaves you alone until there's something else worth saying.

Waste you logged
Always written "At least $X, n of m shifts" — never a total that pretends the quiet stations reported. No trend arrow under 70% coverage
Waste you didn't
Unexplained dollars per product, per interval between two counts that both contained it. The gap between those two tiles is the honest one
What runs short
Against the recipes and what's on the shelf, so it surfaces while an order can still fix it rather than at the pass
What it cost either way
Theoretical against actual for the week, with labor from the time clock trued up later against the payroll journal
Needs you — ranked by dollars, never more than three
  • Ask for a credit — two cases short Tuesday The driver initialed the page and it's attached. The request is already written; one click sends it to your rep.
  • Price jump — chicken thigh outside its band More than 10% off its 90-day median. Opens the product's cost history, with the monthly effect at current volume.
  • Unexplained loss — ribeye, $64 since the last count Opens the interval: begin, purchases, end, sales, and links to the count lines, invoices and recipe version it used.
  • Close Sunday's count Submitted, not closed. If a phone is still holding entries for it, the banner names the phone and Close waits.

What it reads.

Nothing goes in your walk-in. No cameras on the shelf. Four inputs, and all the care is in how each one gets handled.

You count, blind. The field starts empty. The system has its own guess and keeps it to itself, then uses it afterwards to ask whether one line is worth a second look. Entries are append-only, so a total is just a view over them. Nothing you typed gets overwritten, and two people working two sections don't land on each other.

Invoices land. Photograph the pages at the door or upload the PDF. Lines, pack sizes and prices come off it. Cost is the last invoice price in force that day, which is the number you can check against the paper in your hand. Begin and end stock get valued at different prices, so the price move rides on its own line instead of hiding inside the loss.

Clover says what sold. Pulled every ten minutes, and the last three business days pulled again overnight, because voids and late edits happen. The business day ends at 4am. A bar that closes at 1:30 and a delivery that lands at seven belong to different days, and this is the only way they end up on the right ones.

Recipes turn sales back into products. Variance is figured in raw products only. Prep sitting in the cooler gets broken back down to its ingredients at count time, so the same chicken isn't counted twice. Every recipe, mapping and cost is a dated version, and once an interval closes its result is frozen. Change something later and you get a numbered restatement instead of a past that quietly isn't what it was.

What it won't do

No reading bottles off a photo. Nobody selling that will publish an honest accuracy figure, so here the camera runs behind the person. You set the level, the photo is taken after, and the model's guess is never shown to you. It graduates only if it beats the slider. Otherwise it quietly never ships.

It won't send your order. Order and prep suggestions turn up with their backtest error printed next to them, and a person presses send. Nothing logs into a vendor portal pretending to be you.

Nobody gets ranked. No per-person totals, no leaderboards, no red dollar figures on a waste screen. Waste reports by station and service period. The name sits one click deeper so you can ask, and it never goes in the email.

It won't make a number up. An unknown cost isn't $0. It says "We'll price this once the recipe is in." A ratio with nothing under it reads n/a, or Too early.

It won't keep your books. No inventory or cost-of-goods journal gets posted anywhere. Payroll is read out of the ledger instead of the payroll system, which keeps social security numbers and bank details out of this entirely.

Why it's this small.

Because it's being built for one restaurant instead of a market segment. Owner-operated, around $300,000 a year, about a third of that the bar. Clover on the counter, Gordon at the back door, ADP running payroll, QuickBooks underneath. Those aren't assumptions about a buyer. They're what's actually in the building.

Every screen is drawn against that kitchen's invoices and that bar's 22 bottles. It's the restaurant module of Cardinal, so it sits next to the rest of that platform instead of being one more login nobody can find. Data is split per tenant from the first migration, which is what makes a second restaurant a new tenant rather than a rewrite.

The back-office systems that already exist are good accounting software underneath. They tell you what last month cost. This has a smaller job: make the gap between what you sold and what left the shelf small enough to argue with.

Where this actually is

Being built now, against a real kitchen's invoices and a real bar. Not a demo dataset. Nothing here is live yet, and there are no dates on this page because there are none in the spec either.

Four releases, in order, each one gated on the last. Capture first: waste, counts, receiving, invoice review. Then recipes and variance. Then planning, labor and pricing. Nothing writes out to another system until that last one.

Early access means you see the rough edges and get a say in what gets built. It doesn't mean a finished product on a free trial. If that's the wrong trade right now, it's the wrong trade.