Metaviz AI
Service Provider Marketplace

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

This platform is intended for professionals that operate in industries such as plumbing, electrical, or heating and cooling system repair. Additionally, it benefits Swiss contractors. Managing leads, quotations, jobs, billing, payments, and dispatching employees are just a few of the many tasks performed by the platform. It even includes a feature that allows you to create quotations from your words or images. For those who perform these types of tasks on a daily basis in Switzerland, this is really beneficial.

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.

Relevant Keywords
AI Field Service App
Trades CRM
Flutter Offline-First
Swiss QR-Rechnung
Stripe Terminal Tap-to-Pay
Voice-to-Quote AI Butler
FastAPI Backend
Multi-Tenant SaaS
ServiceTitan Alternative
Jobber Alternative
Passkeys FIDO2 Auth
Dispatch Board
Challenges

Trade Businesses Are Still Running on WhatsApp, Spreadsheets, and Paper

high pain
  • No single system for the full workflow Contractors, plumbers, and electricians had to manage a variety of disconnected tools: separate accounting software for invoicing, spreadsheets for estimates, paper for works, and WhatsApp for client interaction. They lost hours each day to administrative tasks that ought to be automated.
  • Quoting on-site was slow and error-prone At the customer's kitchen table, trade firms were unable to produce an appropriate estimate. The next day, they had to go create it in a spreadsheet and send it. As a result, many lost employment to speedier competition.
  • No offline mobile solution Field personnel lacked a mobile device in rural regions, basements and roofs. On actual employment locations, they were unable to use programs that required an internet connection. They thought these applications were worthless and required an internet-independent tool so they may do their duties more effectively with the aid of such a gadget.
  • Swiss compliance was a manual nightmare QR-Rechnung invoices were previously created by hand. This meant that every Swiss QR-Rechnung invoice had to have the VAT rates included. There are three different VAT rates: 8.1%, 2.6%, and 0%. For every Swiss QR-Rechnung invoice, CHE-UID numbers had to be verified. This made a lot of blunders during this procedure. The payments for the Swiss QR-Rechnung invoices were delayed due to these errors.
  • Getting paid on-site was impossible Trade companies have two choices. They may utilize large, bulky card machines or spend days tracking down bank transfers. Payments could not be accepted on-site with simply a phone. Trade companies required a phone-based payment system.
  • Dispatch was a whiteboard problem Scheduling field workers for jobs was a real hassle. Whiteboards or shared calendars were used but they didn't show who was available in real-time. This often led to bookings and missed appointments.
  • Multi-language markets were underserved Swiss tradespeople do their jobs, in different areas like the German, French, Italian and English-speaking parts of the country. The problem was no tool that could help them with all four languages in one place, like an app that they could use.
The Solution

How We Built One App to Replace the Entire Trade Business Stack

Metaviz AI created a system with three main parts: a mobile app that people can use on their phones, a website that administrators can use and a smart helper called AI Butler. All of these parts work together because they are connected to the backend system, which is powered by FastAPI. The people who made this system looked at every problem that people were having and found a way to fix each one directly. Metaviz AI made sure that the mobile app, the administrator website and the AI Butler all work well together to solve these problems.

1Butler AI — Voice-to-Quote in Seconds Our technology promptly generates a quotation when tradespeople describe a work in their own words, either by speaking, typing, or taking a picture.It can even identify issues like broken tiles, leaky pipes, and appliances when customers upload a picture.No audio data ever leaves the phone thanks to our speech recognition technology, which operates on the device utilising Sherpa-ONNX. Together, speech recognition and visual analysis make it simple for tradesmen to obtain quotations.
2Six-Stage Workflow in One App You can manage everything in one place. Let us say you get a lead in the morning. You go to the customers house. Give them a quote while you are still in their kitchen. Then you do the job in the afternoon. When you are finished you get paid before you leave the customers driveway. After that you ask the customer to review your work on your way. This way the customer can review your work while it is still fresh in their mind like the lead and the review all in one day with the lead and the review and everything in, between all happening in one platform with the lead.
3Offline-First That Actually Works The Flutter mobile app just keeps on working when you have no signal at all. It stores things, like jobs and customers and quotes and photos and signatures and notes about when a job's finished in a local database called SQLite.When you get a signal again the app starts syncing everything in the background. It does the important things first. The Flutter mobile app makes sure that jobs and customers and quotes and all that are synced properly.
4Swiss QR-Rechnung Invoicing Create QR-Bill invoices that are compatible with all Swiss banking apps, including PostFinance, UBS, Raiffeisen, and ZKB. Completely automated branded PDF, CHE-UID validation, and per-line VAT rates.
5Stripe Terminal Tap-to-Pay Tradespeople can take card payments when they are at the customers site. They do this directly from the app. The app lets them take payments using a chip. By tapping the card on the device or even with a mobile wallet. They do not need any equipment to do this. The customer signs the device to say they agree with the payment. Then the payment is sorted out automatically with the tradespeople account. The customer signs on the device, for the tradespeople.
6Real-Time Drag-and-Drop Dispatch Office staff move job cards across team members on a board that shows who is available. This way there are no bookings. They do not need a whiteboard to keep track everything is clear.
Before

