The problem
Auto repair shops across the UK and Romania still run on paper, WhatsApp, and Excel spreadsheets. Bookings in a notebook, rough stock counts, late invoices, zero visibility into performance. The garage owner spends more time managing the business than fixing cars.
Garageflow exists to fix that: one place for everything involved in running a garage, from booking the customer in to collecting payment.
What we built
We delivered a complete SaaS platform, built as microservices: a dedicated API (backend) and a separate dashboard (frontend). Plus the marketing website for both markets (garageflow.co.uk and garageflow.ro).
Browser-like tabs
One of the most common complaints from garage staff was ending up with dozens of browser tabs open: one for each job, customer, invoice, estimate. Context was constantly lost, and switching between tasks meant hunting through a sea of tabs.
We solved this by building browser-like tabs directly into the dashboard. Each section opens in its own tab within the app, preserving state independently. You can have a job open, switch to an invoice, check stock levels, and come back to the job exactly where you left off. No page reloads, no lost scroll position, no re-fetching data.
Architecture
Two independent applications communicating through a REST API secured with Laravel Sanctum. The backend handles all business logic, persistence, and integrations. The dashboard is a React SPA that consumes the API and provides the user interface.
This separation enables independent scaling: the API can simultaneously serve the web dashboard, a future mobile app, and third-party integrations, all through the same endpoints.
Core modules
Jobs & Work Orders: the heart of the application. Each job follows a clear workflow: draft, pending, in progress, on hold, waiting parts, ready for pickup, completed. Assignment to technicians and bays (lifts, ramps). Labor time and parts tracking.
Scheduling & Bays: a visual calendar that shows who's doing what, where, and when. Technicians and bays (lifts, ramps, ITP stations) are displayed as columns. Jobs are color-coded blocks you can drag and drop to reschedule. The system checks availability in real time: if a technician is on leave or a bay is under maintenance, it won't let you book it.
- Scheduling per technician and per workstation
- Full ITP station support with dedicated scheduling
- Time-off management with approval workflow
- Working hours, lunch breaks, holiday calendar

Estimates: detailed quote creation, email delivery, status tracking (sent, viewed, approved, declined). Automatic conversion from approved estimate to job. Auto-generated PDFs.
Invoicing: invoice from jobs or orders. Full status tracking (draft, issued, sent, paid, overdue). Multiple payment recording (cash, card, transfer, cheque). Credit notes. PDF generation.
Stock Management: parts inventory with SKU, OEM codes, barcodes. Min/max stock levels with automatic alerts. Logged stock movements. Reorder suggestions.
Purchase Orders: supplier ordering, delivery tracking through GRN (Goods Receipt Note), PDFs for supplier communication.
MOT/ITP Tracking: more than a spreadsheet with dates. The module monitors expiry dates for every vehicle in the system and sends automatic SMS reminders before they expire. The garage owner configures how many days in advance to notify, and the system handles the rest. Every SMS is logged with delivery status, recipient, and timestamp. Full notification history per vehicle, so you always know who was reminded and when.


Customers & Vehicles: customer management with associated vehicles. Vehicle details: make, model, year, VIN, registration number. Complete service history per vehicle.
Roles & permissions
Not everyone in a garage needs access to everything. The receptionist doesn't need to see supplier invoices. The technician doesn't need to manage stock reorder levels. The owner wants to see it all.
Garageflow ships with four default roles (Administrator, Manager, Receptionist, Technician) and a granular permission matrix that covers every module: jobs, estimates, invoicing, stock, scheduling, customers, personnel, products, purchase orders, and more. Each role defines exactly what a user can see, create, edit, or delete across the entire system.
For garages with specific needs, permissions are fully customizable per role. The result: every user in the shop works with exactly the access they need, nothing more, nothing less.

Multi-tenancy and feature flags
Each garage has its own organization with multiple sites (for garage chains). 8 major modules can be toggled on/off per organization: jobs, orders, invoicing, stock management, purchase orders, estimates, scheduling, MOT tracking. This enables a tiered pricing model: plans with increasing functionality.
Real-time
The dashboard updates in real time via WebSockets (Laravel Reverb + Pusher). When a technician marks a job as complete, the receptionist sees the status change instantly. In-app, email, and SMS notifications for critical events.
Tech stack
Backend (API): Laravel 11, PHP 8.1+, MySQL, Laravel Sanctum (API auth), Laravel Reverb (WebSockets), Filament v3 (admin panel), DomPDF + Browsershot (PDF generation), Pest (testing).
Frontend (Dashboard): React 19, TypeScript, Vite, Redux Toolkit (state management), TanStack Table (data tables), FullCalendar (scheduling), dnd-kit (drag-and-drop), Tailwind CSS, i18n (EN + RO), Laravel Echo (real-time).
Integrations: SMS Link (MOT/ITP SMS notifications), SMTP (invoice/estimate emails), server-side PDF rendering.
Results
A fully functional platform with 8 complete modules, multi-tenant, feature-flagged, with bilingual support (EN + RO). The microservices architecture enables parallel development on the API and dashboard without interference. Each module can be independently activated per client, enabling a scalable SaaS model.


