Skip to content

A storefront where vendors run themselves

A multi-vendor storefront where independent sellers manage their own catalog and orders while shoppers browse one unified store.

Good morning, Ottilie

Tue 15 Sep 2026 · 18 parcels for the 14:00 van · payout Fri 18 Sep

Print packing slipsOM
Parcels for the 14:00 van
18 3 packed so far
Sold out overnight
2 lines in the UK
Fri 18 Sep payout
£1,256.68 counted, lands Friday
On the shelf
8 lines 9 markets

Pack before the van

12 of 18 shown · van leaves 14:00
OrderShopperMarketItemsStatus
QH-48231Imogen P.UKBreakfast bowl ×2 · OatPacked
QH-48229Rafe D.UKPouring jugPacked
QH-48226Saoirse K.IETall mug · Side plate, set of 2Packed
QH-48224Hattie W.UKSalt pigTo pack
QH-48219Lukas B.DEEspresso cups, pairTo pack
QH-48217Priya N.UKServing platterTo pack
QH-48214Anouk V.NLBreakfast bowl · Kiln whiteTo pack
QH-48210Tom F.UKTall mug ×2To pack
QH-48207Camille R.FRUtensil potTo pack
QH-48203Josie A.UKSide plate, set of 2 ×2To pack
QH-48198Freya L.SEBreakfast bowl · MossTo pack
QH-48195Dan O.USServing platter · Tall mugTo pack

Sold out overnight

United Kingdom
Pouring jug5 other markets still stockedSold out
Salt pig5 other markets still stockedSold out

Update stock here; the shop reads this record.

Fri 18 Sep payout

Stripe Connect
Lands in your account£1,256.68Counted
Gross sales£1,486.00
Commission, per line−£187.32
Refunds−£42.00
Past runs
Fri 11 Sep£1,102.40
Fri 4 Sep£968.15
Fri 28 Aug£1,321.90

The brief, in specifics

Industry
Online Marketplaces
Duration
16 weeks
Cooperation model
Time & materials
Services
Vendor platformOrder managementStorefront
Integrations
ShopifyStripeKlaviyoShipStation
Technologies
Next.jsTypeScriptTailwind CSSGraphQLStripe ConnectPostgreSQL
Team
1 Project lead1 Product designer2 Frontend engineers1 Backend engineer1 QA engineer

Client name withheld under NDA. Engagement details are shown to the extent our agreement permits.

The hard problem

01
  1. 01

    Vendors had no self-serve way to manage catalog or orders, so every change went through manual back-and-forth and shoppers saw an inconsistent store.

    A vendor wanting to change a price emailed it, and it changed when the email was read. The measurable consequence showed in the listings: vendors published in bursts when they had the operations person's attention and not at all otherwise, so the front page reflected who had emailed most recently, not what was new.

    We built a vendor dashboard for managing listings and orders directly, and unified the customer-facing storefront so browsing feels consistent across every vendor.

The solution

How the pieces fit

  1. 01

    Designed a self-serve vendor dashboard for catalog and orders

    The dashboard's scope changed twice during the build as we watched what makers actually did with it, which is exactly what time and materials was for.

  2. 02

    Unified product presentation across all vendors

    The storefront normalizes vendor data into one image, size and delivery vocabulary, keeping vendor identity where it affects trust and nowhere else.

  3. 03

    Automated payouts and order-status syncing

    A cart spanning several vendors is one payment and several transfers through Stripe Connect, with commission computed per line item.

  4. 04

    Rolled out to top vendors first, then the long tail

    The ten largest vendors went first with the team watching them work, and the long tail followed once those ten had stopped emailing.

Introduction

The system we were asked to build

Every vendor listing change was handled by hand. We shipped self-serve vendor tooling behind a unified shopping experience.

A curated storefront with about sixty independent makers, whose catalog changes all went through one operations person by email. That person was the constraint on the whole business: new listings waited days, stock was updated when someone got around to it, and the shop looked like sixty shops. The engagement was scoped to remove that queue entirely, not to make it faster.

Design & Build

Merchant Self-Serve Studio

Lets independent vendors upload items, track inventory and process orders on their own.

