Help Center & System Setup Guide
Complete operational documentation for SaaSrest, module manual, and direct guide for acquiring and configuring external APIs.
🔑 External APIs Acquisition & Configuration (BYOK)
Click the official button for each platform to create your account, obtain secret keys, and link them to SaaSrest under Settings.
Meta Social Commerce (Instagram & Messenger)
Connects Instagram DMs and Facebook Messenger to the AI Waiter for customer service, menu browsing, and express checkout.
📍 Where to paste: Settings > Integrations > Instagram & Facebook
🔑 Key: App ID, App Secret, Verify Token and Page Access Token
Stripe
Processes credit/debit card transactions on the delivery site and table QR Code payments.
📍 Where to paste: Settings > Payment Methods > Stripe
🔑 Key: STRIPE_SECRET_KEY (sk_live_...) and STRIPE_WEBHOOK_SECRET (whsec_...)
Resend
Triggers automatic order confirmations, receipts, and staff notifications.
📍 Where to paste: Settings > Modules & Notifications
🔑 Key: RESEND_API_KEY (re_...) and EMAIL_FROM (sender email)
Twilio
Sends SMS text messages and status updates directly to the customer's mobile phone.
📍 Where to paste: Settings > Notifications (SMS)
🔑 Key: TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN and TWILIO_FROM_NUMBER
Uber Direct
Calculates exact delivery fees by geolocation and dispatches Uber drivers automatically upon order completion.
📍 Where to paste: Settings > Delivery Fee / Uber Direct
🔑 Key: UBER_DIRECT_CLIENT_ID, UBER_DIRECT_CLIENT_SECRET, UBER_DIRECT_CUSTOMER_ID
Focus NFe
Issues electronic tax receipts and invoices automatically for Brazil tax compliance.
📍 Where to paste: Settings > Fiscal (NFC-e Brazil)
🔑 Key: Production/Homologation Token, Company CNPJ, NCM and default CFOP
PrintNode
Cloud printing bridge for kitchen tickets (pizza / bar / expo), partial bills, and 80mm receipts. Requires thermalPrint module.
📍 Where to paste: Settings > Integrations > PrintNode (Thermal)
🔑 Key: PRINTNODE_API_KEY plus numeric Printer IDs per unit (pizza, bar, expo, receipt)
Google Gemini AI
AI engine for dish recommendations, beverage pairing, and virtual customer ordering.
📍 Where to paste: Settings > Virtual Assistant (AI)
🔑 Key: Google AI Studio API Key (AIzaSy...)
OpenAI (ChatGPT)
Alternative LLM engine for sales assistant, automated replies, and inventory forecasting.
📍 Where to paste: Settings > Virtual Assistant (AI)
🔑 Key: OpenAI Secret Key (sk-proj-... or sk-...)
Anthropic Claude
High-precision language model for consultative service and pairing recommendations.
📍 Where to paste: Settings > Virtual Assistant (AI)
🔑 Key: Anthropic API Key (sk-ant-api...)
iFood Delivery
Imports orders from iFood automatically to kitchen KDS screen with audio alerts.
📍 Where to paste: Settings > Marketplaces > iFood
🔑 Key: Merchant ID, Client ID and Client Secret
99Food Delivery
Integration of 99Food orders for direct kitchen dispatch and unified daily register closing.
📍 Where to paste: Settings > Marketplaces > 99Food
🔑 Key: Store ID, App ID and App Secret
DoorDash Drive / Merchant
Receives and accepts DoorDash orders directly in the restaurant admin dashboard.
📍 Where to paste: Settings > Marketplaces > DoorDash
🔑 Key: Developer ID, Key ID and Signing Secret
Uber Eats Marketplace
Synchronizes received Uber Eats orders with kitchen display and channel reports.
📍 Where to paste: Settings > Marketplaces > Uber Eats
🔑 Key: Store ID, Client ID and Client Secret
Google Business Profile (Maps)
Official profile on Google Maps to attract local customers and generate post-delivery 5-star reviews.
📍 Where to paste: Settings > Review Booster
🔑 Key: Direct review link generated in Google Business Profile
Supabase Postgres
High-speed official relational database for secure cloud storage.
📍 Where to paste: Server Environment Variables (.env / Vercel)
🔑 Key: DATABASE_URL / POSTGRES_URL (Postgres Connection String)
📢 Marketing Automations, Cashback & Wildcards Guide
Parameter instructions, accumulation rules, and valid wildcard variables for automated messaging.
💎 Loyalty Club & Cashback
Rewards customers with store credit on every completed order. Credit accumulates under the customer's phone number to redeem on future orders.
⚙️ Configuration Parameters:- Percentage (%): % of purchase value returned as cashback balance.
- Min Order ($): Minimum order subtotal required to earn cashback.
- Redemption Limit (%): Maximum % of a new order payable with cashback.
- Expiration (Days): Expiration period for customer cashback balance.
- {name} → Customer name (e.g. Alex)
- {cashback} → Cashback earned on order (e.g. $5.00)
- {totalBalance} → Updated total balance (e.g. $15.00)
🔄 Customer Win-Back
Automatically invites customers who haven't ordered in N days (e.g. 30 days) by sending an incentive coupon.
💬 Message Wildcards:- {name} → Customer name
- {coupon} → Coupon code (e.g. COMEBACK10)
- {discount} → Discount value (e.g. $10.00)
🎁 Birthday Month Coupons
Checks birth date captured at checkout and generates gift coupons during the customer's birthday month.
💬 Message Wildcards:- {name} → Customer name
- {coupon} → Birthday coupon code (e.g. BDAY15)
- {discount} → Discount value (e.g. $15.00)
🎯 Abandoned Cart Recovery
Monitors uncompleted carts after N minutes of inactivity (e.g. 20 min) to send a reminder with an offer.
💬 Message Wildcards:- {name} → Customer name
- {coupon} → Recovery coupon code (e.g. RETURN10)
- {discount} → Discount value (e.g. $10.00)
⭐ Review Booster
4 and 5-star reviews are directed to your public Google Maps profile. 1 to 3-star reviews open a private feedback form sent directly to management.
🤝 Refer & Earn Program
Generates a unique referral code for each registered customer. When a friend uses the code at checkout, the friend gets a discount and the referrer earns automatic cashback upon order completion!
⚙️ Configuration Parameters:- Friend Discount ($): Discount applied on friend's 1st order.
- Referrer Bonus ($): Cashback reward credited to referrer's wallet.
- Min Order ($): Minimum subtotal needed to apply referral code.
- {name} → Referrer customer name (e.g. Alex)
- {code} → Unique referral code (e.g. CLI-A7B2X)
- {friendDiscount} → Friend discount value (e.g. $15.00)
- {reward} → Referrer cashback bonus (e.g. $10.00)
📈 Tracking Pixels (Meta Ads, Google & TikTok)
Connects your store to ad managers for paid campaign attribution. Tracks PageView, AddToCart, InitiateCheckout, and Purchase events.
⚙️ Supported Platforms:- Meta Pixel / Facebook Ads: Tracks PageView, AddToCart, InitiateCheckout and Purchase with Conversions API (CAPI) support.
- Google Tag Manager (GTM): Injects GTM-XXXXXXX container script on all pages.
- Google Analytics 4 (GA4): Sends e-commerce events with measurement ID G-XXXXXXXXXX.
- TikTok Ads: Tracks AddToCart, InitiateCheckout and CompletePayment.
📦 Inventory, CSV Import & Sold-Out Dishes (86'd)
How multi-unit stock works, the CSV import order, and what to do when a pizza disappears from the menu after sales.
CSV Import Order (Settings → Import)
- Menu (CSV) — brand-wide dishes and prices.
- Inventory (CSV) — once per store: select store in Active Store, upload and confirm. Map current_qty so stock lands in that store.
- Recipes / BOM (CSV) — brand-wide recipes (grams/oz per pizza). Store selector is ignored.
Full GloriaFood path: Import hub ↗ · docs/MIGRATION_GLORIAFOOD.md
Brand-level vs Per-store
- Shared everywhere: menu items, ingredient names, SKU, unit cost, recipes.
- Per-store only: stock quantity (Inventory ↗), movements, sales deductions, sold-out dishes.
- Consolidated (all): stock CSV lands in Main HQ only — select a specific store before importing stock.
When a pizza shows as 'sold-out' after sales
When an order is completed, the system deducts recipe ingredients from that store's inventory. If an ingredient hits zero, only the sold dish becomes hidden on that store's menu (Toast 86 style). You get an alert in Operational Alerts ↗.
Clearing the alert only dismisses the notification — it does not put the pizza back on the menu. Restock first, then re-enable below.
✅ Re-enabling a pizza on the menu
- Restock ingredient(s) — Restock ↗ or import/purchase with qty > 0.
- In sidebar, set Active Store to the location where the dish ran out (not Consolidated all).
- Open Menu Management ↗.
- Find the item with the gray disabled tag.
- Click Enable (or Edit → check Available → Save).
Tip: In Consolidated (all), sold-out pizzas may still appear 'available' because locks are per-store. Always select the target store first.
📡 Offline Resilience & Floor Sync
What happens when Wi‑Fi drops or the server is unreachable on waiter tablets and kitchen screens.
Red Banner & canMutate Lock
When the device is offline or heartbeat cannot reach the server, a fixed red banner appears on floor screens (table tabs, KDS, register, delivery). Most mutations are blocked until connection returns — preventing silent failures and desync.
Waiter dispatch keeps working (offline queue)
In Waiter POS ↗, tapping Send to kitchen while offline saves the order locally (IndexedDB). An indicator shows how many dispatches are pending. When connection returns, queue flushes automatically.
KDS, register, and delivery dashboard remain locked offline — only waiter send is queued.
After reconnecting — what staff should expect
- The red banner disappears; pending queue count drops to zero.
- Queued orders appear on Kitchen KDS ↗ without needing a manual page refresh.
- If a ticket doesn't show up, wait a few seconds or switch tabs — do not duplicate send unless cart still shows unsent items.
Full local LAN server sync is not included — this is browser-side resilience. See docs/ROADMAP.md §7.8.
🖨 Thermal Printing (PrintNode)
Kitchen tickets, waiter partial bills, and payment receipts on 80mm thermal printers — US/Eagle One first. Not a fiscal invoice (use Focus NFe or Stripe Tax separately).
Activation Checklist
- Run migration 0044_thermal_print.sql (npm run db:migrate).
- Settings → Modules → enable Thermal Printing (PrintNode).
- Settings → Integrations ↗ → PrintNode API Key + enable.
- Settings → Units ↗ → per unit: Printer IDs for pizza, bar, expo, and receipt.
- Menu Management → per item → Printing station (default: pizza).
Three Print Jobs
| Use case | Trigger | Printer |
|---|---|---|
| Kitchen ticket | Auto when order → sent_to_kitchen | Pizza / bar / expo per item |
| Partial bill | Waiter clicks Print partial bill on ticket | Receipt printer |
| Payment receipt | Auto when order → closed at cash | Receipt printer |
Kitchen tickets are idempotent per order + station (no double printing). Partial bills can be reprinted on demand.
Multi-unit Stations
Each location has its own PrintNode printer IDs. A pizzeria with pizza, bar, and expo lines routes items according to the Printing station set on the menu item. Drinks → bar; appetizers/desserts → expo; pizzas → pizza.
Print Failed? Check Operational Alerts
Print failures do not block kitchen or checkout. They appear in Operational Alerts ↗ as print_failed. Common causes: incorrect Printer ID, PrintNode Client offline on kitchen PC, module disabled, or missing migration 0044.
Payment receipt ≠ fiscal invoice. US tax receipts use Stripe Tax + email; NFC-e in Brazil uses Focus NFe when enabled.
📖 Operational Module Manual
Learn how each tab of SaaSrest functions and how to use it in daily restaurant operations.
1. Operations & Floor
- Main Dashboard (/admin)Daily executive view: revenue, channel sales, P&L chart, COGS %, and ingredient alerts.
- POS & Table Tabs (/admin/comanda)Fast POS for waiters and cashier. Offline: Send queues locally; Print partial bill active when thermal printing configured.
- Register & Daily Closing (/admin/caixa)Shift opening, cash drop/payouts, and daily financial closing. Payment receipt prints upon closing when PrintNode configured.
- Kitchen KDS (/admin/cozinha)Kitchen Display System (KDS) with instant sound chime and prep timer. Auto-prints tickets per station when sent to kitchen.
- Delivery Dispatch (/admin/delivery)Delivery queue management, manual or automated dispatch via Uber Direct drivers.
2. Menu & Table Setup
- Menu Management (/admin/cardapio)Edit dishes, prices, photos, add-ons, print station, and per-store availability (Enable/Disable). See Help → Inventory for 86'd dishes.
- Table Management (/admin/mesas)Visual floor layout grid with automatic QR Code generation and printing.
3. Finance & Inventory
- Inventory Control (/admin/estoque)Per-store ingredient balances, purchases, and low-stock alerts. Catalog names and costs are brand-wide.
- Bulk CSV Import (/admin/configuracoes/importacao)Menu, per-store stock, recipes/BOM, customers, and GloriaFood migration.
- Restock Calculator (/admin/estoque/reposicao)Smart purchase calculator based on average consumption rate.
- Recipes / BOM (/admin/fichas)Ingredient composition for real-time Cost of Goods Sold (COGS) calculations.
- Expenses & Operating Costs (/admin/despesas)Fixed and variable expense tracking for real-time restaurant P&L.
❓ Frequently Asked Questions & Troubleshooting (FAQ)
Common setup questions and fast resolution of operational issues.
1. How do I change the platform name and my restaurant branding?
Go to Settings & BYOK in the sidebar. At the top, enter your Restaurant Name (e.g. your restaurant's name). The platform header updates automatically across all tabs.
2. What happens if an API key (e.g. Uber Direct or Stripe) expires?
The system continues running local modules (POS, register, KDS). Simply open the Help tab, click the direct API link, generate a new key, and update it in Settings.
3. Where are order and inventory data stored?
All data is securely stored in the Supabase Postgres cloud database or local encrypted storage during development.
4. How do I get the direct Google Maps review link for the Review Booster?
Go to Google Business Profile (business.google.com). On the main dashboard, click 'Ask for reviews'. Copy the generated short link and paste into Settings > Review Booster.
5. How does the Review Booster protect the restaurant against bad public reviews?
Customers rating 4 or 5 stars are directed to post publicly on Google Maps. Customers rating 1 to 3 stars open a private feedback form sent directly to management under Reviews & NPS.
6. I cleared an operational alert, but the pizza is still missing from the menu. What now?
Clearing Operational Alerts only removes the notification. Re-enable the dish under Menu Management after restocking — see Inventory & Sold-out Dishes above.
7. Why don't I see a disabled pizza when Active Store is on Consolidated (all)?
Stock-out (86) status is stored per store location. Consolidated view shows the brand catalog, which may still look available. Select the specific store in the sidebar to re-enable it.
8. The waiter tablet shows a red offline banner — can I still dispatch orders?
Yes — Send to kitchen queues the order locally and syncs automatically when connection returns. Other actions remain locked until the banner disappears.
9. Kitchen tickets aren't printing — what should I check?
Confirm Thermal Printing module is enabled, PrintNode API key is saved, each station has a Printer ID in Units, PrintNode app is running on the kitchen PC, and migration 0044 was applied.