- Problem
- A live Moroccan marketplace for kaftans and djellabas from trusted ateliers. Three different roles — buyer, seller, and platform administration — all working on the same products, orders, and accounts.
- Weakness found
- The initial ask was "a storefront". Built literally, seller operations and admin permissions would have lived in the same code, which makes every change to the buying experience a risk to the admin panel.
Engineering detail
- Constraints
- A private server with no operations team, a setup that has to be repeatable rather than undocumented manual steps, and full Arabic support with correct RTL direction.
- My role
- Architecture, the backend and API, the storefront, the separation of seller and admin permissions, and the deployment setup.
- Architecture
- A Laravel backend owns products, accounts, and order workflows and exposes them over an API. A Next.js storefront handles search, categories, product discovery, cart, and checkout. Seller and administration areas carry separate responsibilities and permissions. Docker containers deploy it on a private server.
- Decisions and trade-offs
- Separating the storefront from backend logic lets the buyer experience evolve without mixing it into administration concerns. Role separation limits each participant to the data and actions relevant to them. Container deployment makes service setup repeatable. The trade-off: two deployables instead of one — higher deployment cost in exchange for clearer isolation and lower-risk changes.
- Stack
- Laravel · Next.js · Docker
- Supported result
- The product is live and publicly inspectable at beldify.com. I publish no sales figures, seller counts, or conversion rates — the available evidence is the product itself.