Vendors get a scoped dashboard that resolves against their own records server-side, so one merchant can't reach another's orders even by guessing an ID. Listings, stock and fulfillment all live where a vendor already checks for orders, and that's what stopped stock drifting: the update happens where the reason for it appears, instead of in a separate admin tool nobody opens.

What shipped
  • Server-scoped records: vendor isolation, not hidden UI
  • Listings, stock and fulfillment in one place
  • Stock updated where the reason to update it appears
Stock by market

One shelf, 9 markets · 8 lines · edited where the orders arrive

Bulk importSave stockOM
Filter linesAll linesIn stockLast fewSold outScoped to Harebell Pottery

Units per market

Changes publish to the storefront and product pages on save
LineUKIEFRDENLBEDKSEUSAll
Breakfast bowlHBP-BWL-15 · 5 glazes1463703141856
Tall mugHBP-MUG-40146453202541
Pouring jugSold out in the UK overnight0213010029
Side plate, set of 2HBP-PLT-22228695432665
Salt pigSold out in the UK overnight0322101009
Serving platterHBP-PLR-113102100018
Espresso cups, pairHBP-ESP-0294342321028
Utensil potHBP-UTP-0662210110215
Lines sold out201032342
One rule, every surface:0 units is sold out · 1 to 3 is last few · above that is in stock. The storefront card, the product page and this grid read the same record.
On screen

One shelf, nine markets. The maker sets stock per market in one grid scoped to their own shop: sold-out cells in rose, the last few units in mustard, and one rule the storefront reads too.

Quayhallbowlall 60 makers4
34 bowlsranked across every maker from one search index · delivering to the United KingdomSort: relevance
Breakfast bowl£28.00 Arrives in 2–3 daysSize M · 15 cm
Nesting bowls, set of 3£54.00 Arrives in 3–4 daysSizes S, M, L
Last few
Turned ash salad bowl£42.00 Arrives in 2–3 daysSize L · 26 cm
Last few
Speckled serving bowl£48.00 Arrives in 3–4 daysSize L · 24 cm
Stoneware dog bowl£26.00 Arrives in 2–3 daysSize M · 17 cm
Sold out
Lidded sugar bowl£22.00 Arrives in 4–5 daysSize S · 9 cm

Unified Customer Storefront

On screen

The shopper's side: bowls from many makers ranked from one search index, in one image treatment, one size scale and one delivery format, with the maker named only on the product page.

Brings listings from dozens of vendors together into one consistent, single-brand browsing experience.

The storefront normalizes vendor data into one presentation layer (one image treatment, one size vocabulary, one delivery-estimate format) so dozens of sellers read as one shop. Vendor identity survives on the product page, where it matters for trust and shipping, but nothing in the browse grid tells you which vendor a card belongs to. Search ranks across all vendors from one Algolia index.

What shipped
  • One image, size and delivery vocabulary across vendors
  • Vendor identity kept where it affects trust and shipping
  • A single cross-vendor search index

Automated Split Payouts

Handles multi-vendor cart checkout and automatically routes payments and commissions via Stripe Connect.

A cart spanning four vendors is one payment to the shopper and four transfers behind it, handled through Stripe Connect so the platform never takes custody of the funds. Commission is computed per line item, which is what makes mixed-rate categories work. Refunds reverse the specific transfer instead of the whole charge, and payout failures surface on the vendor's own dashboard.

What shipped
  • One shopper payment, per-vendor transfers via Connect
  • Commission computed per line item, so mixed rates work
  • Refunds reverse the specific transfer, leaving the rest of the charge alone
Order QH-48190

Eleanor Vasquez · one payment, routed to 4 makers as 4 parcels