Send quotes to customers by email the day using a spreadsheet. Workers use paper job sheets on clipboards. Create QR-Bills by hand which can be wrong sometimes. Customers pay with cash or we have to ask them to transfer money to our bank account. Use a whiteboard to organize dispatch work Use WhatsApp to talk to customers.

After

This app does everything from getting a lead to getting a review. The AI Butler can make a quote in a few seconds when you are on site. You can make digital jobs and add photos and signatures to them. The app can automatically make a Swiss QR-Rechnung for you. You can use Stripe Tap-, to-Pay and TWINT on your phone to get paid. The app has a real-time board where you can drag and drop things to dispatch them.

Ecosystem

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

Butler AI

Description: This thing uses a few kinds of artificial intelligence like OpenAI GPT-4o and Anthropic Claude and Groq. It can make quotes from things you say, type or even from a picture. You can talk to it. It will understand what you are saying because it has something called Sherpa-ONNX that works on your phone. This means that what you say does not go to any computer it just stays on your phone. It can also look at all the quotes and jobs it has done before and find the ones that mean the thing this is done with something called pgvector semantic search, over all the past quotes and jobs Connected services: OpenAI, Anthropic, Groq, PydanticAI, pgvector, Sherpa-ONNX

Leads & CRM

Description: Have a lead pipeline now that source tracking and status management. It also has one-tap conversion to quote. The full lead pipeline replaces the WhatsApp contact flow. Connected services: FastAPI, PostgreSQL, Firebase Cloud Messaging

Quotes Module

Description: We can create quotations on-site with the use of Butler AI. Because it incorporates the tax, sometimes referred to as VAT, this tool is unique. Rates for the VAT include 8.1%, 2.6%, and 0%. Additionally, the application assists us with things like the deposit % and the duration of the quotation. By adding our trademark to the PDF file, we can even make the quote appear to be from our business. Connected services: ReportLab, PydanticAI, FastAPI, Swiss VAT engine

Jobs & Field Work

Description: The job management system takes care of everything from start to finish. It includes things like taking photos during and, after a job getting signatures on the device and handling recurring jobs and templates. The best part is that the job management system works even when you are not connected to the internet storing all the information in SQLite. Connected services: sqflite, connectivity_plus, image_picker, signature

Swiss QR-Rechnung

Description: Automated compliant QR-Bill invoice PDF with postal code validation, cantonal address fields, CHE-UID validation, and per-line VAT. Connected services: reportlab, qrcode, FastAPI, asyncpg

Payments

Description: TWINT, Stripe Checkout (subscriptions), manual bank transfers with automatic reconciliation, Stripe Terminal Tap-to-Pay, and Stripe Connect payments. Connected services: Stripe SDK, mek_stripe_terminal, @stripe/terminal-js

Dispatch Board

Description: Real-time drag and drop scheduling, with a live matrix that shows (Available, Booked, Unavailable, On leave) It uses WebSocket to update all users. Connected services: dnd-kit, FastAPI WebSocket, role-scoped RBAC

Schedule & Maps

Description: Calendar that shows the days of the week with a map from OpenStreetMap. The OpenStreetMap will have job pins on it. The address is also autocompleted. Connected services: flutter_map, OpenStreetMap, Leaflet, latlong2

