One platform for the full roadside-assistance lifecycle: selling a membership, taking payment, dispatching a tow, tracking the job live and paying the provider — with separate portals for admins, dispatchers, agencies and towing companies.
02Problem & solution
The challenge
Agencies sell memberships, dispatchers take the call, independent towing companies do the work and finance pays everyone. Run on phone calls, spreadsheets and disconnected billing, that meant wrong coverage, double-assigned trucks, expired insurance and unpaid jobs.
What we built
We built role-based portals around a single dispatch state machine, map-based provider matching and a payments ledger, so membership, dispatch and payouts share one record instead of separate tools.
03Inside the product
01
Membership wizard
Plan, member, vehicles, drivers, documents and checkout — coverage goes active only once payment succeeds.
02
Verified dispatch
Dispatchers confirm the member, vehicle and driver before a request can continue.
03
Smart provider matching
Only approved, insured companies with a free truck and driver inside their service radius are offered the job.
04
Live tracking
Members watch the truck arrive in the app and confirm completion with a one-time code.
Invoices from each company's rate card, with payouts to towing companies and agencies.
04Technology
Laravel
PHP
Vue 3
Inertia.js
MySQL
Stripe
Google Maps
Firebase
Job lifecycle
Membership
Verified call
Provider match
Live job
Invoice
Payout
05How we built it
Business rules live in services, not screens. Writes that must not race use transactions and row locks, so two dispatchers can never take the same job, and payment retries can never charge or pay twice.
Want something like this?
Tell us what you're building — a senior engineer will reply with next steps.