Metaviz AI
Service Provider MarketplaceCase study

AI Field-Service SaaS Trades CRM, Quotes, Invoices, Dispatch & AI Butler

Leads, quotes, jobs, invoicing, payments, dispatch, and an AI Butler, one platform for trade businesses.

A Swiss contractor management platform that streamlines leads, quotes, jobs, billing, payments, and employee dispatching with AI-powered quotation creation from text or images.

Project Overview

Leads, quotes, jobs, invoicing, payments, dispatch, and an AI Butler, one platform for trade businesses.

This is a tool for Swiss workers who perform manual labor, such as plumbers and electricians. It improves in what they do. Spreadsheets and paper notes are not necessary for them. Among the many capabilities of the program are the ability to create quotations, invoices, and payments. These features are all located in one location and it's simple to use. Electricians and plumbers may use an app on their phones, while office workers can utilize a portion on their PCs. The tool can even understand what people are saying and make quotes for them. People in Switzerland are already using it and it accepts a wide range of payment options, including Stripe and Swiss QR-Rechnung. English, German, French, and Italian are among the languages in which the tool is accessible and for Swiss professionals like carpenters, painters, and contractors, it is particularly beneficial. Those who schedule jobs and send staff might also benefit from this technology. For professionals like plumbers and electricians, it makes things simpler.

Businesses in Switzerland can use this software solution to manage their workload. The system combines every step a company has to take, from acquiring a client to receiving payment and a review. It accomplishes this in three ways: a clever computer software that can assist in creating quotations for clients, a customized website that office workers can access, and a mobile app that employees can use on their phones.

Considering the system was created with Swiss businesses in mind, it has certain features that they require, such as the ability to create invoices using a QR code, verify the validity of a customer's ID, and manage the various tax rates in Switzerland. It is available in four languages: English, German, French, and Italian. It also integrates with payment methods such as Stripe and TWINT. Both Android and Apple phones may download the mobile app which can be utilized even in the absence of an internet connection. The office website is quick and simple to use and the intelligent computer program may assist with writing quotations simply by listening to a voice message or viewing a picture.

AI Field-Service SaaS Trades CRM, Quotes, Invoices, Dispatch & AI Butler
— Relevant keywords —
AI Field Service AppTrades CRMFlutter Offline-FirstSwiss QR-RechnungStripe Terminal Tap-to-PayVoice-to-Quote AI Butler
FastAPI BackendMulti-Tenant SaaSServiceTitan AlternativeJobber AlternativePasskeys FIDO2 AuthDispatch Board
Challenge & Solution

Solving real problems with smart engineering

Every challenge on the left became a shipped capability on the right.

Problem 01
One System for the Whole Workflow

Trades juggled disconnected tools - accounting software for invoices, spreadsheets for estimates, paper for jobs, WhatsApp for clients - losing hours every day to admin.

Solution

A single Flutter app runs the full six-stage flow - lead, quote, job, payment, review - all connected through one FastAPI backend.

Problem 02
Butler AI - Voice-to-Quote

Producing an accurate estimate at the customer's table was impossible. Quotes were rebuilt in spreadsheets the next day, and jobs were lost to faster rivals.

Solution

Tradespeople describe a job by voice, text, or photo and Butler AI generates an instant quote. On-device Sherpa-ONNX keeps audio private, while image analysis spots broken tiles, leaks, and faulty appliances.

Problem 03
Offline-First That Actually Works

Field workers had no signal in basements, on roofs, or in rural areas - making cloud-only apps useless on real job sites.

Solution

The app keeps running with zero signal, storing jobs, quotes, photos, signatures, and notes in a local SQLite database, then syncs in the background - most important data first - once signal returns.

Problem 04
Swiss QR-Rechnung Invoicing

QR-Rechnung invoices were built by hand - manually adding VAT rates (8.1%, 2.6%, 0%) and verifying CHE-UID numbers - causing errors and delayed payments.

Solution

Fully automated QR-Bill invoices work with every Swiss banking app (PostFinance, UBS, Raiffeisen, ZKB), with branded PDFs, CHE-UID validation, and per-line VAT applied automatically.

Problem 05
Stripe Terminal Tap-to-Pay

Trades had to carry bulky card machines or chase bank transfers for days. Taking payment with just a phone simply wasn't possible.

Solution

Tap-to-Pay accepts chip, contactless card, and mobile wallet payments straight from the phone - no extra hardware. The customer signs on-device and funds settle automatically.

Problem 06
Real-Time Drag-and-Drop Dispatch

