← All workCase study 05

Auqli Server

Backend services for a social live-shopping marketplace — auth, sellers, orders, payments, logistics, and the real-time layer behind livestreams, live bidding and chat.

Type

Platform

Status

In production

Context

Auqli · Software Engineer

Period

2022 – 2024

Source

Private

Node.js
Private repository

10

domain modules

3

payment & logistics providers

(01) Overview

A Node.js and Express platform structured as a modular monolith, with each domain owning its own routes, controllers, services and repositories behind a shared HTTP and real-time layer. I built core backend services: the v2 order lifecycle and its state machine, the buyer wallet and settlement ledger, webhook infrastructure across three payment and logistics providers, and the real-time layer behind live seller broadcasts and auction bidding. Real-time live-commerce workloads were kept separate from the transactional order and payment services, so high-frequency stream events never contended with checkout writes.

(02) Architecture

Modular monolith, module-per-domain with a repository layer · MongoDB with versioned migrations · Socket.io real-time layer · Agenda job scheduling · signature-verified webhook ingestion with delivery logs and replay · Agora, FFmpeg, Smile Identity, Stripe-class payment and multi-carrier logistics integrations

(03) What was built
  1. 01Built backend services for a live-shopping marketplace covering auth, sellers, products, orders, payments and logistics.
  2. 02Separated real-time live-commerce workloads from the transactional order and payment services, so high-frequency stream events did not contend with checkout writes.
  3. 03Designed the v2 order lifecycle end to end: the state machine and service interfaces behind multi-carrier shipping, payment capture and verification, returns, refunds and dispute resolution — with an explicit money outcome at every terminal state.
  4. 04Engineered webhook infrastructure spanning three payment and logistics providers, with signature verification, persisted delivery logs and replay endpoints that cut production incident diagnosis from hours to minutes.
  5. 05Built the real-time layer: auction bidding over WebSockets with a REST fallback, so a dropped socket on a flaky mobile network never means a lost bid, plus live-stream session management and server-side video processing for seller broadcasts.
  6. 06Designed and shipped the buyer wallet system covering balances, top-ups, held funds and transaction history, alongside the revenue and livestream analytics sellers use daily.
  7. 07Integrated identity verification (Smile Identity KYC), social sign-in, and push notification providers, and rebuilt the media pipeline with server-side image optimisation plus a backfill migration across existing assets.
  8. 08Owned production: containerised deployments, CI/CD across staging and production via CircleCI, runtime monitoring, and versioned database migrations through migrate-mongo.
(04) System design

Drawn from the source

Services, data ownership, message flow and failure paths. Drag to pan, scroll to zoom, or open any diagram fullscreen.

Marketplace backend architecture

A modular monolith organised by domain, with routes, controllers, services and repositories layered inside each module. Deliberately not microservices: one team, one deploy, clean seams where a split would go later.

Fig. auqli-platform
Rendering diagram
compute / servicestate / storagemessagingobservabilitythird partygood outcomefailure pathkey decision
(05) Engineering notes

The decisions worth talking through: where the interesting work was choosing between options, not writing the code.

Note 01

Why a modular monolith and not microservices

The domain decomposition is real — orders, products, sellers, buyers, live streams and admin each own their own routes, controllers, services, repositories and models. What it deliberately does not have is a network boundary between them. With one team and one deploy, distributed transactions and per-service infrastructure would have bought failure modes without buying independence. The seams are drawn where a split would eventually go, so extraction stays a refactor rather than a rewrite.

Note 02

Webhooks as infrastructure, not endpoints

Three external providers, each with its own signature scheme and retry behaviour, all mutating order and money state. Treating them as ordinary route handlers makes every incident an archaeology exercise. Instead every inbound payload is signature-verified, persisted to a request log before it is processed, and replayable on demand — which is what turned "the carrier says they sent it" from a multi-hour investigation into a single query.

(06) Stack

Node.js / Express / JavaScript / MongoDB / WebSockets / Socket.io / Redis / Docker / AWS / CircleCI / FFmpeg

Next case study

Materia

→