Auth & Security

Description: Face ID/Touch ID, magic link, Google/Apple sign-in, 2FA, and passkeys (FIDO2/WebAuthn). Full audit logging and GDPR export. Connected services: webauthn, local_auth, python-jose, Argon2, flutter_secure_storage

Multi-Tenant RBAC

Description: There are four roles that people can have. These are the Field Worker and the Dispatcher and the Manager and the Admin. Each of these roles has its special access, to different things. Field Worker and the Dispatcher and the Manager and the Admin can all see quoting and billing and dispatch and analytics. They can only use the parts that they are allowed to use. Connected services: FastAPI RBAC middleware, role-scoped JWT

Multi-Language

Description: You can switch between English and German and French and Italian with one tap. The formatting is also set up to work with where you're. Also have pages, for each region that have all the legal information you need like Impressum and Datenschutz and AGB. Connected services: flutter_localizations, ARB files, i18next, react-i18next

Subscription Billing

Description: Have plans like Pro and Business and Enterprise tiers that we offer through Stripe Subscriptions.These plans have things, like a trial that turns into a paid plan and the price is based on how many people are using it. Also have Stripe Connect to help people get started. Through this a track of how much people are using our service can be recorded. Connected services: Stripe SDK, Stripe Connect, Celery + Redis

User Experience

Designed for every screen

Web

  • You can manage leads and quotes and jobs and invoices and orders from a desktop browser. This is very useful for people who work on computers all day.
  • Have a time drag-and-drop dispatch board that shows when the team is available. This means you can see who is working and who is not.
  • You can use Stripe Terminal Tap-to-Pay for payments at the desk. This is done with @stripe/terminal-js.
  • Use Leaflet and react-leaflet to make a map that shows where jobs are. The map also groups jobs together so it is easier to see.
  • You can manage subscriptions and billing from a dashboard. This makes it easy to keep track of money.
  • Have analytics, reporting that you can export to PDF or Excel. This is useful for people who like to look at numbers.
  • People can see things depending on their role. Like Admin and Manager and Dispatcher and Field Worker all see things.
  • Our user interface works in languages, including English and German and French and Italian. We use i18next to make this work.
Voice-to-Quote: Open Butler AI → Describe job by voice → Sherpa-ONNX transcribes on-device → GPT-4o drafts quote → Review and send to customerJob Completion: Open job → Before photos (offline) → Complete work → After photos + signature (offline) → Sync on reconnect → QR-Rechnung invoice → Tap-to-Pay → Request reviewOffline Flow: Enter no-signal area → App works fully via SQLite → Cache-age indicator shown → Reconnect → Prioritised background sync runs automatically

Mobile

  • The main page of the app works without a signal because it stores all the information on your phone using something called SQLite.
  • You can find customers and turn them into people who will pay you for your work. You can do all of this from the field.
  • When you are with a customer you can make a quote right there. Then you can even talk to the app. It will write the quote for you. The quote will have all the information like taxes and it will look really professional.
  • The AI Butler is like a helper that can make quotes for you. You can tell it what you need. It will do it. You can talk to it. Type or even send a picture.
  • You can take pictures before. After you do a job and you can get the customer to sign your phone. Also, you can also make notes, about the job.
  • When you need to make an invoice, the app can do it for you. It will be an invoice like they use in Switzerland and you can send it right away.
  • You can get paid on the spot using your phone. You do not need any machines.
  • You can also get paid using TWINT or by bank transfer.
  • The app has a calendar that shows you what jobs you have to do and where they are. It uses a map to show you.
  • When something happens like you get a job the app will send you a message.
  • You can log in to the app using your face or your fingerprint. This is really safe and easy to do.
  • You can change the language of the app easily. You can choose from English, German, French or Italian.
  • When you are not connected to the internet the app will tell you that you are looking at information.
  • When you connect to the internet again the app will update all your information. It will do the important things first.
Admin Dashboard

Full control, behind the scenes

  • 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
