Case Studies

AI Enabled Automotive Export Used Vehicle Brokerage

Location:
Japan
Type:
Custom Software — Web Application + Admin Panel

100%

of bids and invoices centralized (from ~0%)

~90%

reduction in manual FX calculation steps

100%

of payment confirmations auto-advance the workflow

3 roles

customer, agent, and accountant on one platform

Overview

Client is a Japan-based used-vehicle export brokerage that helps international buyers — individuals and importer companies — purchase vehicles sourced from Japanese auto auctions, third-party sellers, and its own inventory. Customers are based in destination markets such as the UAE and Kenya. The business model centers on three coordinated roles: a customer submits a bid or inquiry, an agent manages the relationship and places the winning bid at auction, and an accountant handles invoicing, payment confirmation, and financial tracking, with every transaction crossing Japanese Yen and US Dollars.

The challenge

Before the platform, Client ran its brokerage operation through manual, disconnected channels. Every bid request, invoice, and shipment update depended on someone remembering to follow up over chat or email, with no single system tying a customer's inquiry to the vehicle, the invoice, the payment, and the shipment that followed from it.

  • Bid, invoice, and shipment coordination handled manually across chat apps and spreadsheets
  • No self-service way for customers to browse inventory or submit a bid request
  • No unified record linking a bid to its invoice, payment, and shipment status
  • Manual, error-prone conversion between Japanese Yen and US Dollars on every quote and invoice
  • Payment confirmation tracked informally, with no clear record of who approved what and when
  • No role-based system access — agents and accountants had no dedicated tools of their own
  • Difficult to scale past a handful of concurrent customers without adding headcount just for coordination
  • Customers had no visibility into where their bid stood or when their vehicle would ship
  • Lost-bid credits had to be tracked and applied manually, customer by customer

Objectives

  • Give customers a self-service platform to browse vehicles and submit bid requests or inquiries directly
  • Track every bid and inquiry through a clear, auditable status pipeline — from submission to payment to shipment
  • Give agents and accountants dedicated, role-based tools instead of routing everything through informal channels
  • Handle every financial transaction in both JPY and USD with a consistent, auditable exchange rate

Success criteria

  • Every bid, invoice, and shipment tracked in one place, from submission through completion
  • Agents and accountants each have role-based views showing exactly what they're responsible for, with financials hidden from agents
  • Customers can see live status updates and message the team directly through in-app chat
  • Every invoice reflects an accurate JPY/USD amount, using a consistently snapshotted exchange rate
  • Every won bid automatically splits into a 30% deposit and 70% remaining invoice
  • A lost bid's deposit converts automatically into account credit and applies oldest-first to the next invoice
  • Confirming a deposit or remaining invoice automatically advances the linked bid or inquiry's status
  • Overdue invoices surface automatically on the dashboard the moment they pass due date
  • Landed cost (auction price, tax, fees, freight) calculated automatically by destination

Our solution

We built Client as a Laravel-based platform pairing a customer-facing application with a role-based Filament admin panel, so every participant — customer, agent, and accountant — works from the same underlying data. At its core is a set of explicit status pipelines: bid requests move from submission through review, auction placement, and a won/lost outcome; vehicle inquiries move from a quote through confirmation, invoicing, payment, and shipping.

Bid & Inquiry Lifecycle Engine

Every bid request and vehicle inquiry moves through a defined status pipeline, auto-creating invoices and notifying the assigned accountant at the right points.

Dual-Currency Invoicing

Every invoice carries both a JPY amount and a snapshotted FX rate, so the USD equivalent stays accurate even as the live exchange rate changes.

Real-Time Customer Chat

A dedicated conversation per customer, powered by WebSockets, carries both human messages and automatic system notifications.

Role-Based Admin Panel

A single back office gives Admins, Agents, and Accountants exactly the tools and visibility their role needs.

AuctionBot (AI Search Assistant)

Natural-language vehicle search backed by OpenAI and live auction data — market-price lookups, similar-car suggestions, deal alerts, and side-by-side comparisons, all through conversation instead of filters.

Key capabilities

  • Automated cost calculator — auction price, tax, fees, and freight computed from configurable rate tables by destination
  • Automatic credit handling — a lost bid's advance payment becomes account credit, applied oldest-first to the next invoice
  • Accountant workload balancing — invoicing an inquiry requires assigning an accountant, with workload visible on the dashboard
  • Signed, time-limited links for chat and invoice attachments, instead of permanently public URLs
  • Auction inventory sync from an external auction data provider, kept separate from manually managed listings

Architecture & tech stack

The solution was designed using a scalable modular monolith, API-first architecture, so the customer-facing SPA, admin panel, and real-time chat all consume the same underlying domain logic.

  • Frontend: Decoupled SPA (separate repository, consumes the REST API)
  • Backend: Laravel 12 (PHP 8.4)
  • Database: MySQL / PostgreSQL (production), SQLite (local development)
  • APIs: REST (Sanctum tokens) + WebSocket (Reverb) for real-time chat
  • Authentication: Sanctum (customer API), session guard + Spatie Shield/Permission (admin RBAC)
  • AI/ML: OpenAI API (function-calling + RAG) — powers AuctionBot
  • Monitoring: Laravel Pail (log tailing)
