Teachable

teachable.comcontributed by Samuele Ongaro

ALMOST

A weekend of work, and real gaps remain.

A platform for selling online courses: lessons, video hosting, payments, student accounts and completion tracking in one product.

Promptfree, for everyone, and the only version there is
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

PlanBilled monthlyBilled yearlyLast 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

$0

A mature open learning platform with enrolment and assessment.

moodle/moodlefree · open source

Medusa

$0

Handles the commerce half if the course is a product.

medusajs/medusafree · 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

Interest · last 30 dayspeak 2/day
views01230 Aug4 Sept9 Sept14 Sept19 Sept24 Sept28 Sept
— views— prompt copies none yet— votes none yet

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

All 27 in Commerce & contracts

Not sending yet

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

Esc