A platform for selling online courses: lessons, video hosting, payments, student accounts and completion tracking in one product.
Build me a course platform that replaces Teachable — and know why this is ALMOST. The lessons and the gating are a fortnight. What you are taking on is **video delivery and payments bundled**: transcoding, bandwidth, and being the merchant of record for a product sold across borders. Video is the recurring cost, and tax on digital sales is the administrative one. Neither is hard; both are ongoing. STACK - Astro with a Node adapter, or Fastify with server-rendered templates - SQLite through better-sqlite3, WAL mode - ffmpeg on a worker for transcoding - Object storage with a CDN in front - One payment provider, hosted checkout - Caddy in front THE DATA MODEL - courses: id, slug, title, description_md, cover_path, price_cents, currency, pricing_kind, is_published, drip_json - sections: id, course_id, title, position; lessons: id, section_id, title, body_md, video_id, attachments_json, position, is_preview, duration_ms - videos: id, source_path, sha256, duration_ms, status; renditions: id, video_id, height, bitrate, path, bytes - students: id, email, name, created_at, last_seen_at - enrolments: id, student_id, course_id, order_id, started_at, expires_at, completed_at - progress: student_id, lesson_id, position_ms, completed_at — the resume position is what brings somebody back to lesson four - orders, subscriptions, provider_events — with idempotency by event id - quizzes, questions, attempts, certificates, if you need them - One students table shared by courses, email and the community, so a person is one record VIDEO, THE REAL COST - A ladder of renditions packaged as HLS so a player adapts to the connection. Transcoding is CPU-hours per video; queue it with a concurrency cap - Keep the original untouched, always - A poster frame and captions from a local speech model, editable. A course without captions excludes people and is harder to search - **Signed, expiring playback URLs** tied to an enrolment, with the manifest and the segments both protected. A public storage path means the course is on a file-sharing site within a week - Say plainly in the README that this is not copy protection — anybody determined can record a screen. The goal is to stop casual sharing, and anything stronger costs more than it returns - Measure bandwidth per course. That number is the business MONEY AND TAX - Hosted checkout; the order is created from the verified webhook, never from the browser returning to a success page - Idempotency by event id and out-of-order delivery handled — the subscription-updated event routinely arrives before checkout-completed - For digital goods sold across borders the tax rate is usually the buyer's. Collect the country, apply the rate, and store two pieces of non-conflicting evidence of where they were. That evidence requirement is what people discover a year late - Payment plans, one-off, subscription, and a coupon system with a scope and a limit - Refunds revoke access, recorded, and the enrolment is marked rather than deleted DELIVERY AND GATING - Access checked on the server for every lesson, every video URL and every attachment. Gating in the browser is not gating - Drip: a section released a set number of days after enrolment, computed from the enrolment date rather than a stored schedule - Preview lessons visible without buying, which is the best sales tool a course has - Completion tracked per lesson, with a certificate if it is wanted THE STUDENT EXPERIENCE - A player that remembers where they stopped, on every device - Next and previous lesson always one click away, and a visible progress bar for the course. Those two things do more for completion than anything else - Notes per lesson, and a question that goes to the instructor - Everything works on a phone, over a poor connection EMAIL - Receipts, enrolment confirmations, drip notifications and a nudge for somebody who stopped at lesson three. That last one is the highest-value message a course platform sends - SPF, DKIM and DMARC on your own domain, documented — a missing receipt is a support message - One-click unsubscribe for anything not transactional OPERATIONS - .env: DATABASE_PATH, STORAGE_PATH, BASE_URL, SESSION_SECRET, SMTP_URL, PROVIDER_KEY, PROVIDER_WEBHOOK_SECRET, CDN_URL, HASH_SALT - Migrations on boot, each once; nightly backup off the machine — this holds your students and your revenue - Health endpoint checking the database, mail, the provider and free disk WHAT MATTERS MOST Signed playback URLs and webhook idempotency. Try to reach a video without an enrolment, and replay a payment event twice — those two are where a homemade course platform loses money.
What you lose
- Video hosting and adaptive delivery, which is the expensive half of a course platform
- Payments, tax and payouts without you arranging any of it
- A student experience that already works on a phone
If you would rather not build
- A static site plus Stripe plus a video host
- Podia or Gumroad, for something simpler
What it costs
read from their page 15 Aug 2026
| Plan | Billed monthly | Billed yearly | Last read |
|---|---|---|---|
| Starter Plan | $39/mo | — | 15 Aug 2026 |
Their pricing page is where these came from. Seeing a different price? Tell us.
The escape hatch
open source · no votes, no paid placement
Moodle
$0A mature open learning platform with enrolment and assessment.
moodle/moodlefree · open source
Why this verdict
our own opinion · changed only by a person
60/100
Verdict kinda at 60. Everything except video is a weekend; self-hosting the video is what turns a cheap build into an expensive one.
History
tracked since 10 Aug 2026 · nothing is ever overwritten
Questions about Teachable
answered from the record above
Is Teachable free?
No — the plan we track is $39 a month. Starter at $39/month billed monthly, $29 annually; Builder is $89 monthly.
Can you replace Teachable by building your own?
ALMOST. A weekend of work, and real gaps remain. Replacement score 60 out of 100, build time a weekend. Read what you lose before you decide.
How much does Teachable cost?
$39 a month on Basic — $468 a year. Recorded 14 Aug 2026.
What do you lose by replacing Teachable?
Video hosting and adaptive delivery, which is the expensive half of a course platform; Payments, tax and payouts without you arranging any of it; A student experience that already works on a phone. If any of those carry weight for you, keep paying.
Is there an open-source alternative to Teachable?
Yes: Moodle, Medusa. The prompt on this page is for when you want it your way instead.
Related entries
same category first, most replaced first
Every week, something stops being worth paying for.
New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.
free forever · no tracking pixel · stored here, never passed to anyone

