Next.js · App Router
Web storefront
The primary shop. Server-rendered and region-aware, in English, Arabic and Azerbaijani, with Elasticsearch-backed search, a voice-driven command palette, and live order tracking over STOMP.
Buyology Trading FZ-LLC (UAE) · Production
Multi-surface commerce platform for the UAE — a Next.js storefront, iOS and Android apps, an operations dashboard, and a 39-context Spring Boot core.

39
Bounded contexts
900+
Backend source files
128
Domain entities
5
Client applications
7
Markets served
Overview
Buyology is a consumer electronics marketplace operating out of the UAE, and the largest system I have worked on. I lead the engineering team building it. It is not one shop front but five applications over a single domain: a public storefront, native iOS and Android apps, an operations dashboard for staff, and a marketing surface — all reading one API.
The commerce core is the part most people would expect: catalogue, variants and specifications, search, cart, checkout, payments, refunds, promotions, reviews and Q&A. What makes the system large is everything the business does that is not simply selling a boxed product. Customers can book a device repair, sell or trade in hardware they already own, rent equipment, order from a powerbank station network, request B2B quotes, or apply to become a supplier. Each of those is its own workflow with its own states, its own pricing, and its own operations screens.
Three of those flows are answered by a language model. A storefront assistant answers product and order questions against the live catalogue; the repair flow estimates a price from photographs of the damage plus a description; the trade-in flow values used hardware the same way. All three run on Anthropic's Claude, and all three are grounded in the live database rather than in a static prompt, so a price change in the dashboard is reflected in what the model says next.
Delivery is where the architecture stops being a single application. Orders leave the commerce core and enter a separate courier service — its own deployment, its own Keycloak-issued identities — which publishes assignment, status and GPS events onto a RabbitMQ topic exchange. The commerce core consumes them from a durable queue with a dead-letter path, and fans the interesting ones out to customers over WebSocket, which is how live courier tracking and customer-to-courier chat work.
The platform serves seven markets. The UAE is the primary storefront; Saudi Arabia, Qatar, Oman, India, Bahrain and Azerbaijan each have their own regional host, with Cloudflare resolving the visitor's country at the edge and Nginx handing it to the application as a trusted header. Product data, currency and delivery pricing are all market-scoped.
At a glance
Surfaces
Next.js · App Router
The primary shop. Server-rendered and region-aware, in English, Arabic and Azerbaijani, with Elasticsearch-backed search, a voice-driven command palette, and live order tracking over STOMP.
React Native · Expo · Swift project
A native Xcode target built and released through EAS. Sign in with Apple, Google and Facebook, push notifications, and Live Activities that keep a delivery on the lock screen while the courier is moving.
React Native · Expo · Gradle project
The same codebase against a native Android project, released through EAS to Google Play, with an end-to-end Maestro suite that runs on a real emulator in CI on every change.
React · Vite
What staff actually run the business on: catalogue and stock, order and refund handling, review moderation, courier dispatch, role assignment, and revenue reporting.
Next.js
The public brand surface and the regional landing pages that visitors outside a served market are routed to.
Architecture
Surfaces
Five applications, one API contract
Edge
Country resolved before the request reaches the app
Commerce core
Spring Boot modular monolith · 39 bounded contexts
Async & realtime
How delivery reaches the customer's screen
Data
One relational source of truth, one search index
Services & integrations
Separate deployments and third parties
A Spring Boot modular monolith holds the commerce domain: thirty-nine bounded contexts, each a package that owns its own controllers, domain, DTOs, repositories, and services, so a context can be reasoned about — and later extracted — without unpicking the rest. Delivery is already extracted: the courier service runs as its own deployment with Keycloak-issued identities, reached over REST for commands and integrated over a RabbitMQ topic exchange for events, with a dead-letter queue for anything unprocessable. Read-heavy product search is offloaded to Elasticsearch while PostgreSQL stays the single source of truth, with schema changes going through versioned Flyway migrations. Realtime reaches customers over STOMP, authenticated by the JWT carried in the CONNECT frame and verified by HMAC without a database round trip, which is what keeps courier GPS updates cheap enough to broadcast continuously.
Features
Engineering challenges
Stack
Screenshots





Questions
Next
Buyology E-Commerce Platform was built by Firdovsi Rzaev for Buyology Trading FZ-LLC (UAE).