Scheduling meant whiteboards or shared calendars that never showed who was actually free - causing double-bookings and missed appointments.

Solution

Office staff drag job cards across team members on a board that shows live availability - no whiteboards, no clashes, just a clear schedule.

Problem 07
Built for Four Languages

Swiss tradespeople work across German, French, Italian, and English-speaking regions, but no single tool supported all four.

Solution

The platform is fully multilingual across all four Swiss market languages, so every team works in its own language inside one app.

Ecosystem

The Platform Modules - Six Stages, Three Surfaces, One Backend

01
Butler AI

AI quoting assistant powered by GPT-4o, Claude and Groq - create quotes from voice, text or a photo. Speech is transcribed on-device with Sherpa-ONNX, so nothing leaves the phone, and pgvector semantic search surfaces relevant past quotes and jobs.

02
Leads & CRM

Full lead pipeline with source tracking, status management and one-tap conversion to a quote - replacing the old WhatsApp contact flow.

03
Quotes Module

Create quotes on-site with Butler AI, with built-in Swiss VAT (8.1%, 2.6%, 0%), deposit % and validity period. Brandable PDF output carries your own logo.

04
Jobs & Field Work

End-to-end job management - in-progress and after photos, on-device signatures, recurring jobs and templates. Works fully offline, storing everything in SQLite.

05
Swiss QR-Rechnung

Automated, compliant QR-Bill invoice PDFs with postal-code validation, cantonal address fields, CHE-UID validation and per-line VAT.

06
Payments

TWINT, Stripe Checkout subscriptions, manual bank transfers with automatic reconciliation, Stripe Terminal Tap-to-Pay and Stripe Connect payments.

07
Dispatch Board

Real-time drag-and-drop scheduling with a live availability matrix (Available, Booked, Unavailable, On leave), synced across all users over WebSocket.

08
Schedule & Maps

Weekly calendar with an OpenStreetMap view showing job pins, plus address autocomplete.

09
Auth & Security

Face ID / Touch ID, magic link, Google/Apple sign-in, 2FA and passkeys (FIDO2/WebAuthn), with full audit logging and GDPR export.

10
Multi-Tenant RBAC

Four roles - Field Worker, Dispatcher, Manager and Admin - each with scoped access to quoting, billing, dispatch and analytics.

11
Multi-Language

Switch between English, German, French and Italian in one tap, with region-aware formatting and per-region legal pages (Impressum, Datenschutz, AGB).

12
Subscription Billing

Pro, Business and Enterprise tiers via Stripe Subscriptions, with trial-to-paid conversion, seat-based pricing, Stripe Connect onboarding and usage tracking.

User Experience

Two surfaces, one rhythm

Web dashboard screenshot
Web screenshot 2
Web screenshot 3
Web screenshot 4
Console features
Unified desktop console - Leads, quotes, jobs, invoices & orders in one place
Drag-and-drop dispatch - See team availability and assign in real time
Tap-to-Pay at the desk - Take card payments with Stripe Terminal
Live job map - Clustered map of every job location
Billing dashboard - Manage subscriptions and billing in one view
Export-ready analytics - Reports straight to PDF or Excel
Role-based access - Admin, Manager, Dispatcher & Field Worker views
4 languages - English · German · French · Italian
Key flows

Voice-to-Quote

  • Open Butler AI
  • Describe job by voice
  • Sherpa-ONNX transcribes on-device
  • GPT-4o drafts quote
  • Review and send to customer

Job Completion

  • Open job
  • Before photos (offline)
  • Complete work
  • After photos + signature (offline)
  • Sync on reconnect
  • QR-Rechnung invoice
  • Tap-to-Pay
  • Request review

Offline Flow

  • Enter no-signal area
  • App works fully via SQLite
  • Cache-age indicator shown
  • Reconnect
  • Prioritised background sync runs automatically
Admin Dashboard

The office's command center

Everything back-office in one console — with role-based access drawn as a hard line, not a suggestion.

