Bastaoui Parfums: A Trilingual Storefront that Checks Out on WhatsApp
A storefront for a Moroccan perfume brand: a catalogue, product pages, and an order flow that ends in a prefilled WhatsApp message instead of a checkout page.
Next.js 14TailwindGSAPi18n

Context
A small brand that already sells over WhatsApp. Adding a payment gateway would have added fees, verification, and failure modes to a sales path that already worked. And the customer here reads Arabic, Darija, or English — and Darija is not a mechanical translation of Arabic.
Scope I disclose publicly
- A Next.js 14 App Router storefront, with the language in the path and text direction resolved on the server per locale.
- Three separate dictionaries — Arabic, Darija, and English — rather than two with one derived from the other.
- A product catalogue written as TypeScript data inside the repository: no database and no CMS.
- An order flow that collects details in the browser, then opens a WhatsApp message prefilled with the order.
- One reusable reveal component wrapping the scroll animation, instead of motion written per page.
- An asset-path helper that applies the deployment prefix, because the image optimiser does not apply it behind a reverse proxy on a sub-path.
Decisions and trade-offs
- No payment gateway: the sale already happens on WhatsApp, so the product carries the customer there instead of building a checkout nobody asked for.
- Darija as a full locale, not an option derived from Arabic.
- A catalogue in code, which suits ten fixed products better than a full content system would.
- One motion behaviour defined in one component, so it stays consistent across the site and changes in one place.
- The explicit trade-off: any product change needs a code change and a deploy — fine for a fixed catalogue, expensive if it grows.
The live storefront is published and can be browsed: switch between its three languages and follow the order flow as far as the WhatsApp handoff.
Check the public sourceDisclosure: I publish no sales or order figures. I also do not present an admin panel for this project: one was specified and never built, and the site today is a storefront only.
