Mzadat.
- Client
- Mzadat · مزادات
- Role
- Lead Engineer · Full-stack (Web, Admin, API)
- Year
- 2026
- Duration
- 4 months
- Visit
- Live site
- Next.js
- TanStack
- Zustand
- Tailwind
- shadcn/ui
- Radix UI
- Turborepo
- React Native
- Tauri
- Express
- BullMQ
- AWS
- ElastiCache
- AWS Lambda
- Python
- Stripe
- Supabase
- Vercel

Languages
EN · AR
Products shipped
Web · Admin · API
Verticals
6
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.
Three moves that defined the engagement.
- 01
Designed an RTL-first information architecture so the Arabic experience is the canonical one, not an afterthought.
- 02
Built the realtime bidding engine — the heart of the platform — single-handedly, alongside the customer marketplace and an operations/admin panel.
- 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.
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.
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
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.
Each choice is paired with the reason it earned its slot on this project.
- 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
- 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
- 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
- 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
- 05Async work
BullMQ + Redis for image processing, KYC, notifications and payout reconciliation — anything that must not block a bidder waving a paddle.
- BullMQ
- Redis
- 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



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.
