// case-study.md

Transport Management System
Enterprise logistics dispatch + GPS + costing on Vue 3 + Laravel 11

A full-stack TMS that runs an enterprise logistics operator’s transport arm end-to-end — from customer booking through dispatch, costing, live-GPS tracking, incident handling, and maintenance scheduling to invoice. Companion to the WMS mobile app and the customer-service CRM, sharing the same Sanctum auth and Spatie permission system.

client Confidential · logistics operator under NDA
last touched
role Full-Stack Developer
period 2024 — Present
status In production
scope ~68 models · ~99 controllers · ~98 migrations · ~324 pages
Vue 3 Laravel 11 Sanctum Spatie Permissions AG Grid Enterprise Velzon Admin DomPDF Live GPS MySQL
// receipts · tl;dr
domain models
~68
api controllers
~99
ui pages
~324
live GPS
// outcome · what changed
BEFORE

Dispatch ran on whiteboards + phone calls; status updates were a callback away.

AFTER

324-page coordinated dispatch system with live GPS on every active job.

BEFORE

Tariff edits were the most-feared change — reverberated through costing without notice.

AFTER

Costing engine guarded by integration tests against fixture bookings (planned hardening).

BEFORE

No real-time visibility into in-flight bookings; ops waited for end-of-day reports.

AFTER

Live position + on-page status for every active job; ops sees the fleet on one screen.

What it is

A platform the operator’s transport team runs every day: booking orders from customers, planning the dispatch across an internal fleet and external truckers, watching the trucks move on a live GPS map, logging incidents, generating costing & charge breakdowns, scheduling vehicle maintenance, and closing out the cycle by invoicing the customer.

Backend: Laravel 11 + MySQL + Sanctum + Spatie Permissions, with DomPDF for document generation and maatwebsite/excel for bulk exports. Frontend: Vue 3 (Vue CLI) on the Velzon admin template with AG Grid Enterprise, Vue Router, Vuex modules, i18n, AOS, and a live-GPS map view. ~68 models, ~99 controllers, ~98 migrations, and ~324 Vue pages across 20+ domain folders.

The bottleneck

Before the TMS, the transport operations team worked across multiple disconnected tools:

The team needed one system that owns the lifecycle from booking intake to invoice, with role-based access per operations team, live GPS on the same screen, and costing rules driven by data (rate cards, breakdowns, surcharges) instead of by Excel macros.

How I broke it down

What I built

Domain modules shipped:

TMS Booking + Live GPS dashboard — anonymized active-bookings table with status pills, live truck position cards, and per-row dispatch actions.
MOCKBooking + Live-GPS console · active-bookings table with status workflow, live truck position cards, fleet utilization stats. Customer + trucker names anonymized.

Tech

Results

domain models
~68
api controllers
~99
ui pages
~324
live GPS

The platform consolidated booking, dispatch, GPS, costing, charges, incidents, maintenance, and billing onto a single ledger — the transport ops team stopped switching between five tools to do one booking. Trucker partners, vehicle maintenance schedules, and approval workflows now live where the records they affect live. Live GPS and the incidents log gave dispatch a single screen for the day instead of three open browser tabs.

Specific business figures (volume per day, on-time-delivery rate, cost-per-booking reduction) stay with the client; happy to discuss specifics on request.

What I’d do again — and differently

Worked well:

Would tighten: