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.
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
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:
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:
- Web App URL ends with /exec (not /dev, not the Sheet link, not the Apps Script editor link).
- 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.
- Token here matches Script Property TOKEN exactly (no spaces).
- In the Sheet's Apps Script project, run setup() once and allow permissions.
- 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.
- 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 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.
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.
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.