Client · 2026

Aspire Ride

Arabic-first booking site for a chauffeur service in Saudi Arabia

Live

Overview

  • What: an Arabic-first marketing and booking website for a luxury chauffeur and limousine service in Saudi Arabia, with an admin panel the client runs the business from.
  • Services covered: hourly chauffeur bookings, airport transfers and Dammam to Bahrain trips, across all cities of the Kingdom; corporate and event transfers as quote-only services.
  • Live: deployed at aspireride.com, with every price shown VAT-inclusive.

This was freelance work for a client in Saudi Arabia. Visitors browse the fleet by category or by brand, pick a service and a car, see the tax-inclusive price and send the booking on WhatsApp; the team gets an email and manages content, fleet, prices, bookings and the blog in a Filament admin. Arabic is the default language at the root and English lives under /en.

Architecture

 visitor  (ar at /, en at /en)
    |
    v
 service --> car --> details     Livewire wizard,
    |                            validated on the server
    v
 PricingCalculator               integer halalas, VAT once,
    |                            25 tariff cases under test
    +--> Reservation AR-2026-…   --> WhatsApp + admin email
    +--> QuoteRequest AQ-…       (no fixed price)
    |
 Filament admin (2FA)            fleet, rates, VAT, bookings,
                                 blog, menus, redirects
fig. 01 — Aspire Ride architecture

Highlights

  • Arabic-first marketing and booking site for a chauffeur service across Saudi Arabia: Arabic at the root, English under /en, text direction set from the locale.
  • Three-step booking (service, car, details) with the price computed on the server in integer halalas and VAT applied once; the result goes to WhatsApp and a queued admin email, and trips without a fixed price become quote requests.
  • Filament admin for content, fleet, prices, VAT, bookings, quote requests, blog, menus and redirects, behind two-factor sign-in.
  • 817 Pest tests and 245 Playwright tests across five browser set-ups at the pre-launch audit; Larastan at level 6.
  • Released as a locally built, checksummed package for shared hosting without Node, checked by a read-only script after every deploy.

What I learned

Money is an integer problem. Every price is stored and computed in halalas, VAT is applied once to the trip total, and the browser never sends a price: the server recomputes it from the chosen service, car and city and snapshots it on the booking, so a later tariff change cannot alter an old reservation. The tariff’s 25 required cases live as unit tests, so a pricing mistake fails a test before it reaches a customer.

A booking flow without payment still needs the rigour of one. The three-step wizard validates every field group on the server, rate-limits and honeypots the form, and hands the result to WhatsApp and a queued admin email instead of a checkout. The defects that mattered, a long address pushing the price breakdown out of the WhatsApp message and a Dammam to Bahrain arrow pointing the wrong way in Arabic, came from a review that read the messages as a customer would; each one became a regression test.

Arabic-first means defaults, not translations. Arabic is served at the root with English under /en, the document direction comes from the locale, and the layout uses logical CSS properties so nothing is mirrored by hand. The expensive part was the font: IBM Plex Sans Arabic is split into core and rare files with unicode-range, so a page downloads the rare glyphs only if its text uses one. A key-parity script keeps both languages complete, but it is not a native review, so wording still went back to the client for approval.

Shared hosting shapes the architecture. The server has no Node, so a release is built locally, packaged with checksums and checked by a read-only script after every deploy. Security headers, a nonce-based CSP, two-factor sign-in for the admin and a canonical-host redirect are code with tests behind them, and a pre-launch audit still found 87 issues, 45 of which were fixed before go-live. An audit with fresh eyes belongs in the plan, not after it.