ELYN — Egyptian Multi-Vendor Fashion Marketplace
A multi-vendor fashion marketplace for Egypt: a customer storefront, a console per vendor, and a platform admin console — Arabic-first with full RTL.
Challenge
A multi-vendor marketplace is a full order of magnitude harder than a single shop, because every decision has three stakeholders: the customer, the vendor, and the platform.
Sizes and pricing: in fashion, price varies by size, not by colour — one product can carry a different price, discount, stock and colour set per size. Any data model that assumes one price per product breaks immediately.
Shipping: there is no single carrier. Each store delivers at its own fee, and some customers prefer to collect in person. That means a cart can only hold one store's items — otherwise, whose fee applies and who delivers?
Trust: the catalogue starts empty and customers don't know the vendors. That needs real reviews, a hard rule that only delivered buyers can review, and no way for a vendor to dress up their own page.
Financial integrity: the customer must never influence a price, the vendor must see their net in pounds, and the platform must see everything.
And above all of it: Arabic first. Not a translation — direction, numerals, plurals and grammar done properly.
Solution
• A size-first data model: every size (XS to 4XL) carries its own price, discount, stock and colours — plus a "one size" switch that hides sizes entirely for products that have none.
• A server-side cart bound to the customer, not the browser: it survives a device change, and any product deleted or deactivated drops out of it immediately. All money is computed server-side — the client sends the product and quantity, never the price.
• A one-store-per-cart rule: adding from a second store returns 409 with both stores named, and the UI asks the customer to ignore it or clear and replace.
• Delivery: free collection in person, or delivery at the store's own fee — no fixed carrier or payment lists.
• A five-stage order lifecycle (pending / preparing / delivering / delivered / cancelled) with enforced transitions: the customer may cancel in the first stage only; the vendor may cancel at any stage and move every status.
• Three consoles in one system: the customer storefront, the vendor console, and the platform admin console — separate guards, neither able to reach the other's data.
• Customer sign-in by phone + OTP with a bearer token, and an API key required on every API call.
• Reviews gated on an actually delivered purchase, with vendor replies and abuse hiding — and without publishing what the customer bought.
• Fast search on FULLTEXT indexes with relevance weighting (product name outranks description), and pre-computed rating averages so a category page never aggregates per card.
• Order exports to Excel and PDF that respect the active filters: Excel streams with no ceiling, and the PDF renders properly joined Arabic.
• Arabic-first design with logical spacing (inline-start) so the whole page mirrors, plus a complete English version.
• Every announcement bar, marketing line and category comes from the admin settings — the shop changes without a deploy.