WDI Marketplace

Three WDI app screens - product, home feed and order tracking

CASE STUDY · 2026

WDI Marketplace

A multi-vendor e-commerce platform for the UAE, delivered as one product across a Next.js storefront, a Flutter app and an Odoo 18 REST API.

My role
Engineering lead and full-stack engineer. I took over in March 2026 and led delivery through handover in July 2026, hands-on across web, API and mobile.
Platforms
Web · Android · iOS
  • Next.js 15

  • React 19

  • TypeScript

  • Zustand

  • Flutter

  • Dart

  • Odoo 18

  • Python

  • PostgreSQL

  • Docker

  • GitHub Actions

  • Playwright

THE STORY

From problem to production.

The problem

Small UAE sellers need a marketplace presence without running their own e-commerce stack. The operator needs seller onboarding with KYC, product moderation, order splitting across sellers, payouts and returns. Buyers expect one cart, one checkout and order tracking, however many stores they buy from, in English or Arabic.

What I built

One Odoo 18 backend owns catalog, orders, stock, invoicing and identity. Two clients sit on one API contract: a Next.js 15 storefront with English and Arabic (RTL) routes, and a Flutter app.

  • Buyers: browse, search and wishlist; email OTP sign-up; one cart across many sellers; checkout with address, shipping, payment and review; order tracking, returns and ratings.
  • Sellers: a four-step store wizard with KYC documents and payout method, product listing with moderation, fulfilment, earnings and payouts.
  • Admin: KYC approval, product approval queue, payouts and returns oversight.
  • AI store assistant: a storefront chat grounded in the live catalog, streamed over Server-Sent Events.

I worked with the Flutter and Odoo developers on scope, priorities and code review, ran audit and fix rounds on auth, checkout correctness and security, and handed over all three codebases with API docs and test suites.

WDI architecture - Next.js storefront and Flutter app on one Odoo 18 REST API
WDI architecture - Next.js storefront and Flutter app on one Odoo 18 REST API

Key engineering decisions

  1. Odoo as the domain core, with a thin REST layer. About 210 routes across 24 controllers. Orders, stock, invoicing and accounting already worked, so the effort went into the API contract and security.
  2. Each store is its own company. Tenant isolation, per-store accounting and order splitting come from Odoo's multi-company model, backed by record rules and ownership checks in every controller.
  3. One response envelope with discrete error codes. Both clients branch on codes such as TOKEN_EXPIRED, OUT_OF_STOCK and PRICES_CHANGED, which made token refresh and checkout recovery deterministic.
  4. Rotating refresh tokens with reuse detection. A reused token is treated as theft and revokes every session, so "log out everywhere" and password changes take effect immediately.
  5. A server-side, grounded AI assistant. The prompt is built from the live catalog, cached, and bounded in size. The provider key never reaches the browser.

Quality

Vitest and Playwright journeys on the web, Odoo tests and a live endpoint-security suite on the backend, 27 unit and widget tests plus 16 device runs on mobile, all in one GitHub Actions workflow.

USER FLOWS

Screen by screen.

MORE WORK

Other systems I've built.

Vamar Owner Platform

Owner app, staff dashboard and API · Expo, React, Hono, PostgreSQL

Vamar staff dashboard cheques list next to the owner app home screen
Code

Live Monitoring Dashboard

Real-time stream at 1,000 msg/s · React 19, TypeScript, Vite

Live dashboard with KPI cards, a latency chart and the recent events list
Code

Park & Launch

Marine services super app · React Native, Node.js, Socket.io

Three Park & Launch screens - welcome tour, home dashboard and marine yards
Code

CONTACT

Let's build something.

Have a role or a project in mind? Send me a message and I'll get back to you the same day.

© 2026 Mohammed Ghally · Dubai