~/openarch/work/marketspace-// case study

A multi-vendor marketplace. One buyer-facing storefront over a shared vendor backend, with split payments per vendor and automated weekly payouts - off scattered Instagram-shop selling.

Karigar Collective·marketplace · artisan retail·2026·in production
openarch.in/work/marketspace
Marketspace interface
//the brief

What we built.

Karigar Collective's artisans sold through individual Instagram DMs. We built one storefront and a shared backend: buyers browse every maker in one place, multi-vendor carts split into per-vendor sub-orders at checkout, and payouts run automatically each week.

// Every maker, one storefront.

domainmulti-vendor commerce
shapebuyer app + vendor web
statusin production
vendors40+ onboarded
stack
react native · exporeactnode · expresspostgresrazorpay route
//what we shipped
01

Buyer storefront

Browse by category and vendor, search, and a multi-vendor cart that splits into per-vendor sub-orders at checkout.

02

Order tracking

Placed to delivered, tracked per sub-order, with review submission opening once an item is delivered.

03

Vendor dashboard

Catalog management, stock levels and images, an incoming-orders queue, and mark-as-packed / shipped actions.

04

Payout history

Weekly payout history and an upcoming-payout estimate - brass reserved for brand and CTA moments, never stock state.

05

Admin console

A vendor approval queue, dispute and refund handling, and commission-rate management per vendor or category.

06

Split settlement

One Razorpay Route split per vendor sub-order, so each maker is paid directly from a single buyer checkout.

//data model
schema.sql5 tables
table vendors
name, craft_category, city, payout_account, approved
table products
vendor_id, name, category, price, stock_qty, image_url
table orders
buyer_id, status, total, placed_at
table order_items
order_id, product_id, vendor_id, qty, unit_price
table payouts
vendor_id, period, gross_sales, commission, net_payout
// order status machine
  1. 01placed
  2. 02confirmed
  3. 03packed
  4. 04shipped
  5. 05delivered / returned
//business logic
split-order.tsCheckout split
function splitOrderByVendor(cartItems) {
// one Razorpay Route split per vendor sub-order
return groupBy(cartItems, 'vendor_id')
}
payout.tsPayout calc
function calculatePayout(grossSales, commissionRate = 0.12) {
const commission = grossSales * commissionRate
return { commission, net: grossSales - commission }
}
// runs weekly for orders marked DELIVERED the prior week
//on the roadmap

Honest edges.

  • →Combine shipping across vendors in the same city within one cart
  • →Retry logic for the payout batch if a Razorpay Route call fails mid-run
  • →Automated profanity / spam filtering ahead of manual review moderation
//result
40+
artisan vendors in Q1
weekly
automated payouts
1
storefront, not DMs

Karigar Collective onboarded over forty artisan vendors in the first quarter, moving them off individual Instagram DMs onto one storefront with automated weekly payouts.