Multi-Tenant Quoting & Booking SaaS for Transport Operators
From embeddable quote widget to full fleet operations, one platform per brand
Client
Get A Bus & Coastal Car Rentals (Australia)

For two Australian transport businesses — Get A Bus, a charter and coach hire operator, and Coastal Car Rentals, a self-drive car rental agency — Outsourcify built a multi-tenant SaaS platform covering the complete transactional lifecycle: embeddable quote widget, booking, payment and day-to-day fleet operations. Originally developed as a single-tenant system, the platform was structurally refactored into a tenant-aware architecture hosting independent organizations on a shared codebase with absolute data isolation. Phase one is running in production with two tenants live.
Results
Challenge
The two operators run radically different businesses — chartered coach hire with drivers, and self-drive daily car rental — yet needed one platform. Each had to embed a quoting widget on its own website under its own branding, with pricing rules, payment gateways and email templates configured per tenant and strict data isolation between them. All fare calculations had to execute server-side to prevent client-side tampering, and Australian realities — GST, driver-fatigue rules, licence classes and refundable security bonds — had to be handled natively rather than bolted on.
Solution
We built the platform as a decoupled stack: Vue.js 3 / Nuxt 3 powers both the admin panel and the embeddable booking widget, over a Node.js / Express REST API and a MySQL database managed with Prisma ORM. Multi-tenancy is enforced at the database level with a tenant key on every major table, and a tenant-aware JWT authentication pipeline scopes each request; the system runs on the DigitalOcean App Platform with AES-256 encryption on sensitive credentials. A dual-model pricing engine computes route-based charter fares — daily base rate, distance-based fuel charges from the Google Maps API, cleaning fees and hourly driver fees with minimum-hour rules and overnight allowances — alongside daily-hire pricing in strict 24-hour blocks with per-day insurance and a flat refundable security bond. Safety validations geofence address lookups to Australia and automatically flag any itinerary of 800 km or more with a persistent notice citing the 1,000 km and 12-hour daily driver limits, routing the booking to priority manual review. The admin dashboard tracks bookings through an explicit lifecycle from Requested to Balance Paid, generates serialized quotes valid for 30 days with tokenized conversion links, and handles vehicles, offline payments, pre-filled hire agreement PDFs, licence photo audits and post-rental bond refunds. Payments run through Square for one tenant and Stripe for the other, with tokenized card capture keeping the platform PCI-DSS compliant. The roadmap adds mobile vehicle inspections with photo comparison, SMS reminder cadences, eSignatures, and self-service signup with subscription billing.
Tools
Vue 3 / Nuxt 3, Node.js + Express, MySQL + Prisma, Google Maps API, Square & Stripe, DigitalOcean App Platform
Tools
Vue 3 / Nuxt 3, Node.js + Express, MySQL + Prisma, Google Maps API, Square & Stripe, DigitalOcean App Platform
Guided booking widget
Each operator embeds the booking widget on its own website as an iframe that resolves branding, settings and fleet cards from an organization slug in the embed URL. Customers move through a guided four-step flow — customer information, trip details, route and stops on a live Google Map, then a final review — with Places autocomplete restricted to Australian locations. The widget adapts to each tenant's business model: charter bookings offer with-driver and self-drive modes, automatically reserving a seat for the customer driver in self-drive, while the rental flow swaps the route builder for pickup and return dates, licence class selection with mandatory front-and-back photo upload, and vehicle-specific insurance excess options.

Route planning with live safety limits
Behind the widget, the platform builds a full route timeline from the itinerary: legs, stops and layovers are computed with the Google Maps Distance Matrix API and laid out day by day. Safety is engineered in — any single itinerary mapping 800 km or more displays a persistent warning citing the 1,000 km-per-day guideline and the 12-hour daily driving cap, and the booking is simultaneously flagged in the admin panel for priority manual review. Address autocomplete is geofenced to Australian endpoints, and the vehicle list filters by passenger count so a group can never book a vehicle it does not fit. Every calculation runs server-side, out of reach of client-side tampering.

Transparent pricing & compliance
Customers see exactly what they pay for: the pricing engine itemizes a GST-inclusive breakdown — daily vehicle rate, distance-based fuel charges, cleaning fee, driver fees, and a flat refundable security bond for self-drive hires, charged upfront and refunded after the post-rental audit. Two billing models run side by side on one server-side engine: route-based charter pricing with 8-hour driver minimums and overnight allowances, and daily hire billed in strict 24-hour blocks with per-day insurance. Compliance is built in — a required terms acceptance seals a permanent audit log of timestamp, IP address and user agent, and card data flows through tokenized Stripe Elements so raw numbers never touch the platform. Quotes stay valid for 30 days via a tokenized reopen link.

Per-tenant fleet & branding
Each tenant sells its own fleet under its own identity. Get A Bus customers choose between self-drive and with-driver rental modes, then pick from vehicle cards — 9, 12 or 22-seater minibuses and larger coaches — each carrying passenger capacity, daily rates and the licence class required to drive it, with mandatory front-and-back licence photo upload for self-drive hires. Vehicle lists filter by passenger count so a group can never book a vehicle it does not fit, and the same widget re-skins per organization slug for Coastal Car Rentals' daily-hire flow.

Operations dashboard
Behind the widget, each operator runs its bookings from a dedicated admin: quotes and reservations tracked through an explicit lifecycle from Requested to Balance Paid, with filters by type, status, customer and trip date. Serialized quote numbers (GB-2026-Qxxxx) keep every request traceable, quotes stay valid for 30 days with tokenized conversion links, and the same panel manages vehicles, vehicle types, users, email templates and reports — per tenant, on one shared codebase.

Where this project sits in our history
- 2017
Plani Travel / Les Secrets du SiamTravel Agency management web app - 2018
Chiang Rai Province (Thailand)Tourism website and mobile app design - 2019
High luxury travel agency (USA)A full digital suite for a travel agency - 2022
Plani TravelPlani Travel - 2023
AxiomeA SaaS Platform for Travel Agencies
2023Foreigner Friendly ThailandA directory of Thai businesses aimed at foreigners- 2026
Get A Bus & Coastal Car Rentals (Australia)Multi-Tenant Quoting & Booking SaaS for Transport OperatorsYou are here
Contact us
Let’s find the right solution for your business.
We partner with product teams and founders to design, build, and ship software that lasts.
Talk to our team