AdminManagerDispatcherField Worker
Permissions
Admin — In full access, you get control over billing also you can handle team management tasks. Furthermore, settings are at your fingertips so you have access to all data. RBAC management is also part of full access.Manager — Quotes, jobs, invoices, analytics and dispatch. It does not have billing or Role-Based Access Control.Dispatcher — Updates on the dispatch board, schedule, and project status without any billing or quotes.Field Worker — Only own tasks and timetable no team views or client financial information.
AI Assistant

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

Embedded widget
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
Example queries
"I need a quote for replacing a 40L electric water heater in Zurich — include parts and 3 hours labour at CHF 95/h"
"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"
Architecture

System design

Frontend
Flutter (Dart) · Riverpod · GetIt · sqflite · Sherpa-ONNX · mek_stripe_terminal · qr_flutter · flutter_map + OpenStreetMap · firebase_messaging · local_auth · passkeys (FIDO2) · flutter_secure_storage · intl + ARB files (EN/DE/FR/IT) · flutter_localizations || React 19 · TypeScript · Vite · Tailwind CSS · Radix UI · TanStack React Query · react-hook-form · Zod · React Router DOM · dnd-kit · Leaflet + react-leaflet · @stripe/terminal-js · i18next + react-i18next · Firebase Cloud Messaging · jspdf · motion (Framer Motion) · Vitest
Backend
Python 3.11 · FastAPI · uvicorn + gunicorn · SQLAlchemy (async) · asyncpg · Alembic · Pydantic v2 · PydanticAI · OpenAI GPT-4o · Anthropic Claude · Groq · pgvector · Celery + Redis · Celery Beat · reportlab + qrcode · python-jose (JWT) · passlib + Argon2 · webauthn · stripe SDK
Infrastructure
Coolify (managed Docker Compose) · DigitalOcean · Python 3.11-slim + Node 20-alpine containers · Docker multi-stage builds · nginx reverse proxy · Cloudflare + Let's Encrypt TLS · Sentry · structlog (JSON) · Flower (Celery monitoring)
Flutter Mobile App (iOS + Android) — Riverpod + GetIt for state/DI; sqflite (SQLite) for offline-first local store; prioritised sync queue with conflict resolution; Sherpa-ONNX on-device speech; mek_stripe_terminal for Tap-to-Pay; firebase_messaging for push; flutter_map + OpenStreetMap; local_auth + passkeys for biometric/passkey authReact + Vite Admin SPA — React 19 + TypeScript; TanStack React Query; react-hook-form + Zod; Tailwind CSS + Radix UI; dnd-kit for dispatch board; Leaflet for maps; @stripe/terminal-js; i18next; Firebase Cloud MessagingFastAPI Backend (Python 3.11) — Async FastAPI with uvicorn/gunicorn multi-worker; SQLAlchemy (async) + asyncpg; Alembic migrations; Pydantic v2 + PydanticAI; Celery + Redis (4-worker pool + Beat); FastAPI WebSocket for real-time dispatchMulti-Model AI Layer — OpenAI GPT-4o (vision), Anthropic Claude (long-context), Groq (low-latency); routed via PydanticAI; pgvector for RAG; optional Cohere rerankingSwiss Document Engine — reportlab + qrcode for QR-Rechnung PDF; Swiss VAT engine (8.1/2.6/0%); CHE-UID validation; cantonal address and postal code validationInfrastructure — Coolify (managed Docker Compose) on DigitalOcean; Python 3.11-slim + Node 20-alpine containers; nginx reverse proxy; PostgreSQL + pgvector; Redis 7; Cloudflare + Let's Encrypt TLS; Sentry
Business Logic

The rules that run the product

Rules
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • The dispatch board honours exception dates, service regions, and working hours per member. FastAPI WebSocket broadcasts the availability matrix in real time.
  • 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.
  • Feature access levels are determined by Stripe subscriptions. Prior to enabling Tap-to-Pay or payments, Stripe Connect requires vendor onboarding.
Workflows
  • Voice-to-Quote: Field worker opens Butler → speaks job description → Sherpa-ONNX transcribes on-device → PydanticAI routes to Groq or GPT-4o → structured quote draft returned → worker reviews and sends PDF
  • Job Completion: Job opened → before photos (offline) → work completed → after photos + signature (offline) → sync on reconnect → QR-Rechnung invoice auto-generated → Tap-to-Pay or TWINT → review request sent
  • Dispatch Flow: Manager opens dispatch board → new job card appears → drag to available team member → WebSocket fans out → field worker receives push notification
