The restaurant module of Cardinal
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.
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.
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.
| Product | Used | Recipes say | Logged waste | Unexplained | |
|---|---|---|---|---|---|
| Well vodka | 6.1 L | 5.0 L | 0.2 L | $11 | chase it |
| Tequila blanco | 3.4 L | 2.8 L | none | $14 | chase it |
| House red | 11 btl | 9.6 btl | 0.5 btl | $9 | chase it |
| Draft IPA | 1.28 kegs | 1.26 kegs | none | $3 | within counting noise |
| Lime juice | 2.1 L | 1.9 L | 0.1 L | $1 | within counting noise |
Whoever's wiping down the well at midnight and whoever reads the P&L on Sunday want nothing in common. Same number underneath, though.
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.
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.
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.
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.
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.
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.
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.
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.
Tell us what you run, what's on the counter, and who delivers. We'll come back when there's something worth your time.
The signup list isn't wired up yet — Keep me posted opens an email to info@teamstrata.app and we'll add you properly. Nothing is stored on this page.