Admin dashboard
17 back-office capabilities
You can manage leads, quotes, jobs, invoices and orders from a desktop browser
We have a time drag-and-drop dispatch board that shows live team availability
You can use Stripe Terminal Tap-to-Pay via @stripe/terminal-js for front-desk payments
Our map uses Leaflet and react-leaflet with job pin clustering and service-area visualization
There is a subscription and billing management dashboard
You can get analytics and reporting with PDF and Excel export
We have role-based views for Admin, Manager, Dispatcher and Field Worker
Our UI is multilingual with English, German, French and Italian via i18next
Our time drag-and-drop dispatch board lets you drag job cards across team members and see live availability
You can create, read, update and delete leads quotes, jobs, invoices, customers and products or services
We manage Swiss QR-Rechnung invoices. You can generate, preview, send and track payment status
The revenue dashboard shows Stripe subscriptions, Tap-to-Pay, TWINT and bank transfer. All reconciled
You can manage your team by inviting members assigning roles setting working hours, service areas and exception dates
Analytics shows job completion rates, revenue per tradesperson quote conversion rate and average job value
We use Celery background job monitoring via Flower for AI embeddings, notification queues and CSV imports
You can export GDPR data and see a full audit log on operations
Our customer CRM has booking history, communication. Review management, for customers
Roles × permissions matrix
Billing & subscription
Adminhas accessManagerno accessDispatcherno accessField Workerno access
Team & settings
Adminhas accessManagerno accessDispatcherno accessField Workerno access
Quotes · jobs · invoices
Adminhas accessManagerhas accessDispatcherno accessField Workerno access
Analytics & exports
Adminhas accessManagerhas accessDispatcherno accessField Workerno access
Dispatch board
Adminhas accessManagerhas accessDispatcherhas accessField Workerno access
Schedule & maps
Adminhas accessManagerhas accessDispatcherhas accessField Workerno access
Own tasks & time
Adminhas accessManagerhas accessDispatcherhas accessField Workerhas access
AI Assistant · Embedded

Meet the AI Butler

Model Routing: Through PydanticAI, OpenAI GPT-4o (vision), Anthropic Claude (reasoning), and Groq (speed) On-Device Speech: Sherpa-ONNX: entirely on-device, no external audio transmission Vector Search: pgvector RAG over previous quotations and jobs each draft becomes more intelligent over time

  • Voice-to-quote: give a detailed, VAT-accurate quote after describing a project aloud
  • Photo analysis: take a picture of a damaged tile, leaking pipe, or malfunctioning appliance, and Butler will identify and plan the repair
  • Conversations with many turns and a complete message history across sessions
  • Semantic search using pgvector RAG over previous quotations and jobs
  • Sherpa-ONNX fully on-device speech recognition; no audio is sent to a server
  • Multi-model routing: Anthropic Claude for reasoning, GPT-4o for vision, and Groq for speed
AI Butler
online · ready to draft
Embedded
"I need a quote for replacing a 40L electric water heater in Zurich - include parts and 3 hours labour at CHF 95/h"
Draft ready — grounded in similar past jobs:
Line item · materials— · —
Labour— · —
VATauto
Totalcomputed
"This pipe is leaking behind the wall - what should I charge?" (+ image of the leak)
"Create a quotation for a two-coat, four-room apartment that is 120 square meters."What was the last quote I did for Muller GmbH?""Show me all jobs with incomplete signatures this week"
Chatbot screenshots — 16:9 · replace this mockup once uploaded
Architecture

How it all fits together

Three layers, read top to bottom — the applications people use, the services that power them, and the infrastructure they run on.

Layer 1
What people use
Mobile field app
Flutter · iOS + Android
Admin console
React 19 in the browser
Works offline
on-device storage + speech
Layer 2
The brains
App server
FastAPI · handles everything
AI routing
PydanticAI · GPT-4o · Claude · Groq
Database
PostgreSQL + smart search
Payments
Stripe · Terminal · TWINT
Layer 3
Where it runs
Cloud hosting
Coolify on DigitalOcean
Secure & fast
nginx · Cloudflare · TLS
Always watched
Sentry · Flower monitoring
Business Logic

The rulebook under the hood

