Technical Lead · Case Study

E-commerce Drop-
shipping
Platform

SourceInfi streamlines the full drop-shipping lifecycle — vendor catalog, Shopify sync, multi-courier fulfillment, real-time tracking, and seller wallet settlement — built for scale on a hybrid PHP + Node.js architecture.

View platform flow →
~99%
System uptime maintained across all services
~40%
Faster Shopify sync, zero failure rate
~70%
Reduction in failed courier callbacks
<3s
Average API response — courier microservices
PHP · CodeIgniter Node.js · TypeScript MySQL MongoDB RabbitMQ AWS Shopify App
01 /

Project overview

What is SourceInfi?

SourceInfi (by Shifto Pvt Ltd) is a full-stack drop-shipping and e-commerce platform connecting vendors who supply products with sellers who list and sell them on Shopify or WooCommerce stores — without holding inventory.

The platform handles the entire lifecycle: vendor catalog management, seller onboarding, pricing and margin rules, order ingestion via channel webhooks, shipment booking through multiple courier partners, real-time tracking, and wallet-based settlement.

Architecture approach

PHP + CodeIgniter + MySQL — seller operations, catalog, wallet, invoicing, and session-based auth. Monolithic core chosen for its transactional guarantees and rapid iteration.
Node.js + TypeScript + MongoDB — courier API orchestration, real-time event handling, and fast lookup of courier events. Microservice layer for I/O-bound courier calls.
RabbitMQ — decouples order ingestion, shipment tracking, and bulk import jobs. Exponential backoff and idempotent workers ensure resilience at scale.
02 /

Role — Technical Lead

Scope & ownership

End-to-end technical ownership of the platform — from architecture decisions and sprint planning to production incident response and third-party integrations.

03 /

Key modules

Seller & vendor registration

KYC verification, multi-tenant onboarding, wallet creation, and pricing plan assignment at sign-up.

Catalog management

Vendor product creation with SKUs, variants, cost pricing, and Cloudinary-hosted images. Bulk CSV import for sellers with markup rules.

Shopify app integration

OAuth-based channel connect, product push via Admin API, real-time order webhook ingestion, and delivery status sync-back.

Pincode & SLA management

Serviceability checks per pincode, delivery SLA computation per origin–destination pair for smarter courier selection.

Shipment process

AWB generation, dynamic courier allocation, label creation via S3, and batch shipment processing through NimbusPost and NimbusLM APIs.

Shipment tracking

Dual-mode tracking: cron polling for all undelivered shipments and real-time courier webhook push (Ekart, Shipway). RabbitMQ queues decouple updates.

NDR handling

Automated non-delivery report workflows, rescheduling flows, and push to courier partners with exponential retry logic and seller notifications.

Wallet & margin management

Seller wallets with debit/credit ledger, margin adjustments, COD reconciliation, RTO charge reversals, and monthly consolidated invoicing.

04 /

End-to-end platform flow

The diagram below maps every stage of the drop-shipping lifecycle — from seller onboarding and vendor catalog management through order ingestion, shipment creation, live tracking, delivery, and final financial settlement. Each colour represents a distinct functional domain.

Onboarding & seller
Vendor catalog
Order ingestion
Queue events
Shipping & courier
Delivery
Exceptions / RTO
Billing & settlement
Onboarding Catalog Channel Order in Pre-ship Shipping Tracking Delivery Billing Seller registers KYC + wallet setup Instantkyc_lib + Wallet_lib Pricing plan + margin rules Pricingplan_lib + Defaultmargin_lib Vendor creates product SKU, variants, cost price Seller browses catalog filter by category, SKU, price Upload images Cloudinary_lib — CDN URLs Seller imports products Master_import_lib — CSV / manual Published to catalog Set selling price + markup Queue: bulk_import.new vendor/product_lib processes rows Push product to Shopify channels/Shopify::createProduct API Connect sales channel Channels_lib — Shopify / WooCommerce Order webhook received Response controller → Dump_lib Queue: order_dump.new RabbitMQ → Queue controller Parse & create order Shopify_orders_lib → DB + notify seller Wallet balance check Wallet_lib — sufficient funds? Funds OK? Recharge No Yes Courier selection Allocation_lib + SLA_lib + margin Create shipment NimbusPost or NimbusLM API AWB assigned Awbstatus_model + Shippings_model Wallet debit + invoice Creditdebit_lib + Invoice_lib Cron polling Crons::pull_nimbus_shipping Courier webhook push webhook/Tracking — Ekart, Shipway Queue: shipment.track Shippings_lib::track_shipment_api AWBStatus updated pending pickup → in transit → OFD Delivered? No NDR / RTO rto_charges Exception Yes Order delivered SLA closed + seller notified Order status synced to Shopify Seller wallet debited product cost + COD charges Vendor wallet credited Vendorwallet_lib — cost price Consolidated invoice generated Crons — sellerinvoice_lib / vendor/invoice_lib
05 /

Technical highlights

Backend stack

PHP 7 CodeIgniter Node.js TypeScript MySQL MongoDB

Infrastructure

AWS EC2 AWS S3 CloudWatch RabbitMQ Cloudinary

Integrations

Shopify Admin API NimbusPost NimbusLM Delhivery Ekart Exotel IVR

Architecture decisions

Hybrid monolith + microservices — PHP/CI handles transactional seller ops (ACID guarantees), Node.js handles high-throughput courier I/O where event-loop concurrency wins.
Event-driven queue design — RabbitMQ exchanges for order ingestion, shipment tracking, and bulk imports decouple producers from consumers and enable retry without data loss.
Dual-mode tracking — cron polling covers couriers without webhook support; real-time webhook push (Ekart, Shipway) reduces status lag. Both converge into a single status update path.
Idempotent wallet ledger — each debit/credit event is keyed by AWB + transaction type, preventing duplicate entries during retry storms and reconciliation runs.
// Enqueue shipment for courier assignment (Node.js worker)
const payload = { orderId, items, weight, pincode };
rabbitmqChannel.sendToQueue(
  'shipments',
  Buffer.from(JSON.stringify(payload)),
  { persistent: true }
);

// Worker: courier microservice → writes event to MongoDB
await courierService.assignAndShip(payload);
await db.events.insertOne({ orderId, status: 'booked', ts: Date.now() });
06 /

Impact & outcomes

~99%
System uptime maintained. Autoscaling on AWS + monitored with CloudWatch ensured near-continuous availability.
~40%
Faster Shopify sync with zero failure rate after migrating to a Shopify OAuth app with bulk product push.
~70%
Reduction in failed courier callbacks by implementing pincode-level serviceability checks before shipment booking.
<3s
Average API response time across courier microservices, achieved through MongoDB lookups and async event handling.