SHOB.COM.BD

SHOB.COM.BD

Live demo

At a glance

  
RoleTechnical Project Lead — overall technical lead across backend, frontend, mobile & UX
CompanyTecnoBZ (KM Group)
TimelineMar 2024 – present
Team2 backend · 2 frontend · 2 mobile · 2 UX, plus a project manager
StackDjango · React · Flutter · PostgreSQL · AWS · Kong
Peak load~170K concurrent users during promotional offers
StatusLive at shob.com.bd

Problem & context

SHOB.COM.BD is a B2B and B2C e-commerce platform for Bangladesh — wholesale (Alibaba-style) and retail (Amazon-style) in one marketplace. When I joined, onboarding and basic functionality existed, but the system was a monolith, order management and payment handling were stubs, and it was not ready to go live at scale.

Architecture

I re-architected the monolith into microservices behind a Kong API gateway. Web (React) and mobile (Flutter) clients hit Kong, which routes to focused Django services running on an AWS auto-scaling cluster that adds instances when load crosses 90%. Each service has its own database on a single PostgreSQL server. Authentication is handled within Django, and order fulfilment integrates with the company’s external delivery platform. A Redis cache was designed but left as planned work, and there is no message broker — services communicate synchronously. The codebase follows Django’s MVT (Model–View–Template) structure.

flowchart TB
    Web[React Web] --> Kong
    Mobile[Flutter App] --> Kong
    Kong[Kong API Gateway]
    subgraph Cluster[Auto-scaling cluster · AWS — scales out at 90% load]
        Catalog[Catalog Service]
        Order[Order Service]
        Payment[Payment Service]
        Loyalty[Loyalty Service]
    end
    Kong --> Catalog
    Kong --> Order
    Kong --> Payment
    Kong --> Loyalty
    Order --> Delivery[Delivery Platform]
    subgraph PG[PostgreSQL Server · AWS]
        CatalogDB[(catalog_db)]
        OrderDB[(order_db)]
        PaymentDB[(payment_db)]
        LoyaltyDB[(loyalty_db)]
    end
    Catalog --> CatalogDB
    Order --> OrderDB
    Payment --> PaymentDB
    Loyalty --> LoyaltyDB
    Kong -. planned .-> Redis[(Redis Cache)]

Key flow

Checkout — the path that ties order, payment, loyalty, and delivery together.

sequenceDiagram
    actor User
    participant Client as React / Flutter
    participant Kong as Kong Gateway
    participant Order as Order Service
    participant Payment as Payment Service
    participant Loyalty as Loyalty Service
    participant Delivery as Delivery Platform

    User->>Client: Place order
    Client->>Kong: POST /orders
    Kong->>Order: Route request
    Order->>Payment: Initiate payment
    Payment-->>Order: Payment confirmed
    Order->>Loyalty: Award points
    Order->>Delivery: Schedule delivery
    Delivery-->>Order: Tracking ID
    Order-->>Kong: Order confirmed
    Kong-->>Client: Confirmation + points earned
    Client-->>User: Success

Data model

Core entities around orders, payments, and the loyalty program.

erDiagram
    USER ||--o{ ORDER : places
    USER ||--|| LOYALTY_ACCOUNT : has
    ORDER ||--|{ ORDER_ITEM : contains
    PRODUCT ||--o{ ORDER_ITEM : "appears in"
    ORDER ||--|| PAYMENT : "paid via"
    ORDER ||--o| DELIVERY : "fulfilled by"
    LOYALTY_ACCOUNT ||--o{ POINTS_TRANSACTION : records
    ORDER ||--o{ POINTS_TRANSACTION : earns

What I built

  • Monolith → microservices behind a Kong API gateway, with per-service databases.
  • Built order management and payment method handling out from stubs to production features.
  • Designed and shipped the loyalty program: points are earned as a percentage of order value and redeemed as a discount at checkout, with tiered benefits for repeat customers.
  • High-traffic handling & stabilization — horizontal auto-scaling of the Django services (new instances at 90% load) behind Kong load balancing, database query optimization and connection pooling across the per-service databases, and rate limiting at the gateway.
  • Integrated the company’s delivery platform into the order lifecycle.

Outcome

After these improvements the platform went live and was a success:

  • Sustains ~170K concurrent users during promotional offers, absorbed by the auto-scaling cluster.
  • Microservices split cut p95 API latency from ~1.2s to ~280ms and reduced deployment time from ~30 min (whole monolith) to ~5 min per service.
  • ~99.9% uptime since launch.
  • A stable, scalable backend serving both B2B and B2C customers in Bangladesh.