Rules · the ledger
§1
The six-stage lifecycle is followed by all entities
Lead → Quote → Job → Invoice → Payment → Review. Stage changes cause a WebSocket and push notification-based automatic status fan-out.
§2
Quotes may contain the deposit percentage and validity duration in addition to the per-line Swiss VAT rates of 8.1%, 2.6%, and 0%. Quotes that are accepted automatically convert to jobs.
§3
Only once a job is deemed complete are Swiss QR-Rechnung invoices created, and they need a current CHE-UID and IBAN. Reportlab and QR code are used to produce PDFs on the server side.
§4
Butler AI is model-routed by task
Anthropic Claude for complicated thinking, GPT-4o for vision/photo analysis, and Groq for low-latency drafting. Every structured output is validated by PydanticAI.
§5
Job status updates, signatures, payment records, invoices, and photographs are all in a tight priority queue for offline sync. Server-wins with a local audit trail are used in conflict settlement.
§6
The dispatch board honours exception dates, service regions, and working hours per member. FastAPI WebSocket broadcasts the availability matrix in real time.
§7
RBAC is implemented at the UI and API middleware (FastAPI role-scoped JWT) levels. Only their own jobs and schedules are accessible to field workers.
§8
Feature access levels are determined by Stripe subscriptions. Prior to enabling Tap-to-Pay or payments, Stripe Connect requires vendor onboarding.
Workflows · pipelines
Voice-to-Quote6 steps
1Field worker opens Butler2speaks job description3Sherpa-ONNX transcribes on-device4PydanticAI routes to Groq or GPT-4o5structured quote draft returned6worker reviews and sends PDF
Job Completion8 steps
1Job opened2before photos (offline)3work completed4after photos + signature (offline)5sync on reconnect6QR-Rechnung invoice auto-generated7Tap-to-Pay or TWINT8review request sent
Dispatch Flow5 steps
1Manager opens dispatch board2new job card appears3drag to available team member4WebSocket fans out5field worker receives push notification
Automations · trigger → action
After providing a quotation, Celery Beat delivers follow-up reminders at customisable intervals.
When a quotation is approved, a work is assigned, payment is received, and a review is filed, a Firebase Cloud Messaging push is issued.
Every time a new quotation or job is saved, Celery computes pgvector embeddings asynchronously.
Coolify container starting hooks enable Alembic migrations to occur immediately upon deployment.
The Stripe webhook handler automatically changes the status of invoices and reconciles payments in a matter of seconds.
Features

Everything inside

10 capability groups, laid out as an uneven mosaic — not a wall of identical cards.

01Butler AI (Voice, Text & Photo)
Voice-to-quote: give a detailed, VAT-accurate quote after describing a project aloud.
Photo analysis: Butler finds and sketches the task by taking a picture of a flaw.
Conversations with many turns and a complete message history across sessions
Semantic search using pgvector RAG over previous quotations and jobs
Speech is entirely on-device (Sherpa-ONNX); no external audio is sent.
Multi-model routing: Claude for reasoning, GPT-4o for vision, and Groq for speed
02Leads & CRM
Lead collection using source tracking (phone, web form, referral, walk-in)
One-tap conversion to quotation for the lead status pipeline
A customer profile that includes their whole employment and correspondence history
Shortcuts for direct contact: phone, WhatsApp, email
03Quotes
Swiss VAT line items (8.1%, 2.6%, and 0%) in an on-site quotation builder
The proportion of deposits, conditions of payment, and duration of validity
Automated reminders to follow up after sending
One tap to send a branded PDF via email
One-tap acceptance creates jobs automatically
04Jobs & Field Work
Complete work details, including the client, address, pictures, notes, and designated team member
It operates offline before, during, and following photo capturing.
Offline-capable on-device customer signature
Job templates and recurring scheduling
Push the job status in real time to the workplace
05Swiss QR-Rechnung Invoicing
Compliant QR-Bill PDF creation: a single tap upon work completion
VAT rates per line (8.1%, 2.6%, and 0%) validated by CHE-UID
Validation of Swiss postal codes and cantonal address fields
All Swiss banking applications, including PostFinance, UBS, Raiffeisen, and ZKB, are compatible.
06Payments
Stripe Terminal Tap-to-Pay: phone only; on-site card, contactless, Apple/Google Pay
Instant payment via Twint Swiss
Automatic reconciliation combined with manual bank transfer
Contractor payout onboarding using Stripe Connect
Stripe Subscriptions for Pro, Business, and Enterprise subscription billing
07Dispatch Board
Drag-and-drop job scheduling in real time (dnd-kit + WebSocket)
Each team member's live availability matrix
Service regions, exception dates, and working hours for each member
Push notifications that instantly fan out to field workers and office devices
08Offline-First Mobile
Complete app operation using the SQLite local storage with no signal
Cache-age indicators that display the freshness of data
On reconnect, the background sync queue was prioritised.
No matter where the job takes you, you can work in basements, on rooftops, or in rural locations.
09Auth & Security
Passkeys (FIDO2/WebAuthn): device-native and resistant to phishing
Biometric login via Face ID, Touch ID, or fingerprint
Google/Apple sign-in and the magic link
Twilio Verify 2FA (SMS OTP)
iOS Keychain and Android Keystore token storage, as well as Argon2 password hashing
Full audit logging on sensitive processes and GDPR data export
10Multi-Language (EN / DE / FR / IT)
Language switching with just one tap; no restart is needed
Mobile Flutter ARB files with compile-time safety
i18next for site administrators with browser language detection
Currency, date, and number formatting that takes location into account
Regional legal pages: AGB Handwerker, Datenschutz, and Impressum
Tech Stack Implementation

