Menu Menace Open the app

Where the numbers come from

Every score in the app is one of the formulas below, run on the device over the menu's prices and portions. No secret weighting, no vibes.

The two honesty rules

✓ Verified — a price a person confirmed, or a chain published, within the last 30 days. The app shows the date and how many people agreed. Nothing else ever gets the green check.

🖩 Estimated — nutrition, margins, satiety, ingredient value and every buffet or per-pound projection. Drawn with a calculator, always.

Ranking a menu

Every item gets a score for the goal you picked, highest first. Ties break by the lower price, then alphabetically, so the order is stable. The bar under each row is that item's score as a share of the winner's. The last row is the sucker item; an item priced below its estimated cost is a loss leader.

Protein per dollar

protein (g) ÷ price = g/$

Calories per dollar

calories ÷ price = cal/$

Ingredient value

How much of your dollar is actually food. Ingredient value is the estimated retail cost of what is on the plate; where we have no costing, we fall back to price × (1 − margin%).

(ingredient value ÷ price) × 100 = ¢ of food per $

Stay full longest

Hours of not-being-hungry per dollar. About 200 kcal buys an hour for an average adult, then protein, fibre and sheer volume stretch it. Capped at 8 hours so a 4,200-calorie pizza cannot claim a day.

satiety = min(1, 0.15 + 0.7 × protein share of calories + fibre boost + volume boost)
hours = clamp(0.25, 8, (calories ÷ 200) × (0.7 + 0.6 × satiety))
hours ÷ price = hrs/$

Lowest margin

Where the restaurant profits least — the item they would rather you did not order. Estimated from ingredient costs and published industry reports, and useful for comparing items on one menu, not as anyone's accounts.

score = 100 − estimated margin %  ·  shown as margin %

Buffet break-even

How many plates of the good stuff it takes to out-eat the door price. Rice, bread and pasta are near-zero value and are excluded from the average — that exclusion is the whole point of the mode.

plate value = à la carte price of that dish (fillers: capped at $0.60)
break-even = buffet price ÷ average plate value of the non-filler dishes
verdict: (your plates × average plate value) − buffet price = what you win or overpay

Pay by weight (hot bars)

Everything costs the same per pound, so the only question is how much protein is in a pound — and how much of that pound is sauce you could have drained.

protein per lb = (protein ÷ portion grams) × 453.592
value = protein per lb ÷ price per lb = g/$
drain saving ≈ (140 g scoop ÷ 453.592) × price per lb × drainable share
drainable share: 30% for sauce-heavy dishes, 5% otherwise

Anything under 3 g/$ — or any pure filler — lands in “Skip”. 6 g/$ and up is “Load up”.

Building an order

The combo builder is an exact bounded-knapsack search at one-cent resolution over the whole menu: the most of your goal that your budget can buy, up to six of any one item and three lines. Drinks and desserts are excluded. It also looks for bundles that cost the same as buying units (five slices for the price of a whole eight-slice pizza) and for upgrades whose extra dollars buy almost nothing.

What “verified” means exactly

Where the inputs come from

Spot something wrong? Verify the price in the app. A dated correction from a person beats our best guess, every time.