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 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.