← All case studies

Business solutions & enterprise architecture · Malaysia & Singapore

TLMS — logistics platform (Niaga Prestasi)

Sevendyne built a remote Laravel/Vue engineering team for Niaga Prestasi, then that team worked with their ops leads to design and ship TLMS — A-to-Z logistics across Malaysia and Singapore, from dispatch and warehouse handoffs to billing and cross-border freight tracking.

Technical one-pager for prospects: Open brief → Print to PDF

3-minute CTO brief

We staffed a dedicated Laravel pod for Niaga Prestasi and placed them into the client’s delivery rhythm — standups with ops leads, PR reviews, and pairing on schema changes. Field apps were hammering the MySQL core synchronously — deadlocks on shipment writes, sync backlogs, dropped packets. The team moved ingestion to Laravel queue workers with idempotent job keys and row-level shipment locks. Throughput went up; deadlocks went to zero.

  • Complexity: Async ingestion, idempotency, cross-border consistency
  • Before: Sync API → DB convoy on peak freight hours
  • After: Queue workers · thousands of live shipments/day

Async backend · queue workers · data integrity

Architecture — field to core

TLMS Laravel architecture

Mobile and desktop field clients POST lightweight events to an API edge. The API validates, enqueues, and returns 202 Accepted — workers own the heavy joins, billing hooks, and cross-border status propagation.

Why queues instead of synchronous writes

OptionProblem on TLMS loadOur approach
Sync REST → MySQLRow locks on shipments during batch scansRedis/database queue + single-writer jobs per shipment ID
Dual-write field + coreDrift when Malaysia hub ahead of SingaporeEvent log with monotonic sequence per shipment
Vue SPA direct to DBNo back-pressure on spikesAPI rate limits + worker autoscale on queue depth

Code shape (representative)

// API: never block on billing + telemetry
ShipmentScanController::store(Request $req) {
  $payload = $req->validated();
  ProcessShipmentScan::dispatch($payload)
    ->onQueue('scans')
    ->afterCommit();
  return response()->json(['status' => 'queued'], 202);
}

// Worker: idempotent per scan_uuid
public function handle() {
  DB::transaction(function () {
    Shipment::whereKey($this->id)->lockForUpdate();
    // apply scan, emit domain events, enqueue billing
  });
}
Deadlock fix: replaced multi-table updates in one HTTP request with ordered lock acquisition inside jobs — always shipments then legs then charges.

Production metrics

  • Thousands of active multi-point shipments processed daily post-migration.
  • 100% reduction in MySQL deadlock errors on scan ingestion (monitored 90 days).
  • End-to-end telemetry across web admin, driver mobile, and desktop sync clients.

Download technical brief (PDF) Schedule a technical review