Interactive Demo Mode (Sandbox)
Back to Sales Site

Hello, Administrador!

Owner

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.

Social Media & Support

Meta Social Commerce (Instagram & Messenger)

Instagram DM Sales

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

1. Go to developers.facebook.com/apps/ and create a Business App.2. Add the 'Instagram Graph API' and 'Messenger' products.3. Under Webhooks, point the URL to: https://your-domain.com/api/webhooks/meta with your Verify Token.4. Click 'Go to Settings' to paste your keys and enable support.
Open Meta for Developers (App Dashboard) ↗
Online Payments

Stripe

Card / Delivery

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_...)

1. Create an account on the Stripe portal.2. Go to Developers > API keys.3. Copy the Secret Key and paste it into Settings.4. Configure Webhook pointing to https://your-domain.com/api/webhooks/stripe
Open Stripe Dashboard (API Keys) ↗
Email Notifications

Resend

Automated Emails

Triggers automatic order confirmations, receipts, and staff notifications.

📍 Where to paste: Settings > Modules & Notifications

🔑 Key: RESEND_API_KEY (re_...) and EMAIL_FROM (sender email)

1. Log in or create a free account at resend.com.2. Go to API Keys > Create API Key.3. Copy the key (re_...) and define your sender email (e.g. orders@yourdomain.com).
Open Resend Dashboard (API Keys) ↗
SMS & Messaging

Twilio

Customer Notifications

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

1. Go to Twilio console at twilio.com/console.2. Copy your Account SID and Auth Token under Account Info.3. Get an SMS/WhatsApp-enabled phone number.
Open Twilio Console ↗
Deliveries & Drivers

Uber Direct

Driver Dispatch

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

1. Create an account at direct.uber.com.2. Go to developer.uber.com and create your application.3. Fill in Client ID, Client Secret, Customer ID, and store address.
Open Uber Direct Portal ↗
Fiscal Issuance (Brazil)

Focus NFe

NFC-e / NF-e

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

1. Log in at app-v2.focusnfe.com.br.2. Go to Companies > API Tokens and copy your Production Token.3. Enter issuer CNPJ, food NCMs, and CFOP (e.g. 5102).
Open Focus NFe Dashboard ↗
Hardware & Kitchen Printing

PrintNode

Thermal Printers

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)

1. Create a PrintNode account and install PrintNode Client on each kitchen/cashier PC.2. Register thermal printers in PrintNode; note down each numeric Printer ID.3. Settings > Modules → enable Thermal Printing (PrintNode).4. Settings > Integrations → enable PrintNode and paste API key.5. Settings > Units → per unit: paste printer IDs for pizza, bar, expo, and receipt.6. Menu Management → per item → Printing station (pizza / bar / expo).7. Run npm run db:migrate to ensure migration 0044 (print_jobs) exists in Postgres.
Open PrintNode Dashboard ↗
Artificial Intelligence

Google Gemini AI

Digital Waiter & Assistant

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...)

1. Go to Google AI Studio at aistudio.google.com.2. Click 'Get API key' in the sidebar.3. Generate the key and paste into BYOK Artificial Intelligence settings.
Open Google AI Studio (API Key) ↗
Artificial Intelligence

OpenAI (ChatGPT)

Predictive Analytics

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-...)

1. Go to platform.openai.com/api-keys.2. Click '+ Create new secret key'.3. Copy the generated key and save in SaaSrest Settings.
Open OpenAI Platform (API Keys) ↗
Artificial Intelligence

Anthropic Claude

Service & Menu AI

High-precision language model for consultative service and pairing recommendations.

📍 Where to paste: Settings > Virtual Assistant (AI)

🔑 Key: Anthropic API Key (sk-ant-api...)

1. Go to console.anthropic.com.2. Go to Settings > API Keys and create a new key.3. Paste secret key in SaaSrest AI panel.
Open Anthropic Claude Console ↗
Brazil Marketplace

iFood Delivery

iFood Sales

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

1. Register app at developer.ifood.com.br.2. Copy Merchant ID (Store ID), Client ID and Secret.3. Set Webhook URL: https://your-domain.com/api/webhooks/ifood
Open iFood Developer Portal ↗
Brazil Marketplace

99Food Delivery

99Food Sales

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

1. Access 99Food partner portal.2. Request API integration credentials.3. Configure Webhook URL: https://your-domain.com/api/webhooks/99food
Open 99Food Partner Portal ↗
US Marketplace

DoorDash Drive / Merchant

DoorDash Sales

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

1. Go to developer.doordash.com and create developer account.2. Generate Key ID and Signing Secret.3. Point Webhook URL to: https://your-domain.com/api/webhooks/doordash
Open DoorDash Developer Portal ↗
US / Global Marketplace

Uber Eats Marketplace

Uber Eats Sales

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

1. Go to developer.uber.com with Uber Eats partner account.2. Enable Eats Order Management permissions.3. Webhook URL: https://your-domain.com/api/webhooks/ubereats
Open Uber Developer Console ↗
Reviews & Marketing

Google Business Profile (Maps)

Review Booster

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

1. Go to business.google.com and claim/create your business.2. Fill category (e.g. Pizzeria), address, and business hours.3. Complete ownership verification (video, call/SMS, or mail).4. On Google dashboard, click 'Ask for reviews' and copy generated short link.5. Paste link into 'Direct Google Maps Review Link' in Settings > Review Booster.
Open Google Business Profile ↗
Relational Database

Supabase Postgres

Cloud Persistence

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)

1. Open project at supabase.com/dashboard.2. Go to Project Settings > Database.3. Copy connection URI (postgresql://...) and insert into DATABASE_URL.
Open Supabase Dashboard ↗

📢 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.
💬 Message Wildcards:
  • {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.
💬 Message Wildcards:
  • {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)

  1. Menu (CSV) — brand-wide dishes and prices.
  2. Inventory (CSV) — once per store: select store in Active Store, upload and confirm. Map current_qty so stock lands in that store.
  3. 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

  1. Restock ingredient(s) — Restock ↗ or import/purchase with qty > 0.
  2. In sidebar, set Active Store to the location where the dish ran out (not Consolidated all).
  3. Open Menu Management ↗.
  4. Find the item with the gray disabled tag.
  5. 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

  1. The red banner disappears; pending queue count drops to zero.
  2. Queued orders appear on Kitchen KDS ↗ without needing a manual page refresh.
  3. 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

  1. Run migration 0044_thermal_print.sql (npm run db:migrate).
  2. Settings → Modules → enable Thermal Printing (PrintNode).
  3. Settings → Integrations ↗ → PrintNode API Key + enable.
  4. Settings → Units ↗ → per unit: Printer IDs for pizza, bar, expo, and receipt.
  5. Menu Management → per item → Printing station (default: pizza).

Three Print Jobs

Use caseTriggerPrinter
Kitchen ticketAuto when order → sent_to_kitchenPizza / bar / expo per item
Partial billWaiter clicks Print partial bill on ticketReceipt printer
Payment receiptAuto when order → closed at cashReceipt 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.

SaaSrest Admin v2.6 · Support & Technical Documentation