Built with a modern AI stack

Mobile App (Flutter)
  • Flutter + Dart - cross-platform iOS & Android framework
  • Riverpod + GetIt - state management and dependency injection
  • sqflite (SQLite) - offline-first local database
  • Sherpa-ONNX - on-device speech-to-text for Butler AI
  • mek_stripe_terminal + qr_flutter - Tap-to-Pay and QR billing
  • flutter_map + OpenStreetMap - maps, geocoding, and location
  • passkeys (FIDO2) + local_auth - Face ID / Touch ID login
  • intl + ARB files - EN / DE / FR / IT localization
Web Dashboard (React)
  • React 19 + TypeScript + Vite - admin panel UI and build tooling
  • Tailwind CSS + Radix UI - styling and accessible components
  • TanStack Query + React Hook Form + Zod - data fetching and validated forms
  • dnd-kit - drag-and-drop dispatch board
  • Leaflet + react-leaflet - interactive web maps
  • @stripe/terminal-js + jsPDF - payments and PDF invoice generation
  • i18next - multi-language web interface (EN/DE/FR/IT)
Backend (FastAPI)
  • Python 3.11 + FastAPI - async API with uvicorn / gunicorn
  • SQLAlchemy + asyncpg + Alembic - async ORM and migrations
  • Pydantic v2 - request validation and typed schemas
  • Celery + Redis + Celery Beat - background jobs and scheduling
  • reportlab + qrcode - Swiss QR-Rechnung PDF invoices
AI Engine
  • GPT-4o, Claude, Groq - vision, long-context, and low-latency LLMs
  • PydanticAI - model routing and output validation
  • pgvector + Cohere - semantic search (RAG) and reranking
  • Sherpa-ONNX - private on-device speech recognition
Database
  • PostgreSQL + pgvector - primary database and vector search
  • Redis 7 - Celery broker and application cache
  • SQLite (sqflite) - mobile offline store
Authentication & Security
  • Firebase Auth + Google / Apple Sign-In - social login
  • FIDO2 / WebAuthn passkeys - passwordless biometric auth
  • Argon2 + JWT (python-jose) - password hashing and tokens
  • iOS Keychain / Android Keystore - secure on-device storage
Payments
  • Stripe Switzerland + Stripe Connect - processing and vendor payouts
  • Stripe Terminal - in-person Tap-to-Pay
  • TWINT - Swiss mobile wallet payments
  • Stripe webhooks - automatic payment reconciliation
DevOps & Infrastructure
  • Coolify + DigitalOcean - managed Docker deployment
  • Docker multi-stage + nginx - containerized builds and reverse proxy
  • Cloudflare + Let's Encrypt - DNS and TLS
  • Sentry + structlog + Flower - error tracking and monitoring
Communications & Media
  • Firebase Cloud Messaging - push notifications
  • Firebase Realtime Database - live job tracking
  • SendGrid + Twilio Verify - email and SMS OTP
  • Cloudinary - media CDN and WebP optimization
Results & Value

What actually changed

01
Customer-Day Compression
02
−70%
Admin Time Reduction
03
100%
Swiss Market Fit
04
24/7
Zero Signal, Full Productivity
05
<30s
Quotes in Seconds, Not Hours
06
Tap-to-Pay
On-Site Payments Without Hardware
Key achievements

Engineering outcomes beneath the headline numbers.

A1Delivered a tri-surface SaaS (Flutter mobile, React admin, and AI Butler) from a single FastAPI backend, resulting in a ~40% reduction in feature development time and no API drift across clients.
A2Using a single PydanticAI routing layer, three AI model providers (OpenAI, Anthropic, and Groq) were integrated, providing Butler with the appropriate model for each job.
A3Sherpa-ONNX has built-in 100% on-device speech recognition; voice input is offline and no audio ever leaves the phone, resolving connection and privacy issues.
A4Removed the need for manual QR-Bill production by automatically generating compliant Swiss QR-Rechnung invoices using Reportlab + QRcode.
A5Passkey (FIDO2/WebAuthn) authentication was implemented on Flutter and the web, providing field workers with a biometric-first, phishing-resistant login.
A6Provided per-region legal pages, locale-aware layout, and one-tap switching for four languages (EN, DE, FR, and IT).

See it in action

The platform is live — browse the site, poke the demo, or install the app.