Back to Case Studies

A multi-vendor marketplace with a social feed, across four surfaces

A storefront, a social feed and multi-vendor settlement behind one API, delivered as a backend, a web app, an admin panel and a Flutter app.

Sector
Multi-vendor e-commerce marketplace
Engagement
March 2023 – December 2023
  • Node
  • Express
  • MongoDB
  • React
  • Vite
  • Flutter
  • Socket.IO

Context

Two products share one account. A shopper browses vendor catalogues, fills a cart and checks out; the same person also posts, publishes stories, follows stores and messages sellers. Neither half can be bolted on after the fact, because both read the same identity, the same media pipeline and the same notification channel. The harder half is settlement — an order can span several vendors, so money has to be tracked per vendor rather than per order, and that ledger has to survive refunds and returns.

What we built

  • Backend API

    One REST API behind every surface, with Socket.IO for chat and webhook handling for payment events.

  • Web app

    Storefront, social feed and seller-facing pages in the browser.

  • Admin panel

    Catalogue, vendor and order administration on a bought theme.

  • Mobile app

    Shopping, feed, stories, video and in-app chat on Android and iOS.

Architecture

One Express and MongoDB API served all four surfaces: 43 route modules and 49 data models covering catalogue, variants, cart, orders, payments, coupons, shipping, returns and vendor accounts on the commerce side, and posts, stories, comments, follows, chat, search and reporting on the social side. Chat runs over Socket.IO in the same API process, and payment events arrive back as webhooks rather than being polled. Two card providers sit side by side so checkout works in more than one market; push goes through Firebase and media through S3. The web app is React on Vite with Redux Toolkit, and the Flutter app vendors a story-editor package instead of reimplementing one. The admin panel was assembled on a purchased template — the engineering there was wiring it to the API, not designing an interface, and it is worth saying so. The work ran from March to December 2023.

Stack

Backend API
  • Node
  • Express
  • MongoDB
Web app
  • React 18
  • Vite
  • Redux Toolkit
Admin panel
  • React 17
  • Redux Toolkit
  • purchased template
Mobile app
  • Flutter (Dart)
  • Provider
Integrations
  • Stripe and Razorpay side by side, so card checkout works in two markets
  • Firebase Cloud Messaging for push notifications
  • Amazon S3 for product and post media
  • Socket.IO for in-app chat between shoppers and sellers
  • Nodemailer for transactional email

Scale

Counts that can be re-derived from the same repositories. Nothing here is a business result — a repository cannot evidence one.

  • Four delivered surfaces: backend API, web app, admin panel, mobile app.
  • 1,472 commits across the four repositories.
  • 43 route modules and 49 data models in the API.
  • 53 mobile dependencies, on Dart SDK >=2.18.5 <3.0.0.

Where the evidence stops

  • The admin panel was assembled on a bought template and is described as such rather than as bespoke interface work.
  • No revenue, order volume, vendor count or conversion number appears here, because the source material cannot prove one.

Evidence

Each statement above, and the artefact it was read from. The client cannot be named, so the sources are given instead.

  • 4 surfaces delivered — backend API, web app, admin panel, mobile app.

    SourceOne repository per surface, each carrying application code on its default branch

  • 1,472 commits across the four repositories.

    SourceSum of history.totalCount on each repository's default branch (GitHub GraphQL)

  • 43 API route modules.

    Sourceroutes/ directory listing on the backend repository

  • 49 data models.

    Sourcemodels/ directory listing on the backend repository

  • 53 mobile dependencies, on Dart SDK >=2.18.5 <3.0.0.

    Sourcepubspec.yaml on the mobile repository

  • Engagement span: 24 March 2023 to 27 December 2023.

    SourceFirst and last commit dates on the default branches

Related capability

Web development services