Catalogue
Every module, every button, every number — in plain language.
How to read this
Each section names a screen or feature, describes exactly what you'll see there, what every button does, how the numbers are calculated, and a few tips. Use the table of contents on the left to jump around.
What this app is
A restaurant operations console for a local Russian restaurant serving the Arab community. It runs orders, kitchen, inventory, payroll, and a full double-entry accounting suite — all in Rubles (₽) and fully bilingual (English / Arabic, RTL-aware).
- ·Left sidebar (desktop) or bottom tab bar (mobile) with modules: Dashboard, Orders, Kitchen, Inventory, Staff, Finances, Catalogue, Settings.
- ·A globe button at the top of the sidebar toggles the whole UI between English and Arabic.
- ·A live clock and a green 'Service open' pill (turns grey when Settings → Service is off).
- ·Click the globe icon (AR/EN) to switch language. The layout mirrors right-to-left automatically in Arabic.
- ·Names you type (staff, menu, notes) are never translated. Only the app's built-in labels are.
- ·All prices, salaries and totals are in Rubles using the ₽ symbol.
- ·Data lives in your browser's local storage (demo mode). Use Settings → Reset demo data to start over.
- ·The app has no suppliers or A/P — you buy everything yourself via the Purchases page.
Dashboard
Tonight's pulse of the restaurant at a glance.
- ·Six stat tiles: Active orders (with in-kitchen count), Revenue today, Avg ticket time (kitchen → ready), Seats occupied vs total seats, On shift count, Low stock count.
- ·Live orders section: horizontal timeline for each active order showing progress through Sent → Kitchen → Ready → Served → Paid, plus elapsed time.
- ·Right column: Kitchen queue (in-kitchen tickets with elapsed time, red past 15 min), Low stock (items below reorder point), On shift now (staff currently clocked in).
- ·Click any live-order row to open the full order detail.
- ·Click 'Manage inventory →' to jump into stock management.
- ·Click 'View all →' to see every order (open + closed).
- ·Avg ticket = mean(readyAt − kitchenAt) across completed orders in the window.
- ·Seats occupied = sum of seats for tables with an open order.
- ·Watch the red timers in the kitchen queue — they mean the ticket is over target time.
- ·Low stock items automatically populate the Shopping List.
Orders
Every ticket from every channel: waiter tablets, front counter, and guest QR self-order.
- ·Grid of order cards showing #number, table, channel icon (tablet/store/QR), status pill, item count, elapsed time, and total.
- ·Three filter pills at the top: Active, Closed, All.
- ·Order detail page: two-column layout with Ticket on the left (all lines with qty and price) and Menu on the right for adding items.
- ·'New order' → pick channel (waiter/counter/QR) and table, then open the detail page and add dishes from the searchable menu.
- ·In the ticket, use the + / − buttons on menu items to change quantities. The trash icon removes a line.
- ·Advance status one step at a time with the primary button: Send to kitchen → Start cooking → Mark ready → Mark served → Mark paid.
- ·'Void' cancels a non-paid order without touching stock.
- ·When status becomes Paid, the recipe of each menu item automatically deducts its ingredients from stock (using the ingredient's costPerUnit for COGS).
- ·Revenue is recognised at Paid: debit Cash, credit Food Sales / Beverage Sales.
- ·Drinks (category c4) auto-post to Beverage Sales; everything else to Food Sales.
- ·Voiding a paid order is not supported — issue a manual journal entry to reverse.
Kitchen (KDS)
Single chronological ticket board for the line.
- ·Grid of active tickets (Sent / In-kitchen / Ready).
- ·Each ticket shows #number, table, channel, every line (qty × item + notes), and elapsed timer.
- ·Ring colour: warning after 10 min, destructive after 15 min. Ready tickets get a green ring.
- ·Tap the action button on each ticket to advance it: Fire → Bump ready → Served.
- ·Servers see 'Ready' tickets in the Orders module and mark them served / paid from there.
- ·The board auto-refreshes every 5 seconds — no need to reload.
Inventory
Ingredients, recipes, waste, and a live shopping list.
- ·Stock tab: every ingredient with on-hand quantity, par, cost/unit, and total value. A warning icon flags anything at or below its reorder point.
- ·Recipes tab: each menu item shows its ingredient breakdown and computed food-cost % (green < 28%, amber 28–35%, red > 35%).
- ·Waste log tab: history of every waste event with reason and cost.
- ·'Ingredient' button adds a new ingredient (name, unit, on-hand, par, reorder point, cost/unit).
- ·'Log waste' opens a small dialog to record spoilage — this decreases stock AND posts a Waste COGS entry to the ledger.
- ·Delete an ingredient with the trash icon.
- ·Food cost % = sum(ingredient.costPerUnit × qty) ÷ menu price.
- ·Inventory value = Σ (onHand × costPerUnit).
- ·Reorder point is the trigger; par is the target quantity to bring stock back to.
- ·Keep reorder point at ~30–40% of par so the shopping list has lead time.
Shopping list
One page to buy what the restaurant needs — automatic from low stock plus anything you add manually.
- ·Filter pills: All (open), Auto (low stock), Manual, Purchased.
- ·Each row shows item name, source badge (Auto / Manual), qty (auto: par − onHand), estimated cost, and status.
- ·Stat tiles: Open items count, Estimated total ₽, Auto count.
- ·'Add item' button lets you add a free-text item (name, qty, unit, estimated cost, note) — becomes a Manual row.
- ·'Mark purchased' on any row opens a small dialog with qty + cost/unit. Confirming: (a) increases the ingredient's on-hand stock, (b) posts a Purchase journal entry (Dr Inventory, Cr Cash), (c) marks the shopping row as Purchased.
- ·Trash icon removes a Manual row. Auto rows disappear on their own as soon as stock is above the reorder point.
- ·Marking purchased is the only way to get stock into the app (there are no supplier POs).
- ·You can also add a purchase directly from Finances → Purchases.
Staff
Roster and monthly payroll.
- ·Roster: card per person with name, role, PIN, and monthly salary in ₽.
- ·Payroll: total monthly payroll, list of active staff with their salary, and history of past runs.
- ·'Add staff' creates a new person (name, role, monthly salary, 4-digit PIN, optional email).
- ·In Payroll, press 'Run payroll' to post the current month. Runs are locked — the same month cannot be run twice.
- ·Salaries are fixed monthly (not hourly).
- ·Running payroll posts one entry: Dr Wages, Cr Cash, for the sum of all active salaries.
- ·Set salary to 0 to exclude a staff member from payroll (useful for owner).
- ·The daily labor number on the Live P&L = sum of monthly salaries ÷ days in the current month.
Finances → Live P&L
Real-time profit-and-loss powered by the auto-derived ledger.
- ·Four tiles: Revenue today, COGS today (with food-cost %), Labor today (with labor %), Profit today.
- ·14-day area chart of revenue vs profit.
- ·Cost structure bars (COGS / Labor / Contribution) and health-signal targets (food < 30%, labor < 30%, prime < 60%).
- ·Read-only overview — no actions here.
- ·Profit = Revenue − COGS − Labor. Prime cost % = (COGS + Labor) ÷ Revenue.
- ·Prime cost above 60% is the classic warning line for restaurants.
Finances → Purchases
Every cash purchase for stock and supplies. Same page as Shopping List's 'Mark purchased'.
- ·Table: date, item, qty, cost/unit, total, note.
- ·Stats: purchase count, total spent in ₽.
- ·'New purchase' → pick an ingredient (or 'free-text item'), enter qty and cost/unit.
- ·On save: (a) increments the ingredient's on-hand quantity, (b) posts Dr Inventory / Cr Cash to the ledger.
- ·Free-text purchases don't touch inventory — use them for supplies, packaging, one-offs.
Finances → Revenue
30-day revenue trend and top-selling menu items.
- ·Daily revenue bar chart (30 days).
- ·Top-items table with qty and revenue.
- ·Read-only.
- ·Cross-check top items against their food-cost % in Recipes to find your true margin winners.
Finances → Expenses
Log operating expenses (rent, utilities, marketing, supplies…).
- ·Category tiles for the top 4 categories.
- ·Table: date, category, note, amount.
- ·'Expense' button logs a new expense; posts Dr Expense-account, Cr Cash automatically.
- ·Category names map to specific expense accounts in the Chart of Accounts.
Finances → Chart of accounts
The restaurant preset COA. Add or rename accounts as needed.
- ·Accounts grouped by type: Asset, Liability, Equity, Revenue, COGS, Expense.
- ·Each row shows code and name.
- ·'New' adds an account. Trash icon deletes only accounts marked editable (system accounts are protected).
- ·Keep the 4-digit code convention (1xxx assets, 2xxx liabilities, etc.) for consistency.
Finances → Journal & GL
Every posting — automatic or manual.
- ·Stats: total entries, auto count, manual count, account count.
- ·Filter by account.
- ·Table with date, memo, account, debit, credit for every line.
- ·CSV button exports the filtered ledger.
- ·'New entry' opens a manual journal dialog — enter date, memo, and any number of debit/credit lines. Save only enables when balanced (Dr = Cr).
- ·Auto sources: order.paid (revenue), order.cogs (cost of goods), waste, purchase, payroll, expense.
- ·Manual entries live in state.journal; auto entries are derived on the fly.
- ·Use manual entries for opening balances, depreciation, and corrections.
Finances → Reconciliation
Match bank statement lines to ledger cash movements.
- ·Stats: Statement balance, Ledger balance, Variance, Matched N/Total.
- ·Table of statement lines with a suggested-match dropdown per row.
- ·'Upload CSV' parses a bank export (demo — not persisted).
- ·Pick a suggested ledger entry from the dropdown to match a statement line. Pick 'Unmatched' to clear it.
- ·A variance close to 0 means your books agree with the bank.
Finances → Budgets & forecasting
Monthly targets per account and a 90-day cash-flow forecast.
- ·Stats: Avg daily net sales (30d), Forecast cash 30/60/90 days out.
- ·Area chart of projected cash balance.
- ·Budget-vs-actual table for every revenue / COGS / expense account with a usage bar.
- ·Type into the Budget input on any row and click away — it saves.
- ·Variance goes red when actual exceeds budget for expenses (or falls short for revenue).
- ·Forecast starts from current bank balance; each day adds avgDailyRevenue − dailyOutflow.
- ·dailyOutflow = sum of monthly budgeted COGS + expense accounts ÷ 30.
- ·Update budgets monthly; the forecast follows immediately.
Finances → Reports
P&L, Balance Sheet, Cash Flow, Trial Balance — all derived from the ledger.
- ·P&L for Yesterday / 7d / 30d / MTD.
- ·Balance Sheet at today's date (Assets vs Liabilities + Equity, with retained earnings for the period).
- ·Simplified indirect Cash Flow: Net profit − change in inventory.
- ·Trial Balance across every account (debits should equal credits).
- ·'Export CSV' downloads the P&L table.
- ·If the Trial Balance is imbalanced, look for a bad manual journal entry.
Finances → Audit log
Immutable trail of every write in the app.
- ·Chronological table: when, actor, action code, detail.
- ·Read-only. The log auto-truncates to the last 500 events.
- ·Sensitive actions (payroll runs, resets) always appear here.
Catalogue
This page. A single document explaining every module.
- ·Table of contents on the left (desktop) that jumps to each section.
- ·Read top-to-bottom or use the TOC. Fully translated in EN/AR.
- ·Come back here whenever you're unsure what a button does.
Settings
Restaurant profile, language, service status, demo reset.
- ·Four cards: Language, Restaurant, Service, Demo data.
- ·Switch language (also available from the sidebar globe icon).
- ·Rename restaurant, change currency code, timezone.
- ·Toggle 'Open for service' — affects the header pill.
- ·'Reset demo data' wipes everything back to seed (with confirmation).
- ·Currency label is cosmetic — money is always formatted as ₽ (Rubles).