Case study · Motobro
A workshop management system and website for an independent motorcycle service.
From vehicle intake to invoicing, the whole operation now runs in one custom-built system and a matching public website. The goal: the mechanic spends more time on the bikes and less on paperwork, and customers always see where their motorcycle is.
- Client
- Motobro, independent motorcycle service
- Scope
- Workshop management web app and public website
- Technology
- Laravel 12, MySQL, Billingo V3 API
- Website
- motobro.hu
In short
Motobro is an independent motorcycle service whose entire operation, from intake to invoicing, we organised into one custom-built system and a matching public website.
The project has two interlinked parts: the rendszer.motobro.hu workshop management app and the motobro.hu website.
The client and the challenge
Motobro’s master mechanic has worked in his own workshop with his own tools since 2019, mainly on Japanese and German motorcycles over 125 cc. An independent service like this has to do the same tasks as a larger workshop, but with one person’s time:
- recording the bike and the fault at intake, then tracking the work per customer and per motorcycle;
- quotes, parts and labour calculation, and getting approval;
- keeping the customer informed and handing over the finished bike;
- invoicing, and tracking what has been paid;
- a business overview showing how much each job earned.
Until then, these steps lived in separate tools and in his head. The task was to bring them into one place, built around the mechanic’s daily work, rather than working around a generic business application.
The solution: two interfaces for two audiences
We built two separate interfaces because they serve two different audiences:
| motobro.hu | rendszer.motobro.hu | |
|---|---|---|
| For | Prospective customers | The mechanic, reception, the accountant and existing customers |
| Purpose | Building trust, presenting services, getting in touch | The entire workshop process, from job card to invoice |
| Built as | Static multi-page website | Laravel web application with an SQL database |
The two are connected: the website’s “Customer login” button leads straight to the system’s login page. We deliberately didn’t build a mobile app: the system is a responsive web app, so the same thing works on phone, tablet and computer, with nothing to install.
The workshop management system
At the heart of the system is the digital job card. Every job moves through a 19-step status flow, from the intake protocol through diagnostics, quote and repair to handover and invoicing, and every status change is logged.
Fast intake
Customer and vehicle intake with VIN, engine number, displacement and inspection expiry, plus an intake protocol with digital signature.
Versioned quotes
Customers can accept or reject items one by one, and approval can happen via a token-protected link without logging in.
Stock and calendar
Parts catalogue, inventory, suppliers, expenses and a calendar with conflict checking.
Automatic notifications
Template-based emails to the customer tied to 24 events, such as quote ready, repair done or payment reminder.
One-click invoicing
An invoice or pro forma is generated from the finished job card via the Billingo V3 API, with partner matching and cancellation support.
Customer portal
Customers see their bikes and jobs, start service requests, approve quotes and message the workshop inside the system. Email replies are routed into the right conversation via IMAP or webhook.
Roles and reporting
Everyone sees and does only what their job requires. Customer registrations are approved by the workshop, and the system flags duplicates.
| Role | What they see and do |
|---|---|
| Owner | Everything, including purchase prices, reports and profitability |
| Reception | Intake, job cards, calendar, customer communication |
| Mechanic | Own jobs, time log, diagnostics, parts used |
| Accountant | Invoices, expenses, reports |
| Customer | Only their own data and jobs |
In one place, the owner sees revenue, the parts and labour split, profit per job, top customers and services, ageing of unpaid invoices, mechanic performance and seasonality.
The public website
motobro.hu is a dark, premium-feeling site with orange accents that conveys the workshop’s atmosphere and the master’s expertise. It has five pages:
- Services: nine services in separate blocks, from general servicing through engine rebuilds and wheel lacing to custom requests, based on the workshop’s own text and adapted to the site’s tone.
- About: the master’s real story, from his first sports bike as a child to his own workshop, because for a service shop trust is the strongest argument.
- Videos: a live embedded feed from the Facebook page, with featured videos below in a custom card design.
- Contact: contact details, a map and a server-side contact form with spam protection and input validation. It doesn’t open an email client, and feedback stays on the page.
The site is plain HTML, CSS and JavaScript with no build step. It works well on desktop, tablet and phone, with meta descriptions and AutoRepair structured data for SEO.
Technology and hosting
The technology was shaped by the hosting: the system runs on standard shared (cPanel) hosting, so production needs no VPS, Redis, Docker or Node.
| Layer | Solution |
|---|---|
| Application | Laravel 12, PHP 8.2+ |
| Database | MySQL / MariaDB |
| Interface | Blade templates, custom CSS and JavaScript |
| Authentication | Two separate login and permission scopes (staff, customers), two-factor authentication |
| Invoicing | Billingo V3 API |
| Server-side PDF generation (quotes, intake sheets) | |
| Template-based notifications, incoming replies via IMAP | |
| Scheduled tasks | cron: payment and service reminders, daily backup |
| Tests | PHPUnit suite covering permissions, job card lifecycle, invoicing and customer data separation |
A step-by-step production deployment guide was also delivered, along with four role-specific user manuals: owner and reception, mechanic, accountant and customer portal.
Security and privacy
The system handles personal and financial data, so protection was built into the structure rather than bolted on afterwards.
- Central permission checks: every action passes through a shared authorisation layer, and roles and permissions are configurable from the database.
- Customer data separation: customers can’t access another customer’s data even by changing an ID or URL, and an automated test verifies this.
- Purchase price protection: the
cost_pricefield is never even fetched by invoicing queries, so structurally it can’t end up on an invoice or reach any role other than the owner. - Two-factor login for staff, and an audit log of sensitive actions: who, what, when and from which IP.
- Daily automatic backup via the hosting scheduler.
- Explicit consent for customer registration, with accounts approved by the workshop.
Lessons learned
Four things from this project that I take into every similar build.
Hosting determines the technology
The limits of shared hosting (no queue worker, no websockets) and cron-based scheduling were factored in from the start, so nothing had to be redesigned at launch.
A role matrix up front saves many fixes later
Because permissions are managed centrally in the database, a new role or permission can be added without changing code.
Real content beats flashy content
The strongest part of the website turned out to be the master’s own story and real service descriptions. Photos and videos are best filled in from the workshop’s own material.
Up-to-date dependencies matter
At deployment it turned out that every available Laravel 11 version had a known security advisory, so Composer blocked it. That’s why the system runs on the supported Laravel 12.
Next steps
- Online booking and a graphical weekly calendar view.
- SMS notifications, a QR code on job cards, barcodes for parts.
- Automatic import of Facebook videos.
- Excel export for the accountant, and backups to remote storage.
Does your business still run on separate tools and memory?
If your daily processes are scattered across spreadsheets, emails and your head, let’s see how they can become one system that fits the way you work, not the other way round.