A planning calculator for someone opening a restaurant. It opens with industry-benchmark cost assumptions and works with nothing else — enter what you know (a signed lease, an insurance quote) over the top. Two things update live: the monthly revenue you need to break even, and which future month your sales forecast crosses that line into profit.
Nothing here reads or changes your imported sales data. Your entries and any "what-if" scenarios are saved in this browser — come back any time.
This is cost-volume-profit analysis — standard managerial accounting — applied to a restaurant. Split your costs into two buckets: the ones that grow with sales (variable) and the ones that don't (fixed). Each sales dollar first pays its own variable cost; what's left is the contribution margin, and it's what chips away at your fixed cost. Break-even is the monthly sales level at which those contributions have just finished paying the fixed cost off — every dollar past it is operating profit; every dollar short of it is a loss for the month.
Monthly break-even = fixed cost ÷ (1 − variable-cost %).
Each cost line can be entered as a flat monthly $ or a % of sales.
In the forecast, every variable line holds its % as sales grow; every fixed line
stays flat in dollars. Real utilities drift up a bit when you're busier — this model holds
Utilities flat, so read that line as an approximation.
Break-even revenue, the contribution margin ratio and the cost structure are all steady-state figures. An optional ramp-up period (in the Sales forecast, below) only reshapes how quickly your projected sales climb to that steady state — it doesn't move the break-even line itself, just the month you're forecast to reach it.
Enter your assumptions below to see your break-even picture.
Total revenue vs. total cost as sales volume rises. They cross at your break-even revenue; the gap after that point is profit.
Your projected monthly sales against the flat break-even line. The marked month is when the forecast crosses into profit. If you set a ramp-up period, the sales line is dashed through the ramp months, then solid once it grows at your steady rate.
Your stabilized sales against the break-even threshold — how far you have to climb, or how much cushion you have, once you're running at the level you actually planned for. With a ramp-up period, your literal month 1 is expected to sit below break-even pace — that's normal and not shown here; see the Month-1 profit/loss and gap tiles above for the ramped opening figure instead.
Where the money goes at your stabilized monthly sales level — fixed vs. variable, biggest lines first.
How much your monthly break-even revenue shifts if each of the
eight cost lines you can most directly control comes in higher or lower than you entered.
Dial the ±% swing for any line below — it defaults to 10%, but set
Credit Card Processing Fees to 20 and you're looking at a half-point move on a 2.5%
line; set Rent to 15 to stress a lease that lands over budget. (The other eight cost
lines still recompute everything — they're just kept off this view.)
Save your working numbers, or keep several versions — e.g. duplicate your base case, raise the rent, and compare. The active scenario name appears on every panel and chart above.
This report opens with typical full-service / casual-dining benchmark figures so it works before you've entered anything. Two ways to replace them with your own:
Enter the sales level you expect once the restaurant is established,
not necessarily month one. Most new restaurants open below their eventual run rate and build toward
it. Set a ramp-up period and the forecast opens low and climbs in equal monthly
steps, reaching your stabilized figure in the month after the ramp ends — e.g. a 6-month
ramp is at full stabilized sales in month 7. After that, the monthly sales growth
rate takes over. Leave the ramp at 0 for a forecast that starts at the stabilized
level from month one. Everything — the timeline, the break-even month, month-1 profit/loss
— recomputes as you change any of these.
Save scenario keeps your numbers in this browser's storage. It survives closing the tab, quitting the browser, even restarting your computer — but only on this device, in this browser, and only until you clear your browsing data; there's no cross-device sync and nothing is saved on the server. If you edit values and never click Save, closing the tab loses those edits — the note by the button tells you "Saved …" or "Not saved yet." For anything you want to keep safe, hand off, or use on another device or browser, Download CSV writes a portable backup file; Import brings one back in as a new scenario.
section,id,label,mode,value columns.
For a percent line, enter the percentage as a whole number (28 for
28%); for a dollar line, enter dollars.mode between dollar and
percent — just make its value match the new unit. The forecast rows'
units are fixed ($ / % / months /
days) — don't change that column. A percent cost value must be above 0%;
ramp-up months are rounded down to a whole number, minimum 0.scenario_name row; your other
scenarios are untouched. Any row that breaks the rules above is skipped (kept at its current
value) and listed in a note after loading — the rest of the file still loads.Download P&L writes a 36-month, month-by-month profit & loss statement for the active scenario, using the exact cost lines and ramp-up/growth assumptions above — Revenue, COGS and Gross Profit, Labor, Other Operating Expenses, EBITDA, then Depreciation and Interest broken out on their own lines down to a Net Operating Income (pre-tax) bottom line, plus Year 1/2/3 subtotal rows. It's pre-tax: this tool has no way to know your entity structure (sole prop / LLC / S-corp / C-corp) or the rest of your return, so it doesn't guess at a tax figure. It also excludes one-time startup costs (buildout, licenses, opening inventory) — those are capital items, not monthly operating expenses. If you're financing any of this, enter your monthly payment on the Interest / Loan Payments fixed-cost line above (default $0) — it's included in break-even the same way Depreciation already is, and broken back out on its own P&L line. This file is generated fresh each time, not saved anywhere — download it again after changing your assumptions.
stabilized ÷ (months + 1), reaching the full stabilized level
the month after the ramp ends. 0 means the forecast starts at stabilized sales.This is the one Restaurant Ops report that analyses nothing — it's a
forward planning calculator, so it needs no imported data. The math is ordinary cost-volume-profit
analysis (contribution margin → break-even sales); the wording and the tool here are my own.
The Python engine (app/restaurant/breakeven/engine.py) is the reference implementation and is
unit-tested; the browser re-implements the same formulas in static/js/breakeven/breakeven.js for
instant recompute, and the two are kept in sync deliberately.
Your working numbers and any named scenarios are stored in this browser
(localStorage). There is no server-side save, and nothing on this page ever writes to
the database the other three reports use. The optional Food and Hourly Labor pre-fill, when you
have sales data loaded, is read from the Labor Cost Report's own weighted calculations.
Python 3, Flask, SQLite, Jinja2, Chart.js + chartjs-plugin-datalabels (CDN), python-dotenv, gunicorn, pytest.