Skip to content
All work

7 languages · Retail · 2025

Femmelady

A multilingual storefront and the Directus backend underneath it — native i18n across every collection, media translated alongside its content, and a permissions model built to survive a growing team.

Product page with variant selection, in English
Role
Data model, permissions, backend, storefront, deployment
Year
2025
Languages
EnglishDutchFrenchArabicJapaneseKoreanChinese
Stack
DirectusReact Router 7RedisBunny CDNCloudflare R2GCP Cloud RunDocker

Seven languages including right-to-left Arabic, across products, categories, reviews and every static page — plus media that has to differ per language. Bolt-on translation breaks at this size.

  1. Translation as part of the model

    Every translatable collection uses Directus' native i18n rather than duplicated fields, so a new language is configuration, not a migration.

  2. Media that follows the language

    Assets link to their translations, so a Japanese product page serves Japanese-specific imagery instead of falling back to English.

  3. Relational modelling done once

    M2M, O2M and M2O relationships throughout, kept normalised so reporting and new frontends don't need a rewrite.

  4. Access and abuse control

    Roles and policies separate public, customer and admin. Redis rate-limits password reset; Turnstile guards registration and login.

Product listing with faceted filtering by category, price, brand and rating
The same listing in Arabic, with the entire layout mirrored right to left
Product detail page in Arabic
Access policies in the Directus admin
The full collection list behind the storefront