Project Overview
Shopdot is a B2B marketplace connecting brands, wholesalers, and retailers on a unified commerce platform. The platform required a scalable multi-portal product ecosystem — a storefront for buyers, a brand portal for suppliers, a retailer portal for purchasing workflows, and a React-based web component for mobile experiences. Our work focused on building robust backend services, a discoverable product catalogue with full-text search, and reliable payment and payout infrastructure to support high-volume B2B transactions.
Project Objectives
- Build scalable backend APIs for product publishing, order processing, and multi-party transactions
- Implement full-text product search with advanced filtering and relevancy ranking
- Develop a multi-portal frontend ecosystem for brands, retailers, and storefront customers
- Integrate payment gateway with webhook handling and idempotency guarantees
- Build multi-gateway payout processing with pluggable provider selection
- Design a reliable background job system for async workflows including emails and exports
- Establish clean backend architecture with separation of concerns across 20+ feature modules
The Challenge
Multi-Portal Frontend Complexity
The platform required three distinct frontend portals — storefront, brand portal, and retailer portal — each with different user roles, workflows, and UI requirements, all sharing a common component library and consistent design system.
Full-Text Product Search at Scale
Implementing advanced product discovery for a large B2B catalogue required full-text search, faceted filtering, and relevancy-ranked results that could scale with growing inventory and user traffic.
Multi-Gateway Payout Processing
The marketplace needed to support multiple payout providers (Finix, Recurly) with different commission structures and settlement rules, requiring a flexible, pluggable payment architecture that could switch providers without core system changes.
Data Consistency Across Portals
With multiple user types — brands, retailers, and platform admins — performing concurrent operations on shared data, ensuring consistency in product listings, orders, and inventory required careful schema design and transactional integrity.
Our Solution
01
Layered Backend Architecture
Built the backend using Node.js and Express.js with a strict Layered Architecture (Controller → Service → Repository → Entity → DTO) across 20+ feature modules, using Sequelize ORM with PostgreSQL for relational data integrity and optimized query performance.
02
Apache Solr Full-Text Search
Implemented Apache Solr (Lucene-based) full-text search for the product catalogue, enabling advanced multi-field filtering, faceted navigation, and relevancy-ranked results — significantly improving product discovery for B2B buyers.
03
Strategy Pattern for Multi-Gateway Payouts
Designed a pluggable payout processing system using the Strategy Pattern, allowing dynamic provider selection (Finix, Recurly) via PlatformConfig — enabling provider switching without core code changes and supporting different commission structures per partner.
04
BullMQ Background Job Infrastructure
Built a configurable background job system using BullMQ and Redis with dynamic queue registration, supporting async workflows for emails, data exports, and order processing — keeping API response times fast while handling heavy operations asynchronously.
Technologies Used
Frontend
React
Redux
TypeScript
Backend
Node.js
Express.js
Database
PostgreSQL
Redis
Tools & Infrastructure
Apache Solr
AWS
BullMQ
Results & Impact
The platform successfully scaled to support multi-party B2B commerce with high product discoverability, reliable order management, and flexible payout infrastructure.
20+
Feature Modules
Backend modules built with clean layered architecture
Full-Text
Search
Apache Solr-powered product search with faceted filtering and relevancy ranking
Multi-Gateway
Payout Providers
Pluggable payout architecture supporting Finix and Recurly
3
Portals
Distinct frontend portals for storefront, brands, and retailers
Project Gallery



