The two numbers that decide whether a restaurant survives — food cost and labour cost — on the same screen
Menu, floor, guests, orders and rota as real objects. Margin per dish, what the delivery apps really cost, who is drifting away measured against their own rhythm, and labour as a share of takings by service.
Built for restaurant. From the data layer up.
Most marketing tools model a restaurant as contacts with a favourite-dish field. The real problem is that what the food costs and what the labour costs live in neither the till nor the CRM — the till knows what sold, the accountant knows what was spent, and nobody puts them on one line for a Tuesday lunch. This suite models the work directly: menu sections and dishes with portion costs, named tables and the parties seated at them, a guest book with each guest's own visit rhythm, orders with the commission a delivery app charged, and shifts carrying the rate that was actually paid. It is not a point of sale and it is not payroll.
- ✓Margin per dish against your own menu's medians — not an industry benchmark
- ✓What a delivery app costs per dish, and whether you were charged your agreed rate
- ✓Guests judged against their own visit rhythm, so the weekly regular who vanished is flagged and the twice-a-year couple are left alone
- ✓Labour as a share of takings, lunch against dinner, with the rate kept on the shift so a pay rise never rewrites last month
- ✓Missing data is never read as zero — an uncosted dish is not pure profit and an unpaid shift was not free
Your first afternoon on BorakDesk
- 1Add a site — your public menu link exists the moment it does
- 2Build the menu; it publishes to a link you can QR straight onto a table
- 3Put a portion cost on your ten best sellers — enough to make Menu Performance useful
- 4Enter your delivery-app commission rates and see what they cost you per dish
You know what the apps take. You do not know which dishes it costs you.
Commission is the one restaurant number everybody can quote and nobody can break down. It arrives as a single figure on a payout statement, so the kitchen has no way to know which plates are carrying it — and ends up busiest on the ones it loses money making.
The arithmetic is not hard. It is just never done per dish:
That burger survives. A $9 plate of loaded fries costing $6.40 does not — it breaks even at 28.9% commission, so at 30% it goes out at a loss on every single order. Most menus have two or three of those and no way to find them.
required
Four numbers, and where each one comes from.
Each is computed from rows you already have. None is an estimate, none is benchmarked against an industry figure, and every one of them says so when it cannot be worked out.
Which dishes are worth having
Every dish on two axes — what it makes per sale and how often it sells — against your own menu's medians. A bakery and a steakhouse do not share a threshold, and a fixed one would tell the steakhouse its whole menu was failing.
A dish with no portion cost is reported as uncosted, never as pure profit.
What the delivery apps really cost
Per dish, after commission — plus whether the rate you were actually charged matches the one you signed for. Where you already mark prices up on the app, the price it went out at there is what gets used.
A channel with no rate on file reports orders and says the margin is unknown.
Who is drifting away
Measured against each guest's own gap between visits. The Tuesday regular who has not been in for a fortnight has gone somewhere else; the couple who come twice a year are behaving normally at ninety days. One fixed rule gets both wrong, in opposite directions.
Under three visits there is no rhythm, and the row says it was judged on a fixed window instead.
What a service cost to staff
Wages as a share of takings, lunch against dinner, with a shift split across the boundary rather than dumped in whichever service it started in. The rate lives on the shift, so a pay rise never rewrites last month.
One shift with no rate withholds the exact figure and gives a floor — "at least 37%" — rather than reading comfortingly low.
Against the stack an independent actually has.
Not against a restaurant ERP. Against the four or five things a fifty-cover place is already paying for, plus the spreadsheet doing the rest.
| The question | Their stack today | Here |
|---|---|---|
| Which dish should I take off? | Till report of what sold, and a guess at cost | Margin per dish against your own medians, with the gap named |
| What did DoorDash cost me? | One figure on a payout statement | Per dish, after commission, with your contract rate checked against what was taken |
| Who should I email? | Everyone who has not been in for 45 days | Guests overdue against their OWN rhythm, with anyone contacted recently held back |
| How long is the wait? | The host's judgement | The same judgement, plus turn times measured from your own floor |
| Was Tuesday lunch worth opening? | A feeling, and the bank balance | Labour share for that service, against what the room took |
| How do my three sites compare? | Three logins and a spreadsheet | One page, one measure at a time, against the median of their peers |
Sixteen tools, one contract.
No restaurant buys sixteen separate products — the categories arrive bundled, three or four at a time. A place arriving from a typical stack cancels three to five subscriptions and stops paying per cover for the one that charges that way. Each row below is what the VDM does today, and where that capability is going next.
| Capability | Usually bought as | Available today | Roadmap |
|---|---|---|---|
| Public menu page | Popmenu, BentoBox, Owner.com | A live link per brand and per site — real prices, allergens, dietary labels, open-now in the site’s own timezone, sold-out dishes hidden, a truck’s next stops instead of an address | Complete |
| Commission-free direct ordering | ChowNow, Owner.com, Toast Online Ordering | Basket with modifiers, pickup, delivery or dine-in, order tracking on a guest link, confirmations to guest and kitchen | Card payment on the page; today it is pay on collection and says so |
| Table reservations | OpenTable, Resy, SevenRooms | Booking from the menu page, confirm, change or cancel on a guest link with no account, operator alert on every request | Complete |
| Walk-in queue | Yelp Waitlist, Waitwhile, a stack of pagers | Queue with a public status link per party, and a wait quoted from the floor rather than guessed | Complete |
| Floor plan & turn times | SevenRooms, OpenTable floor tools | Named tables with covers, seat from the queue or a booking or the door, turn times per party size, one table one party enforced in the database | Complete |
| Menu engineering & food cost | MarginEdge, Restaurant365 module, a spreadsheet | Portion cost with a staleness clock, margin per sale and in total, stars / plough horses / puzzles / dogs on your own medians, per-site margin from one cost against several prices | Recipe-level costing driven from supplier invoices |
| Delivery commission reconciliation | Otter, a spreadsheet, nothing | A rate per app, contract against charged, net per order, per-dish margin after commission and the rate each dish breaks even at | Complete |
| Guest CRM & lifecycle | SevenRooms, Punchh, Thanx, Mailchimp | Guest book over your contacts, position against each guest’s own rhythm, birthdays and first-visit anniversaries, audiences handed to Campaigns with per-stage cooldowns | Complete |
| Loyalty | Punchh, Thanx, Como, Square Loyalty | Punch card or points, tier ladder, rewards, readable member codes, and a ledger carrying the balance after every movement | Complete |
| Guest email campaigns | Mailchimp, Constant Contact | The standard Campaigns surface, fed by restaurant audiences — one email allowance, not a second mailer to reconcile | Complete |
| Labour against sales | 7shifts, Homebase, Restaurant365 labour | Staff list with no logins needed, shifts carrying the rate actually paid, labour share by day and by service, cost per cover | Building the rota itself — shift offers, swaps and availability |
| Catering enquiry pipeline | Caterease, Total Party Planner | New to won or lost with a reason required on every loss, win rate, pipeline value, and why you lose grouped | Generating the quote document |
| Events & private dining | Tripleseat, Perfect Venue | Ticketed, free or RSVP-only events, capacity counted in covers rather than bookings, waitlist promoted in order when somebody drops | A public event page that takes the booking and the payment |
| Multi-site reporting | Restaurant365, Avero, Tenzo | Per-site margin, labour, covers and channel mix; one ordering per measure within a site’s own kind; outliers named against peers; the same dish compared across every site | Complete |
| Truck location updates | Street Food Finder, posting it yourself | Stops with times and arrival notes, sold-out recorded separately from finished, and a public next-stops list that keeps itself current | Complete |
| Daily specials | A chalkboard, a social post, a menu add-on | Recurring specials on the days you choose, live on the public page while they are on and absent when they are not | Complete |
Named products are a comparison by capability category, not an audit of another vendor's software. Three things are deliberately not on this list and not in the product: it is not a point of sale — no order reaches a kitchen printer, no bill is split, no card is taken; it is not payroll — no tax, no filing, no payments; and it does not log in to the delivery apps. The commission figures come from the orders you record and the rates you enter, which is also why they work on day one.
What is next, and what is not ours to promise.
- Review requests that actually sendThe screen holds the settings today and the send is not wired — so it is not claimed above. Requests triggered by a completed visit, with moderation before anything is published.
- Payment on the ordering pageOnline orders are pay-on-collection today and say so plainly. A payment surface carries its own compliance work, which is why it was kept out of R3 rather than half-built.
- Building the rota, not just costing itShifts are recorded and costed now. Offering a shift, swapping one and collecting availability is the next layer.
- Recipe costing from invoicesPortion costs are entered by hand. Reading them off supplier invoices is the obvious next step and a real piece of work.
- A public events pageEvents, capacity in covers and the self-promoting waitlist all exist; selling a seat on your own page does not yet.
- Reading orders from the delivery appsEach marketplace runs its own developer programme and approval. Until one approves us there is nothing to connect, so the commission work was built to need no login at all — which is why it works today.
- Text messages to guestsThere is no SMS channel on these accounts, so nothing in the product promises one. The host calls the name, as they always have.
- Pulling reviews back from Google, Yelp or TripAdvisorReading a platform's reviews is a function of that platform's terms, not of our roadmap. Asking a guest for one is ours; collecting them back is theirs.
- Till and POS integrationThe till remains the till. Where a POS opens a usable interface this becomes possible; naming a date for somebody else's API would be inventing one.
Run your restaurant marketing on a platform that gets it.
14-day free trial. Full feature access. No credit card. Solution engineer walks you through the Restaurant suite on day one.
