Cut Admin Time 65% for a Garage - Case Study
The Client
A small-to-medium garage in France with 4 mechanics, 1 manager, and 1 office staff member. The team is multilingual - French, Portuguese, English, Spanish, and German are spoken daily. They handle 50+ jobs on a busy day, and before GaragePRO, every single one was tracked on paper.
See the full GaragePRO project page for the complete feature breakdown and screenshots.
The Pain Points
The problems were clear from the first discovery call:
- **Paper job tracking was losing jobs.** Sticky notes fell off boards, handwritten forms got misplaced, and there was no way to search job history. Customers would call asking about their car and staff had to dig through filing cabinets.
- **Manual invoicing caused billing errors.** Quotes were handwritten, then re-typed into invoices. Typos meant under-charging or re-doing invoices, both costing time and money.
- **Communication across language barriers.** A Portuguese mechanic needed to tell a French manager about a part - this meant walking across the shop or waiting for someone who spoke both languages. Real-time collaboration was impossible.
- **Zero business visibility.** The manager had no dashboard, no reports, no way to know which jobs were overdue or which mechanic was most productive. Business decisions were based on gut feeling.
- **No mobile access.** Mechanics couldn't check job details or update status from the shop floor - they had to walk to the office computer every time.
The Solution Architecture
I chose a stack optimised for real-time collaboration and offline resilience:
- •React 18 + TypeScript for a responsive, type-safe frontend
- •Firebase (Firestore, Auth, Cloud Functions, Storage) for real-time backend
- •Google Cloud Translation API for automatic message translation
- •4-role RBAC system (admin, manager, office, mechanic) with Firestore security rules
- •PWA with offline support via Firestore persistent cache
Building the Real-time Messaging System
The messaging system was the most technically challenging feature. Each job has its own chat thread where team members communicate in their language, and every message is automatically translated for other users.
How it works:
- User sends a message in their preferred language
- A Firestore trigger fires a Cloud Function
- The Cloud Function calls Google Cloud Translation API for each team language
- Translated versions are written back to the message document
- Each user's client renders the message in their language via real-time listeners
The result: a mechanic types in Portuguese, and the manager sees the message in French - instantly. No waiting, no lost-in-translation moments.
Security at the database level
Every message is protected by Firestore security rules:
- Only authenticated users assigned to a job can read its messages
- Users can only create messages with their own senderId
- Role-based access ensures mechanics see their jobs, managers see all jobs
- Custom Claims RBAC prevents any UI bypass
Offline-First PWA Architecture
Mechanics work in underground garages, paint booths, and areas with no cellular signal. If the app doesn't work offline, it doesn't get used.
Three-layer strategy:
- **Firestore persistent cache** - All data is cached locally in IndexedDB. Reads hit cache first, syncing in the background when online.
- **Service worker shell caching** - The entire app shell (HTML, CSS, JS) is cached on first visit. Subsequent loads are instant, even with zero connectivity.
- **Optimistic UI** - When a mechanic updates a job status offline, the UI updates immediately with a yellow sync indicator. When connectivity returns, Firestore syncs automatically and the indicator turns green.
This approach meant mechanics could log job updates, add photos, and update statuses without ever thinking about their internet connection.
The Results
After 3 months of daily use:
- •65% admin time reduction - from 4+ hours/day of paper-based admin to under 1.5 hours
- •50+ jobs managed daily without a single piece of paper
- •200+ real-time messages daily with sub-second delivery
- •Zero lost jobs since deployment - every job is searchable, trackable, and auditable
- •Multi-language barriers eliminated - the team communicates freely across 5 languages
- •Mobile-first workflow - mechanics check and update jobs from their phones on the shop floor
Lessons Learned
- **Plan offline-first from day one.** I retrofitted offline support into GaragePRO and had to restructure several Firestore queries. On my next project (PontajPRO), I planned for offline from the start and the implementation was 3x faster.
- **Firestore cost optimisation matters.** My initial implementation read the entire messages collection on every update - 200+ reads per minute for active jobs. Implementing pagination and `limit()` queries reduced reads by 85%.
- **Role-based dashboards cut onboarding time.** Instead of one complex UI for everyone, each role sees only what they need. Mechanics get a simple job list with status buttons. Managers get analytics and scheduling. Office staff get invoicing and customer management.
- **Weekly demos build trust.** Every Friday I sent a Microsoft Teams walkthrough showing the week's progress. By launch day, the client already knew the software inside out - onboarding took hours, not days.
What Custom Garage Management Software Could Do for You
Every garage is different, but the core problems are universal: paper tracking, billing errors, communication gaps, and lack of visibility. A custom platform tailored to your workflow eliminates all of these.
---
*Running a garage or service business drowning in paperwork? Book a free discovery call to discuss how a custom management platform could work for your business. See all services and pricing.*
Need help building something similar?
I build production-grade web applications with transparent pricing and clear timelines.