Beginner
Loose Botanical Watercolour
RE Rosa Estlin
8 lessons · 2h 40m
4.9 (412)
A marketplace with two products in one codebase: the learner's catalog, cart and player, and the instructor's console for courses, bundles, associates and payouts.
Client name withheld under NDA. Engagement details are shown to the extent our agreement permits.
A two-sided marketplace usually ships the buyer's side first and bolts the seller's on later, which is why so many of them have a beautiful catalog and an instructor experience that's a spreadsheet and an email address. Growth then stalls on supply, not demand.
The instructor experience was a spreadsheet and an email address. Payouts were computed monthly by hand against a sales export, which meant instructors couldn't see what they had earned until someone told them, and a disputed figure took days to answer. That's a bad experience and, more importantly, one that can't ship at four times the number of instructors.
One platform where the instructor console is a first-class surface: course authoring, bundles, an associates program with invites, and payouts reading the same ledger the learner's checkout writes to.
The course marketplace wanted instructors to onboard themselves instead of being recruited one at a time. We built both sides, the public marketplace and the instructor console, as one platform with one ledger underneath.
A course marketplace recruiting instructors one at a time, by phone, with each new one onboarded by a member of staff. That works to about eighty instructors and then stops. The engagement was commissioned because supply was the growth ceiling and everyone could see it: demand was ahead of catalog, and catalog was ahead of the team's capacity to add to it.
Platform & Product Engineering
Built the learner catalog, cart, checkout and learning player as the public half
The learner half (catalog, cart, checkout and the player) was built as a full product, never as the demo the console would later hang off.
Built the instructor console (courses, bundles, associates, payouts) as the other half
Building both halves in parallel was the structural decision of the engagement, and it's why the console shares its components instead of merely resembling them.
Kept one ledger under both, so a sale and a payout are two views of one record
One ledger was decided before either half was built, because two systems reconciled monthly is a person's job, not an architecture.
Made instructor onboarding self-serve, with invites in place of recruitment
Instructors arrive through an invite and an application reviewed against a stated bar, then publish without a call, with review applied per course instead of per person.
Added forums, institutions and certificates once the two core sides were solid
Forums, institutions and certificates came after both core sides were solid, because a marketplace with weak supply doesn't need a community feature.
The public marketplace and the instructor console are both first-class. Neither is an admin afterthought.
The instructor console is built to the same standard as the learner-facing marketplace, not as an admin area behind a different door. Both share the component library, the auth model and the data layer, so a change to how a course is represented lands on both at once. Instructors are users of a product, not operators of a back office, and the retention numbers turned on that distinction.
The learner's half of the same product: the catalog filtered to craft, six courses priced with VAT and rated, above the month's seven best-selling titles across the marketplace.
The payout run: the same ledger read from the other side, gross split into platform fee, associate commission and instructor net, with fee and net per course and what each of four instructors is owed.
A learner's payment and an instructor's payout are two readings of the same record, with nothing to reconcile later.
A learner's payment and an instructor's payout are two readings of one ledger entry, so nothing waits for a month-end reconciliation. Revenue share, platform fee and associate commission are computed on the entry itself, so an instructor's balance is derived, never accumulated, and a refund reverses the specific entry, adjusting every downstream share without anyone recalculating anything.
Instructors onboard themselves through an invite and an application.
Supply scales by instructors bringing themselves. An invite carries its inviter, an application is reviewed against a stated bar, and an approved instructor is publishing without a single call. Course authoring, pricing and publishing are self-serve, with review applied at the course, not the person, so the marketplace grows without the team growing with it.
Instructor applications: each invite carrying its inviter, one applicant checked against the stated bar and approved without a call, and review then applied to courses, not to the person again.
A course page: eight lessons totalling 2h 40m, the bundle that pairs it with Colour Theory at one price, the instructor and her associates, and what learners said.
Instructors package courses and bring in associates, which is how supply compounds.
Bundles let an instructor package their own courses or courses across associates at a combined price, with the ledger splitting the revenue per included course instead of at a flat rate. Associates are modeled as a relationship with its own commission terms, so an instructor who brings in three others earns from that arrangement. That's what makes supply compound instead of growing one instructor at a time.
Completion produces something a learner can show, and institutions can hold seats for their own people.
Completion issues a verifiable certificate with its own URL, so a learner has something to put on a profile, more than a row in an account page. Institutions buy seats they assign and reassign themselves, with progress reporting across their cohort. That turned a consumer product into something a training budget can be spent on without a procurement conversation about individual licenses.
The learning player: lesson four of eight, the transcript tracking the playhead, the learner's own timestamped notes, and progress toward a certificate on a seat assigned by an institution.
Phase 1: The Learner's Half
Built browse, course pages, cart and checkout, then the learning player and its content view, so the path from finding a course to finishing it is unbroken.
Phase 2: The Instructor's Half
Built course authoring, bundle creation and the associates program as real product surfaces, because supply is what a marketplace actually runs out of.
Phase 3: One Ledger
Put a single ledger under both halves, so what the learner paid and what the instructor is owed are two readings of the same entry. No two systems reconciled monthly.
Phase 4: The Community Layer
Added the surfaces that keep a marketplace sticky once transactions work: discussion, institutional accounts, and certificates on completion.
Checkout: three courses, the SPRING10 discount and VAT resolved to a single figure, the ledger entry the order writes, and the learner's earlier orders beside it.
Self-serve
Instructor onboarding
1
Ledgers under the platform
12+
Surfaces in the console
−76%
Time to publish a course
Self-serve onboarding is a state, not a measurement. One ledger is architectural. Surfaces in the console is a count. Time to publish a course compares instructors onboarded after launch, from account creation to first published course, against the staff-mediated process before it.
Client name withheld under NDA. Figures are approximate, drawn from the engagement’s own reporting.
A two-sided marketplace that ships one side first stalls on supply, not demand.
Shipping the buyer's side first is the standard order, and it produces a beautiful catalog with nothing new in it. The ceiling is always supply.
If a sale and a payout live in two systems, someone spends every month reconciling them.
Two systems means someone reconciles them every month, and that person becomes the answer to every disputed figure, which doesn't scale past a few hundred instructors.
Self-serve onboarding is the difference between supply that grows linearly and supply that compounds.
Self-serve is what turns supply from a hiring problem into a compounding one, because instructors bring associates and associates bring courses.
The instructor console isn't admin. On a marketplace it's half the product.
Treating the console as admin is what produces the spreadsheet-and-email experience. On a marketplace it's half the product and deserves the same standard.
We built the instructor console in parallel with the learner marketplace, not after it, which is the decision the whole engagement turned on: supply stopped being the constraint the month it shipped. Forums, institutions and certificates followed once both halves were transacting reliably.
A dedicated team for twenty-six weeks, building both sides in parallel instead of shipping the learner half first. That was the structural decision the whole engagement turned on: the console shares the component library, the auth model and the data layer with the marketplace, so a change to how a course is represented lands on both at once, with nothing to port.
One checkout, one record
A learner buys three courses with a spring coupon. The same ledger entry is the order she sees, the shares three instructors are owed and, if one course is refunded, the reversal of exactly that line. Switch tabs, or use the arrow keys once one is focused.
Three courses, one coupon, VAT included, one figure to pay. Placing the order writes a single ledger entry with a line per course, and nothing else is written anywhere.
Basket · CY-40971
What the learner sees
Writes LE-2026-03-18427 · 18 Mar 2026, 20:14
Amounts in pounds sterling. The 20% platform fee and associate terms are illustrative; the refund is an example, not an event from the engagement.
The single ledger was decided before either half was built, because two systems reconciled monthly is a person’s job, not an architecture. Everything downstream is a reading of what checkout wrote.
When the money has to be right
Nothing to reconcile, because there is one record
What the learner paid and what the instructor is owed are two readings of the same ledger entry, so there's no month-end reconciliation. A payout can't drift from the sales it came from.
Balances are derived, never keyed in
Fee, revenue share and associate commission are computed on each entry, and a balance is derived from entries, never accumulated. Instructors see what they've earned without waiting for someone to tell them.
A refund reverses its own entry
Refunding a course reverses that specific entry, so every downstream share adjusts with it: the instructor's net, the associate commission and the fee. Nobody recalculates anything.
Running a marketplace where sellers wait to be told what they’ve earned? Scope your build in 3 minutes.
Scope your build
AI & AutomationA private knowledge assistant that searches internal case files and precedents, providing cited answers legal teams can verify in seconds.
Legal & Law Firms · 14 weeks
Product DesignA redesigned SaaS trial onboarding experience with progressive checklists, sample data, and inline guidance that turns signups into active subscribers.
Professional Services · 10 weeks
Product DesignA token-based design system in Figma and React that eliminated component duplication across 4 product squads and cut the time from design handoff to merged frontend.
Professional Services · 14 weeks
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.













