Create a project at console.cloud.google.com,
enable the Gmail API, create an OAuth 2.0 Client ID (Web application type),
and add https://your-domain/api/public/gmail/callback
as an Authorized Redirect URI. Then save your credentials below and click Connect.
Email Configuration - Legacy SMTP
(fallback if Gmail OAuth not connected; requires 2FA + App Password)
smtp-relay.gmail.com (recommended) authenticates by your server's IP address - no password needed. Authorize your server IP in Google Workspace Admin Apps Google Workspace Gmail SMTP relay service. Port 587. smtp.gmail.com requires a 2-Step Verification App Password. Leave host blank to use the relay default.
SMS Configuration (Twilio - scaffolded, not yet active)
Push Notifications (Firebase Cloud Messaging)
Required for the "On My Way" button to send push notifications to the customer app.
Get your server key from the Firebase Console
Project Settings Cloud Messaging Server key.
Email Templates
Customize the subject line and body for each automated email. Use {{variable}} placeholders - they are replaced with live data at send time.
Available variables:{{first_name}}{{service_type}}{{date}}{{time}}{{technician}}{{address}}{{company_name}}{{company_phone}}
Available variables:{{first_name}}{{service_type}}{{date}}{{time}}{{technician}}{{address}}{{company_name}}{{company_phone}}
Available variables:{{first_name}}{{equipment_type}}{{due_date}}{{company_name}}{{company_phone}}
Available variables:{{first_name}}{{invoice_number}}{{total}}{{line_table}}{{custom_message}}{{company_name}}{{company_phone}}
{{line_table}} inserts the full itemised table with subtotal, tax, fees and total. The PDF is always attached automatically.
Available variables:{{first_name}}{{invoice_number}}{{total}}{{line_table}}{{payment_table}}{{custom_message}}{{company_name}}{{company_phone}}
{{line_table}} = itemised charges. {{payment_table}} = payments received + balance. The PDF is always attached automatically.
Available variables:{{first_name}}{{company_name}}{{company_phone}}{{company_web}}{{google_link}}
Available variables:{{first_name}}{{service_type}}{{date}}{{time}}{{technician}}{{address}}{{when}}{{days_out}}{{company_name}}{{company_phone}}
Available variables:{{first_name}}{{service_type}}{{date}}{{time}}{{technician}}{{address}}{{when}}{{days_out}}{{company_name}}{{company_phone}}
Available variables:{{first_name}}{{service_type}}{{date}}{{time}}{{technician}}{{address}}{{when}}{{days_out}}{{company_name}}{{company_phone}}
Available variables:{{first_name}}{{impact}}{{action_required}}{{company_name}}{{company_phone}}{{company_web}}
Send One-Time Email
Compose and send a single email to any address. The branded header/footer are added automatically.
Email Automation
Automated emails are sent when: an appointment is confirmed (confirmation email),
a job is marked complete (invoice email), and 24 hours before an appointment (reminder email via daily cron).
QR Code Links
Review QR codes appear on every invoice PDF. App download QR codes are shown in the customer and technician apps wherever the "coming soon" placeholder appears.
This URL appears as a QR code and readable link on every invoice PDF. Point it to your PWA or any future app store listing.
QuickBooks Online (Invoice & Payment Sync)
Checking QBO connection…
Card-in-Field payments are synced to QBO as payments deposited to Undeposited Funds.
Process them through your card terminal in QBO and move them to your bank account when ready.
Mapping Health
Audit invoice and customer links against QuickBooks. Stale mappings (deleted or merged in QBO) cause sync errors like “Invalid Reference Id”.
Stale invoice links
Invoice #
Customer
Status
Total
Stale QBO ID
Stale customer links
Customer
QBO Display Name (cached)
Stale QBO ID
All checked mappings are valid - nothing to fix.
Administration
Manage staff accounts, equipment types, and local tax rates.
Bulk Delete Open Invoices
Permanently deletes multiple open (draft/sent) invoices at once. This cannot be undone. Use only to clean up test data or erroneous invoices.
Import Customers from QuickBooks
Loading customers from QuickBooks…
Name
Email
Phone
City
Status
Send Invoice
Request Google Review
The Google review link is always included. Editing the body above replaces the default text.
Add Line Item
Type to search the price book…
Loading equipment…
Record Payment
Checking accounts pulled from QuickBooks. Leave blank to use QBO default (Undeposited Funds).
New Invoice
Edit Tax Rate
Add Part
Add Category
Add Service Call Type
Add Staff Member
Shows this person in the Technicians section and marks them as dual-role
Add Customer
Leave blank for automatic name matching. Find the ID in QBO under the customer's URL.
Invoice & Receipt Preferences
Customer uses this to log into the mobile app. Leave blank to use default.
Add Equipment
Log Service Visit
Equipment
Add Equipment Type
Service History -
Date
Type
Next Due
Technician
Notes
New Appointment
Loading…
Select a customer first
Confirm Appointment
Add Note
Upload Water Test
The new test will become the current test for this customer. The previous test will be archived and still viewable in history.
Uploading…
Add Photo
Uploading…
Override Settings
Override mode lets the customer log their own service visits from the app using a PIN you give them verbally. Records logged this way are flagged as Customer Self-Service in the history.
Reset Customer Password
Set a new password for . They will use this to log into the customer app.
Send Test Notification
This will send a notification to . It will appear as a pending notification in their app and attempt a live web push if they have subscriptions.
Add Time Entry
Leave blank to save as an open (still clocked-in) entry.
Edit Equipment
Confirm Remove
Bulk Delete Open Invoices
All Draft and Sent invoices are listed below. Check the ones you want to remove.
Invoices with recorded payments will be voided instead of deleted.
No invoices match this filter.
New Estimate
Add Line Item
New Service Contract
Provision IoT Device
Add Alert Rule
Device API Key
Copy this key to your ESP32 firmware. It cannot be retrieved again after closing this dialog.
ESP32 Usage: Send POST to /api/iot/telemetry with header X-Device-Key: YOUR_KEY
Welcome to MVP Backoffice
Choose how you'd like the interface to look. You can always change this later using the SNEP / METRO and / ️ buttons in the top bar.