Nitin Bhardwaj
← IndexCase study · 05 / 11

Mzadat.

Oman's leading online auction platform.
Client
Mzadat · مزادات
Role
Lead Engineer · Full-stack (Web, Admin, API)
Year
2026
Duration
4 months
Stack18 tools
  • Next.js
  • TanStack
  • Zustand
  • Tailwind
  • shadcn/ui
  • Radix UI
  • Turborepo
  • React Native
  • Tauri
  • Express
  • BullMQ
  • AWS
  • ElastiCache
  • AWS Lambda
  • Python
  • Stripe
  • Supabase
  • Vercel
Mzadat — cover
01Outcomes at a glance
  • Languages

    EN · AR

  • Products shipped

    Web · Admin · API

  • Verticals

    6

02The brief

Oman's public-sector and private auctions were running over fragmented PDF catalogues and WhatsApp groups. Mzadat needed a single, transparent, bilingual platform that government ministries and private merchants would both trust.

03Approach

Three moves that defined the engagement.

  1. 01

    Designed an RTL-first information architecture so the Arabic experience is the canonical one, not an afterthought.

  2. 02

    Built the realtime bidding engine — the heart of the platform — single-handedly, alongside the customer marketplace and an operations/admin panel.

  3. 03

    Shipped a two-product surface (customer + admin) on a shared API and design system, so a single change ripples through both at compile time.

04What's in the box

Every app, service and worker that ships with the product — and where each one runs.

A Turborepo frontend (customer + admin) talking to one TypeScript 'brain', with a stateful realtime service for live floors and Python workers on Lambda for the work that doesn't belong in the request path.

Apps & clients03
  • Web

    Customer web

    The bilingual (EN/AR), RTL-first auction marketplace — discovery, watchlists, KYC, live and direct sales.

    • Next.js
    • TanStack
    • Zustand
    • Tailwind
    • shadcn/ui
    • Radix UI
  • Admin

    Admin / operations panel

    Lifecycle control plane — auctions, lots, merchants, KYC, payouts, refunds and audit trails for ministries.

    • Next.js
    • TanStack
    • Tailwind
    • shadcn/ui
    • Radix UI
  • API

    API service

    The system 'brain' — auctions, bids, lots, users, payouts, integrations and the gateway for live floors.

    • Express
    • TypeScript
    • Postgres
    • Redis
Services & workers04
  • Service· Long-running ECS / Fargate

    Bidding engine

    A stateful, low-latency service that keeps live floors honest — designed and shipped solo end-to-end.

    • Node
    • TypeScript
    • Redis
    • Postgres
  • Service· AWS Lambda (event-driven)

    Live translation

    Realtime EN ⇄ AR translation for auctioneer audio and chat — streamed back to bidders on both sides of the room.

    • Python
    • AWS Lambda
  • Service· AWS Lambda (on-demand)

    Document generation

    Bilingual invoices, lot catalogues and ministry-grade purchase orders rendered to compliant PDFs.

    • Python
    • AWS Lambda
    • S3
  • Worker

    Job queue & workers

    Image processing, KYC pipelines, email/SMS, payout reconciliation — everything that shouldn't block a bid.

    • BullMQ
    • Redis
    • Node

Postgres is the system of record. Sensitive flows — payouts, audit, government surplus — run inside the TypeScript brain; everything compute-heavy or language-specific (translation, documents, OCR) is shipped to specialised workers.

05Stack & rationale

Each choice is paired with the reason it earned its slot on this project.

  1. 01Frontend monorepo

    Two products (customer + admin) share a design system, a typed API client and an i18n / RTL layer in one Turborepo. The Arabic experience is the canonical one, with English as a localisation — not the other way around.

    • Turborepo
    • Next.js
    • TanStack
    • Zustand
    • Tailwind
    • shadcn/ui
    • Radix UI
  2. 02Express 'brain'

    Auctions, bids, lots, merchants, payouts and audit live inside one well-typed service so the consistency boundary is obvious. Boring, well-typed, and easy for a small team to reason about.

    • Express
    • TypeScript
    • Postgres
  3. 03Bidding engine

    A stateful, sub-second service that keeps live floors honest — designed and shipped solo. The single most critical piece of the platform; the credit is mine, the mechanism stays in the box.

    • Node
    • Redis
  4. 04Specialised compute

    Translation, document generation and OCR don't belong in the request path. Python is the right ecosystem for them; Lambda gives elastic, pay-per-invocation compute that scales from one ministry test run to a packed live floor.

    • Python
    • AWS Lambda
  5. 05Async work

    BullMQ + Redis for image processing, KYC, notifications and payout reconciliation — anything that must not block a bidder waving a paddle.

    • BullMQ
    • Redis
  6. 06Infra & payments

    AWS for primary infra, Vercel for the marketing edge, Stripe for international rails. Picked for boring reliability across the Gulf network.

    • AWS
    • Vercel
    • Stripe
06Selected screens
Mzadat live auctions
Mzadat merchants
Mzadat RTL
07Outcome

Mzadat is being rolled out across the Sultanate as the canonical platform for government surplus and private auctions — onboarding ministries, universities and commercial merchants in its first wave.

Next project06 / 11

GreenCrest— Premium Indian agro & engineering exports.