PaidTue 15 Sep 2026
Shopper paid, once
£232.50 one card payment
Split to
4 transfers via Stripe Connect
Commission, line by line
£25.82 mixed rates
Funds held by Quayhall
None transfers go straight to makers
HPHarebell PotteryCeramics · parcel 1 of 4
Breakfast bowl · Oat£56.002 × £28.0012% · −£6.72
Tall mug£24.001 × £24.0012% · −£2.88
Parcel total£80.00
Commission−£9.60
To the maker£70.40
tr_3PqHBP7Paid out
FPFennick Paper Co.Stationery · parcel 2 of 4
Linen notebook, A5£18.001 × £18.0015% · −£2.70
Letterpress cards, set£12.001 × £12.0015% · −£1.80
Parcel total£30.00
Commission−£4.50
To the maker£25.50
tr_3PqFNK2Paid out
OWOtterburn WoolTextiles · parcel 3 of 4
Lambswool throw£96.001 × £96.0010% · −£9.60
Parcel total£96.00
Commission−£9.60
To the maker£86.40
tr_3PqOTB9Paid out
RLRookwood LarderLarder · parcel 4 of 4
Hedgerow chutney£19.503 × £6.508% · −£1.56
Sea salt tin£7.001 × £7.008% · −£0.56
Parcel total£26.50
Commission−£2.12
To the maker£24.38
tr_3PqRKW4Reversal

Refund · one jar of hedgerow chutney arrived broken

Touches Rookwood Larder only
Line refunded to the shopper£6.50
Reversed on tr_3PqRKW4−£5.98
Commission returned from Quayhall£0.52

The charge stands. The other 3 transfers are untouched.

On screen

One basket routed to four makers as four parcels: one card payment, commission priced line by line at mixed rates, a transfer each, and a broken jar refunded against one maker's transfer only.

Process

Phase by phase

  1. Phase 1: Merchant Workflow Audit

    Vendor Operations Analysis

    Audited manual vendor onboarding and catalog update bottlenecks across about sixty independent makers.

    • Merchant Portal Audit
    • Multi-Vendor Data Schema
    • Operational Bottleneck Report
  2. Phase 2: Merchant Cockpit Design

    Self-Serve Vendor Studio UI

    Designed an intuitive self-serve dashboard allowing independent vendors to manage products, pricing, and order fulfillment.

    • Merchant Cockpit UI
    • Bulk Catalog Importer
    • Inventory Management Specs
  3. Phase 3: Automated Payout Engine

    Split-Payment & Sync Engineering

    Built automated split-payment processing and order status synchronization using Stripe Connect and GraphQL APIs.

    • Split Payout Engine
    • Multi-Vendor Order Router
    • Stripe Connect Integration
  4. Phase 4: Pilot & Merchant Rollout

    Staged Merchant Onboarding

    Rolled out to the ten largest vendors first, then to the long tail of the shop's roughly sixty makers, with a more consistent catalog and 64% lower support load.

    • Pilot Performance Report
    • Merchant Onboarding Guide
    • Production Launch
Onboarding

Five steps from application to first listing · 9 traders in the queue

Waiting on: anyoneTue 15 Sep 2026
1Application20 waiting on the trader
2Documents33 waiting on the trader
3Stripe Connect account11 waiting on the trader
4Shop profile21 waiting on the trader
5First listing10 waiting on the trader

In the queue

Oldest application first
TraderAppliedStepWaiting onNote
Saltmarsh CandlesHome2 SepDocumentsTraderProof of address outstanding
Kittle & LoomTextiles3 SepShop profileModerationShop profile images to check
Brackenfold LeatherAccessories4 SepStripe Connect accountTraderConnect verification requested
Wren Hill HoneyLarder7 SepDocumentsTraderFood hygiene certificate outstanding
Alder Print WorksStationery8 SepFirst listingModerationFirst listing: size vocabulary mapped
Tidewater GlassCeramics & glass9 SepApplicationModerationApplication under review
Hollins WoodturningHome10 SepShop profileTraderDelivery estimates not yet set
Merrow Soap Co.Bath11 SepApplicationModerationApplication under review
Gorse & GrainLarder14 SepDocumentsTraderAllergen sheet outstanding
Rollout order:the ten largest makers first, then the long tail once those ten had stopped emailing operations.
On screen

Five steps from application to first listing in the operations console, with the traders in the queue, the step each has reached and who each one is waiting on.

What it carries now

−64%

Vendor support load

+3.2x

Listings published/week

Unified

Catalog consistency

Support load is the operations inbox's own count of vendor requests, comparing the two months after full rollout with the two before. Listings published per week is measured across all vendors, so the figure includes the long tail that was previously publishing almost nothing. Catalog consistency is a qualitative claim, not a metric.

Client name withheld under NDA. Figures are approximate, drawn from the engagement’s own reporting.

