§
§ · case study

EdTech, $40K to $310K MRR on hybrid LMS.

An archetype drawn from Shopify + custom LMS hybrid work we have shipped for course businesses. Shopify runs checkout; the LMS runs learning. One customer identity across both.

§ 01 · archetype · course platform

A course business grew from $40K to $310K MRR by refusing the all-in-one LMS.

Teachable, Thinkific, Kajabi, and Podia sell the all-in-one promise: checkout, billing, course player, community, email, all in one platform. The brand tried Teachable for six months and hit the ceiling the all-in-one always hits eventually: the checkout UX is fine but not Shopify-level, the course player is fine but not custom-brand-level, the community is an afterthought, and the data sits in four dashboards. We unbundled. Shopify kept checkout and billing. A custom Next.js LMS ran the learning experience. Klaviyo ran email. The architecture is more complex. The MRR curve argues it was the right call.

MRR growth
7.7x

$40K at month 1; $310K at month 18. Growth driven equally by enrollment volume (+240%) and by pricing power from the certificate tier.

completion rate
62%

Above the industry 12-15% average. Completion is the single biggest driver of referral and subsequent course purchase.

churn
3.2%

Monthly churn on the membership tier. Certificate-track users churn at 1.8%; course-only users at 4.6%.

§ 02 · the challenge

All-in-one works until the all-in-one becomes the ceiling.

The founder had spent a year teaching small cohorts on Zoom. The content was strong, the completion rate was strong, the NPS was strong. Teachable was a reasonable first platform to bundle checkout, hosting, and course delivery at launch. At $40K MRR the problems surfaced. Teachable's checkout converted 22% worse than Shopify for the same traffic, largely because Shop Pay saves 40 percent of returning buyers at the account creation step. The course player was fine for a lecturer but offered no way to ship a certificate, no way to issue proctored quizzes, no way to build a community layer without bolting on Circle or Discord awkwardly.

The unbundle decision came down to one question: which single improvement would move the MRR curve the most? The answer was enrollment conversion rate, which is a checkout problem. Shopify's checkout is the best in the world. Moving checkout to Shopify meant customer records, payment, refunds, and subscription billing lived in Shopify. Every other function became downstream of that.

The risk was fragmentation: two systems with two databases, two admin surfaces, two failure modes. The architecture below is how we kept fragmentation from becoming the founder's problem.

§ 03 · the hybrid architecture

Two systems. One customer.

Editorial systems diagram showing Shopify handling checkout, billing, customer record, and refunds on the left; custom LMS handling course player, progress, quizzes, certificates, and community on the right; connected by a bidirectional webhook bridge; and a single ONE CUSTOMER box at the bottom representing shared identity.
Fig. 1 · the hybrid architecture · two systems, one customer identity
shopify handles
  • Checkout and Shop Pay (22% conversion lift vs Teachable)
  • Subscription billing via Shopify Subscriptions for membership tier
  • Customer record and order history (the system of record)
  • Refunds, dunning, retention flows
  • Marketing site and course catalog pages (Shopify Online Store 2.0)
custom LMS handles
  • Course player with chapter navigation, video transcripts, notes
  • Progress tracking across chapters, quizzes, assignments
  • Certificate issuance (PDF + shareable URL + LinkedIn credential)
  • Community layer (threads, comments, instructor Q&A)
  • Admin dashboard for instructor course authoring
§ 04 · the webhook bridge

Two databases. One source of truth for access.

Shopify is the authoritative customer record. The LMS holds a mirror customer table synced via webhook. Access entitlements are computed at the LMS but sourced from Shopify order tags and metafields. When a subscription lapses in Shopify, a webhook revokes LMS access within 60 seconds. When a refund fires in Shopify, course history in the LMS is archived. The logic is boring on purpose.

  1. Customer creates account on Shopify → webhook fires → LMS creates mirror user with customer_id reference
  2. Customer purchases course → Shopify order webhook → LMS grants entitlement keyed by Shopify product_id
  3. Customer completes chapter → LMS stores progress locally; no Shopify round-trip
  4. Customer requests refund → Shopify order refund webhook → LMS revokes entitlement + archives progress
  5. Customer cancels subscription → Shopify subscription cancellation webhook → LMS revokes membership access at period end
  6. Instructor publishes new course → LMS admin → push product record to Shopify via API for sale
§ 05 · the stack

What actually runs the platform.

checkout

Shopify Plus with Shop Pay, Apple Pay, Google Pay. Subscription tier via Shopify Subscriptions.

LMS frontend

Next.js 16 App Router with Server Components. Deployed to Vercel edge.

LMS database

Postgres on Neon. Users, courses, progress, certificates, community threads.

video

Mux for video hosting and adaptive playback. DRM on premium courses.

webhook bridge

Inngest for Shopify webhook → LMS entitlement sync with retries.

certificates

Custom PDF generator (PDFKit) + LinkedIn credential integration + unique verification URL.

§ 06 · the MRR ladder

Eighteen months of compounding MRR.

Editorial line chart showing monthly recurring revenue climbing from $40K in month one through inflection points at month three when the certificate tier launched, month nine when community went live, and month fifteen when the enterprise plan launched, ending at $310K in month eighteen.
Fig. 2 · the MRR ladder · 18 months, three inflection points
from the founder · archetype composite
"Teachable was good enough to start. It was not good enough to scale. The hybrid architecture felt like more work up front and was. The MRR curve paid it back in six months."
Composite quote
Patterns from multiple course-business founder conversations
§ 07 · start a similar build

Running a course business past the all-in-one ceiling?

The hybrid architecture is 12 to 20 weeks to ship, depending on course catalog depth. Checkout migration first, LMS second, certificate layer third. Scoped quote in 48 hours.