Automations
  • 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

Butler 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

Leads & 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

Quotes

  • 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

Jobs & 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

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

Payments

  • 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

Dispatch 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

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

Auth & 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

Multi-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

Built on a modern stack

Frontend
Flutter (Dart) · Riverpod · GetIt · sqflite (SQLite) · Sherpa-ONNX (on-device speech) · mek_stripe_terminal (Tap-to-Pay) · qr_flutter · flutter_map + OpenStreetMap · firebase_messaging · local_auth · passkeys (FIDO2) · flutter_secure_storage · intl + ARB files (EN/DE/FR/IT) · flutter_localizationsReact 19 · TypeScript · Vite · Tailwind CSS · Radix UI · TanStack React Query · react-hook-form · Zod · React Router DOM · dnd-kit (dispatch board) · Leaflet + react-leaflet · @stripe/terminal-js · i18next + react-i18next · Firebase Cloud Messaging · jspdf · motion (Framer Motion) · VitestMaps & Location: OpenStreetMap + Nominatim (Flutter mobile) · Leaflet + react-leaflet (web) · flutter_map · latlong2 · geolocator · geocodingLocalization: Flutter ARB files (EN/DE/FR/IT) · flutter_localizations · intl 0.19 · i18next + react-i18next · browser language detection · locale-aware formatting
Backend
Python 3.11 · FastAPI · uvicorn + gunicorn · SQLAlchemy (async) · asyncpg · Alembic · Pydantic v2 · PydanticAI · OpenAI GPT-4o · Anthropic Claude · Groq · pgvector · Celery + Redis · Celery Beat · reportlab + qrcode · python-jose (JWT) · passlib + Argon2 · webauthn · stripe SDKAI & Search: OpenAI GPT-4o (vision + reasoning) · Anthropic Claude (long-context) · Groq (low-latency) · PydanticAI (model routing + validation) · pgvector (semantic search RAG) · Cohere (optional reranking) · Sherpa-ONNX (on-device speech)Auth: Firebase Auth · FIDO2/WebAuthn passkeys · Face ID / Touch ID · Google Sign-In · Apple Sign-In · Argon2 hashing · iOS Keychain / Android Keystore · JWT (python-jose)
Database
PostgreSQL + pgvector (primary + vector search) · Redis 7 (Celery broker + app cache) · SQLite via sqflite (mobile offline store)
DevOps
Coolify (managed Docker Compose) · DigitalOcean · Python 3.11-slim + Node 20-alpine containers · Docker multi-stage builds · nginx reverse proxy · Cloudflare + Let's Encrypt TLS · Sentry · structlog (JSON) · Flower (Celery monitoring)
Tools
Payments: Stripe Switzerland · Stripe Connect · Stripe Terminal (Tap-to-Pay) · Stripe Checkout · Stripe Subscriptions · TWINT · Stripe webhooks (auto-reconcile)Communications: Firebase Cloud Messaging (push) · Firebase Realtime Database (live job tracking) · SendGrid (transactional email) · Twilio Verify (SMS OTP)Media & CDN: Cloudinary (vendor media CDN) · image_picker + file_picker (Flutter) · WebP optimization
Results

Outcomes that move the business

Customer-Day Compression
📉
Admin Time Reduction
🇨🇭
Swiss Market Fit
📶
Zero Signal, Full Productivity
🤖
Quotes in Seconds, Not Hours
💳
On-Site Payments Without Hardware
  • Delivered 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.
  • Using a single PydanticAI routing layer, three AI model providers (OpenAI, Anthropic, and Groq) were integrated, providing Butler with the appropriate model for each job.
  • Sherpa-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.
  • Removed the need for manual QR-Bill production by automatically generating compliant Swiss QR-Rechnung invoices using Reportlab + QRcode.
  • Passkey (FIDO2/WebAuthn) authentication was implemented on Flutter and the web, providing field workers with a biometric-first, phishing-resistant login.
  • Provided per-region legal pages, locale-aware layout, and one-tap switching for four languages (EN, DE, FR, and IT).