What it settled

What the architecture settled

Self-serve vendor management reduced operational support tickets by 64%.

The support load was one queue, and removing the queue removed it. Making the operations person faster would have moved the number by a fraction of this.

Automated catalog sync increased weekly published vendor listings by 3.2x.

Publishing rose most in the long tail, which had never really been publishing to a schedule. It had been waiting for permission it no longer needed.

Unified customer-facing storefront presentation established single-brand cohesion across multi-vendor inventory.

Normalizing presentation while keeping vendor identity on the product page was the trade that made both possible: shoppers get one shop, makers keep their name.

How the work was run

01
  1. 01

    A cross-functional team of 5 worked on a time & materials basis over 16 weeks, covering Vendor platform, Order management, Storefront. We ran daily standups with an in-house lead in the room, and a demo at the end of every sprint. Scope changed twice during the engagement, and both times the change was priced and agreed before work started.

    Rollout went to the ten largest vendors first, with the team watching them use the dashboard instead of surveying them afterward. The long tail followed once those ten had stopped emailing. Time and materials suited it: the vendor dashboard's scope genuinely changed twice as we watched what makers actually did with it.

One product, nine markets

The shop used to look like sixty shops. Now every surface reads the same stock.

A maker's breakfast bowl in five glazes, stocked separately in each market. Pick a market and watch the storefront card, the product page and the maker's own grid resolve sold out, last few and in stock from one record. Switch tabs, or use the arrow keys once one is focused.

Breakfast bowl · United KingdomHBP-BWL-15 · market UK
  • Oat4
  • Moss2
  • Slate0
  • Kiln white7
  • Ember1
  1. UK stock record read
  2. One rule applied: 0 sold out, 1–3 last few
  3. Storefront card resolves
  4. Product page resolves
  5. Studio grid cell resolves
What each surface shows, from the same record
Storefront cardThe browse grid reads the line's total. No maker name on the card.
£28.00 · Arrives in 2–3 daysIn stock
Product pageEach glaze on its own · made by Harebell Pottery
OatMossSlateKiln whiteEmber
Studio grid cellWhat the maker edits, scoped to their own records
Harebell Pottery · UK14

In stock as a line (14 units). Glazes: 2 in stock, 2 last few, 1 sold out.

Why they cannot drift: no surface keeps its own copy of stock. Before, a change was an email to operations and took effect when someone read it; now the maker edits the record in the studio, and everything else resolves from it. Unit counts are illustrative, and so are the step timings.

Architecture

From a maker's edit to one shop and a transfer each

One operations inbox used to sit between every maker and the shop. Now a maker's change goes through a scoped API into the same records the storefront and the payouts read.

  1. 01 · Source
    Maker studioListings, stock and fulfillment are edited where the orders already arrive, so stock changes where the reason to change it appears.
  2. 02 · API
    GraphQL, scoped server-sideEvery query resolves against the signed-in vendor's own records, so one maker can't reach another's orders even by guessing an ID.
  3. 03 · Engine
    Order router & split payoutsA cart becomes one parcel and one Stripe Connect transfer per vendor, with commission computed per line item.
  4. 04 · State
    PostgreSQL catalogue & ordersVendor data is normalized into one image, size and delivery vocabulary before anything reaches a shopper.
  5. 05 · Delivery
    Next.js storefront & one indexSearch ranks across every vendor from a single Algolia index; vendor identity appears on the product page and stays off the browse grid.

What one maker's account can reach

Vendor isolation & money movement

Isolation lives on the server, not in the UI

A maker's dashboard resolves against their own records server-side. Guessing another vendor's order ID reaches nothing, because the query never resolves outside that maker's records.

The platform never takes custody of the funds

A basket across several makers is one payment to the shopper and one transfer per maker through Stripe Connect, with commission computed per line item.

A refund touches only its own transfer

Refunds reverse the specific transfer the line belongs to instead of the whole charge, and a payout that fails surfaces on that maker's own dashboard.

Do your vendors still email in every price and stock change? Scope your build in three minutes.

Scope your build
Have a project?

Let's talk

Running a large platform, shaping a first MVP, or getting a product ready for a funding round? Tell us where you are. We'll shape the process around it, and stay with you after launch.