Skip to content
ALI HAITHAM·TECH·responds in <1h
  • Homestart here
  • Workcase studies, projects
  • Serviceswhat I will build for you
  • Writingessays, series
  • Traincourses, labs, cohorts
  • Aboutthe engineer behind this site
Sign inStart a project
ALI HAITHAM · TECH
  • Home↗
  • Work↗
  • Services↗
  • Writing↗
  • Train↗
  • About↗
Sign inStart a project
Online
ALI HAITHAM·TECH

Engineering studio. Damascus, GMT+3.

aliyosef.online

Studio

  • Work
  • Writing
  • Training
  • About
  • Contact me

Portal

  • Sign in
  • Open a ticket
  • Track project
  • My account

Resources

  • Docs
  • Status
  • Changelog
  • Brand kit
  • Privacy
  • Terms

Newsletter

Field notes and tech news. Weekly. No fluff.

Free. Unsubscribe anytime.

Find me elsewhere
© 2026 Ali Haitham Yosef. All rights reserved.Hand-built in React 19. No frameworks of frameworks.Last deployed · 2026-05-08All systems operational
Case 062024Full-stack Engineer

Caravan Cargo

Bilingual corporate site for an international shipping company. Quote request flow, branch locator, Laravel CMS that handles English and Arabic editing in one panel.

RoleFull-stack Engineer
Year2024
StackLaravel, Tailwind, Alpine.js
Livecaravan-cargo.co↗
Overview

About the project.

Caravan Cargo is an international shipping company that handles freight across several countries and needed a corporate site that could carry the full operation: services, branches, and a real quote-request flow. The build runs on Laravel with a single editing panel where the team writes English and Arabic side by side. The branch locator and quote form push directly into the sales inbox so leads stop falling through the cracks between marketing and operations.

Challenge

What we walked into.

An international shipping company needed a corporate site that could carry the full operation: services, branches, a real quote-request flow — and accept bilingual ar/en editing in one panel.

Approach

What we did.

Laravel CMS with paired ar/en fields, Tailwind front, a quote form that pushes directly into the sales inbox with structured fields (origin, destination, weight, type). Branch locator with map integration.

Outcome

What it became.

Bilingual content under one panel. Lead form routes to sales without spreadsheet middleman.

IndustryInternational shipping · Logistics
TypeCorporate site + quote pipeline + branch locator
Timeline3 months · v1
TeamSolo · full-stack
Ownership

My role on this project.

Solo · end-to-end. Laravel back end, Tailwind front, branch-locator map, quote-form pipeline. The client supplied content and branch data; everything else is mine.

  • 01

    Full-stack engineer

    Laravel + Blade + Alpine. Bilingual content model with Spatie/translatable.

  • 02

    Quote pipeline designer

    Structured quote form (origin → destination → weight → service type) that routes into the sales inbox with parsed fields, not free text.

  • 03

    Map + locator engineer

    Branch locator with OpenStreetMap tiles (no Google Maps bill), KSA-aware search.

In production

The numbers that matter.

  • <1.5s4G load timeHome + services + locator pages. Mobile-tested in KSA.
  • 12+Branches on locatorEach with hours, contact, services, map pin.
  • BilingualSingle panelEditors write ar/en in one form, no parallel posts.
  • 0Manual lead handoffQuote form pushes structured payload straight to sales inbox.
Why this was hard

What was actually broken.

Shipping is a high-touch sales process — the quote-request form is the front door to the entire business. The previous site treated it as an afterthought (a contact form that dumped free text into a shared mailbox). Sales team had to read the message, ask for missing fields by email, then enter the lead into their system. The brief: a quote form that captures every field sales needs to price the job, in the language the customer is comfortable in.

Engineering challenges

The hard surface area.

  • 01Quote form must capture 8+ structured fields without feeling like a tax return.
  • 02Branch locator that loads fast on mobile without paying Google Maps API fees per visit.
  • 03Bilingual editing flow that does not create two sets of branches to drift apart.
  • 04Sales inbox routing that respects which branch is closest to the origin (KSA Eastern vs Western).
Hard problems solved

Engineering wins worth naming.

01

Quote form completion rate

Progressive disclosure: 3 fields at first (origin, destination, weight), more revealed as user fills the previous. Completion rate held above 40% in early review.

02

OpenStreetMap over Google

Leaflet + OSM tiles. Saves $500-$1k/month at scale. Geocoding via Nominatim with a Redis cache to respect their rate limit.

System architecture

How the system is wired.

01 — Edge

Edge tier

CloudflareCDN · DNSKSA + UAE edges
02 — App

Application tier

Laravel 11PHP 8.3 · Blade · AlpineCMS + quote pipeline + locator
Leaflet + OSMClient-side mapBranch locator; cached geocoding via server-side proxy
03 — Data

Data tier

MySQL 8Bilingual JSON columnsBranches, services, content blocks
Redis 7Cache + geocodingNominatim response cache (24h TTL)
Why this stack

The decisions behind each choice.

Laravel + Spatie/translatable

  • Single bilingual editing surface in Filament. Branches, services, pages — all share the same translation pattern.
  • Lead routing logic (closest branch by origin region) sits naturally in a service class, not in JavaScript on the form.

OpenStreetMap over Google Maps

  • No per-call pricing means no surprise bill if the locator becomes popular.
  • Tiles look honest, not over-polished — fits a shipping company that ships actual physical things.
Lessons learned

What the build taught us.

  • Structured forms beat free-text contact forms by an order of magnitude in conversion-to-quote.
  • OSM is the right default for any business map that does not need turn-by-turn navigation. Switch to Google when you need their data — not when you assume you need their data.
Visuals

From the project.

Continue reading
Previous caseBalomaNext caseConcetto Labs
Build with us

Want something like this?

I take on a small number of engagements each quarter. Tell me what you have in mind.

Start the conversation→