01Overview
A two-sided insurance CRM for commercial trucking. Internal admins and independent agencies work in separate panels to quote, bind, endorse, bill, cancel and renew Auto Physical Damage and Motor Truck Cargo policies.
02Problem & solution
The challenge
Trucking insurance moves through many hand-offs — quote, bind, payment, mid-term changes, cancellation and renewal — each with a different party. Run through email and spreadsheets, policies stayed inactive after payment, renewals overlapped or left gaps, and endorsements disagreed with billing.
What we built
We put the whole policy lifecycle in one system, with an explicit state for every step. Admins keep oversight, and agencies quote and bind on their own with permissions set per module.
03Inside the product
- 01
Multi-step quoting
Applicant, coverages, operations, drivers, vehicles, losses and documents in one guided wizard.
- 02
Safe binding
Binding creates the policies and billing, then returns a payment link — and is safe to run twice.
- 03
Endorsements
Mid-term changes move from draft to bound, with linked policies kept in sync and every change highlighted.
- 04
Automated renewals
Policies are flagged ahead of expiry and renewal quotes are generated, with mismatches routed to a review queue.
- 05
Billing & commission
Payment status is tracked automatically, with overdue reminders and commission recorded per paid policy.
- 06
Agency workspace
Claims, reports, real-time chat, task boards and notifications, scoped to each agency's own book.
04Technology
- Laravel
- PHP
- Vue 3
- Inertia.js
- Tailwind CSS
- Firebase
- MySQL
05How we built it
We modelled the policy lifecycle as a state machine first, because the edge cases between cancel, endorse, renew and expire are where insurance software breaks. The older screens were migrated to Vue progressively, without a risky big-bang rewrite of a live system.