My RestaurantOffline / not set upPending: 0
DEMO MODE — sample data, fake in-memory sheet. Real sheet is NOT touched.

Best sellers

Recent

Current bill Takeaway

Customer (optional)

Optional — leave blank to bill without customer details. For delivery, the same name / phone / address are used.

Subtotal₹0.00
Discount
Cash tendered ₹
Change to return—
Payment
Total (incl. GST)₹0.00

0 items · ₹0.00

Tables

Open table orders stay on this phone only — they sync to the other phone only after you bill them. QR orders from customers are added on the phone set to print QR KOTs. Menu, billed bills (incl. voids) and restaurant profile sync between phones.

Bills

Customers

Reports

Day End

Menu

Categories

Choose Bar for liquor categories (Whisky, Rum, Vodka, Beer, Cocktails): they get a separate Bar tab on Billing, ml/bottle size presets, and are taxed with the Bar tax (VAT) instead of GST. Categories appear in this order on Billing. Use Up to move a category up. Renaming updates all its items. Deleting a category also deletes its items (same as V1).

Items

Import menu takes a .json menu file (or a backup .json) or a CSV, shows a preview, then you choose Merge or Replace. CSV format (header required): name,category,price,veg,available,code,section,variants — veg = veg/nonveg, available = yes/no, section = food/bar, variants = options with prices, e.g. Chicken:160|Buff:150|Pork:170 (optional code: Chicken:160:CGN-C). Old 6-column files still import. Existing items with the same name are updated; new categories are created automatically.

Bulk price edit

Select a category to preview.

Settings & Sync

Google Sheet sync

Not connected

Last sync: never · Pending: 0

Correct Web App URL looks like: https://script.google.com/macros/s/AKfyc…/exec — copy it from Apps Script: Deploy > Manage deployments > Web app URL. Not the Sheet link (docs.google.com/spreadsheets/…), not the editor link.

Reliable sync needs the proxy: open this app from your Vercel URL (https://…vercel.app), not the downloaded HTML file. On Vercel the app talks to our own /api/sync, which talks to Google server-to-server and can read Google's reply. Diagnostics below shows transport=proxy when this is working.

Sync Help / diagnostics

App rb-menu-v36 · App up to date

Last sync attempt: never
Last successful sync: never
Pending bills: 0
Menu sync: never
Last pull: never
Profile sync: never

What syncs between phones (rb-menu-v36): menu, billed bills + voids, and restaurant profile (name/address/phone/GSTIN/FSSAI/footer/paper/GST/service charge/bar tax/tables); menu options/sizes and Food/Bar sections sync with the menu (rb-menu-v36 needs the new Code.gs redeployed as a New version). What stays on this phone: sync URL/token, device name/code, and open (unbilled) table orders. Sync now pushes pending bills, then pulls menu + profile + last 90 days of bills. If Profile sync says the Sheet script needs an update, paste the new Code.gs and redeploy as a New version.

No sync error recorded.

Last 5 sync attempts

NEW in rb-menu-v36 — Vercel proxy sync: use the app from your Vercel URL every day. There, sync goes phone → Vercel /api/sync → Google (server-to-server), so Google's reply can be read and bills confirm as Synced with the Sheet bill number. Opening the downloaded HTML file directly has no proxy and will still hit Google's browser block (GET-direct / no-cors+verify fallbacks only). Diagnostics transport should read proxy.

If bills stay Waiting, check in this order:

  1. Web App URL ends with /exec (not /dev, not the Sheet link, not the Apps Script editor link).
  2. Apps Script deployment access is Anyone with the link (Execute as: Me). If access is "Only myself", Google returns a login page and sync fails.
  3. Token here matches Script Property TOKEN exactly (no spaces).
  4. In the Sheet's Apps Script project, run setup() once and allow permissions.
  5. After pasting a new Code.gs, redeploy as a NEW version (Deploy > Manage deployments > edit > New version) — editing code alone does not change what the /exec URL serves.
  6. Phone has internet, then tap Retry sync. Waiting bills are never deleted by a failed sync.

Restaurant & GST

Profile — edits in Settings sync to other phones

Bar tax (alcohol)

Alcohol is outside GST in India; bars charge state VAT instead. Applied to Bar menu items only — food keeps CGST + SGST. Set your state's rate (0 = no bar tax).

Bill header preview (prints exactly like this)

If this preview looks right, your printed bill / pre-bill will too.

QR table ordering

Off

Customers can order by scanning the table QR
This phone prints QR KOTs
Auto-accept and print KOT
Sound for new orders

Customers scan the code on their table, enter name and mobile, and order. Orders come to the phone set as printing phone (keep the app open on it), are added to that table and a KOT prints for the new items only. Customers never see your sync token.

Menu page (public)

Browse-only menu with live prices and availability.

—

Appearance & language (this device only)

Text size and language are per-device only and are NOT included in profile sync. Hindi covers main navigation and billing essentials only.

Not saved yet this session

Menu

Categories, items and short codes are managed on the Menu tab (bottom). Menu syncs to the Sheet Menu tab including the Code column.

Danger zone — Reset data

Your bills stay in the Sheet for life. They are deleted only if you use Reset bills here. Nothing else auto-deletes bills: no age or count pruning, void only marks a bill VOID, and menu / clear-sample resets never touch bills.




Reset bills asks you to download a backup first, tick the acknowledgement and type RESET BILLS. Unsynced (Pending) bills exist nowhere else — they are listed in the confirmation and need an extra tick. Bill numbers are never reused after a reset.

Multi-device rule: no phone is the master. Menu edits sync up, bills sync up, voids sync. Bill numbers are given by the Sheet (server), so two phones cannot clash. Open the Google Sheet itself any time to see DailySummary & ItemDaily.