FrontendDecoupled SPA (separate repository)
BackendLaravel 12, PHP 8.4
DatabaseMySQL / PostgreSQL (prod), SQLite (dev)
APIsREST (Sanctum) + WebSocket (Reverb)
AI / MLOpenAI API (function-calling + RAG) — powers AuctionBot
DevOpsComposer/NPM, Docker Compose (Meilisearch, Redis), Git
SecuritySpatie Permission + Filament Shield, Sanctum, signed URLs
TestingPestPHP (feature + unit tests)

Key features

End-to-End Bid & Invoice Lifecycle

Every bid request automatically carries its status from submission through to a won/lost outcome, auto-generating advance and remaining invoices at the right points and notifying the assigned accountant.

Dual-Currency Financials with Credit Handling

All amounts are tracked in JPY and USD together, with the exchange rate snapshotted at the moment of each transaction. A lost bid's advance payment is automatically converted into account credit and applied oldest-first to the customer's next invoice.

Real-Time Chat with System Notifications

Every customer has one ongoing conversation with the team, delivered instantly over WebSockets, with status changes posted automatically as system messages.

AuctionBot — Conversational Vehicle Search

Customers can describe what they want in plain language instead of filling out filter forms. Built on OpenAI with retrieval-augmented search over live auction data, it benchmarks prices, finds comparable cars, and flags good deals starting or ending soon.

Results

The implementation replaced ad hoc, manual coordination with a structured, auditable system across every stage of the customer journey.

AreaBeforeAfterImprovement
Bid & Invoice VisibilityScattered across chat threads and spreadsheetsSingle system of record with full status history100% centralized (from ~0%)
Currency HandlingManual FX conversion on every quote and invoiceAutomatic JPY/USD calculation with a snapshotted exchange rate~90% fewer manual steps
Payment-to-Next-Step HandoffManual coordination after each payment confirmationInvoice confirmation automatically advances the bid/inquiry status100% automated
Role-Based AccessNo dedicated system access for agents or accountantsSeparate role-based views for Admin, Agent, and Accountant100% of roles covered
Customer CommunicationAd hoc messaging across external channelsReal-time, in-app chat tied to each customer record~70% faster response (target)

Faster bid-to-invoice turnaround

Accountants create and confirm invoices directly against a tracked bid or inquiry, instead of coordinating over chat.

Fewer financial errors

Dual-currency amounts and exchange rates are calculated and recorded automatically instead of by hand.

Better customer experience

Customers get real-time status visibility and in-app chat instead of scattered email and WhatsApp threads.

Built to scale

The platform can onboard more agents, accountants, and customers without adding manual coordination overhead.

Challenges & how we solved them

  • Unifying two customer funnels — auction bid requests and direct vehicle inquiries — under one invoicing and accountant-assignment system without duplicating logic
  • Keeping dual-currency amounts consistent through a long-running workflow, where the exchange rate must stay fixed to the original transaction even as the live rate changes
  • Automating status transitions safely, so that confirming an invoice advances its linked bid or inquiry without creating conflicting manual overrides

Each workflow — bid requests, vehicle inquiries, and invoices — was modeled as its own explicit state machine with a single source of truth for its allowed transitions. Cross-cutting effects, like an invoice confirmation advancing a linked inquiry to Paid, were implemented as one-way triggers from the transaction record to the workflow record, never the reverse — so there's always exactly one place that decides what happens next.

Security & compliance

  • Role-based access control (Spatie Laravel Permission + Filament Shield)
  • Separate authentication guards for customers (Sanctum tokens) and admin staff (session-based)
  • Signed, time-limited URLs for chat and invoice attachments, instead of permanently public files
  • No payment gateway or card data ever touches the platform — all payments happen outside the system, with proof uploaded for manual accountant confirmation
  • Role-scoped admin resources — agents cannot see invoice financials, accountants cannot see bid-approval controls
  • Customer approval gating — new accounts must be email-verified and admin-approved before submitting a bid
  • No PCI-DSS scope, since the platform never processes card payments directly

Scalability & roadmap

  • Insurance quotes, status tracking, and documentation for shipped vehicles
  • Scheduled, automated syncing of auction vehicle data from the external auction provider
  • A hybrid mobile app for customers, already scoped as its own milestone
  • Deeper integration with freight and insurance providers for real-time quotes
  • Extending the existing admin dashboards with exportable reports
  • Support for additional destination markets and multi-language customer-facing pages
  • Expanding AuctionBot with additional skills beyond search, pricing, and comparisons

Why the client chose us

  • Deep experience turning multi-party financial workflows into clear, testable state machines
  • Familiarity with cross-border trade operations — multi-currency accounting, financial hand-offs, and role-based back offices
  • Strong Laravel/Filament engineering, from real-time WebSocket messaging to PDF generation and third-party API integration
  • A security-conscious approach to role separation and access control from day one
  • Milestone-based delivery, with each phase shipped and validated before the next began
  • Applied AI expertise — built AuctionBot, an OpenAI-powered RAG assistant with function-calling over live auction data

Client needed to turn a manual, chat-and-spreadsheet-driven brokerage operation into a system that tracks every bid, invoice, payment, and shipment in one place, across two currencies and three distinct roles. The platform replaces that manual coordination with an explicit, auditable workflow: customers submit bids and inquiries directly, agents and accountants each get the tools their role needs, and financial and shipping status advance automatically as the underlying work gets done.

Laravel 12PHP 8.4MySQL / PostgreSQLLaravel ReverbLaravel SanctumFilament 3OpenAI APIPestPHP