How to Build an Online Course Platform: Lessons, Video, Payments and Progress
How to build your own online course platform: lessons and modules, private video hosting, payments that unlock access, progress tracking and trade-offs.
Mythex Team · · 6 min read
To build an online course platform you need a catalogue and sales page for each course, lessons organised into modules, a secure place to host video, payments that unlock access, and a way for students to track their progress. An AI app builder can create the pages, database and logic from a description; you connect a payment provider and a video host. The detail that matters most is access control: every lesson must check on the server that the student has paid, not just hide the link.
What a course platform needs
Start by listing who uses it and what each person does.
| Who | What they need |
|---|---|
| Visitor | Browse courses, read a sales page with curriculum, price and preview lesson, buy |
| Student | Log in, see "my courses", watch lessons in order, mark complete, resume where they left off |
| Instructor / you | Create courses, modules and lessons, upload or link videos, set prices, see who enrolled |
And the data behind it:
| Data | Main fields |
|---|---|
| Course | Title, description, price, cover image, published or draft |
| Module | Course, title, order |
| Lesson | Module, title, order, video reference, text notes, attachments, free-preview flag |
| Student | Account, name, email |
| Enrolment | Student, course, how they got access (purchase, coupon, manual), date |
| Progress | Student, lesson, completed, last position |
Optional features, roughly in the order people add them: downloadable resources, quizzes, certificates of completion, comments or a discussion area, drip release (unlock a module each week), coupons, bundles and subscriptions.
Decisions to make before you build
Where the video lives
Video is the part that's easiest to get wrong. Video files are large, need to stream at different qualities on different connections, and are what people most want to copy. Storing raw video files in your app's general file storage and serving them yourself is usually a poor choice: it's slow on weak connections and bandwidth costs grow with every view.
| Option | Good for | Watch out for |
|---|---|---|
| Dedicated video host with privacy controls (Vimeo, Mux, Bunny Stream, Cloudflare Stream and similar) | Paid courses | Each has its own pricing model; compare storage, minutes delivered and features on their sites |
| Unlisted YouTube videos | Free courses, lead magnets | Unlisted is not private: anyone with the link can watch and share |
| Files in your own storage | Short clips, downloadable PDFs and audio | Bandwidth costs and no adaptive streaming |
Whichever host you pick, look for the ability to restrict playback to your domain or to issue short-lived playback links. That stops a copied embed code from working on someone else's site.
How people pay
- One-time purchase per course. Simplest. A checkout page through a payment provider such as Stripe, then access for life.
- Subscription for all courses. Better if you publish regularly. You also have to remove access when a subscription ends. Our guide to building a membership site goes through subscription gating in detail.
- Free course with paid upgrades. Good for building an audience first.
Also consider tax. Many countries tax digital products sold to consumers, sometimes based on where the buyer lives. Payment providers offer tools for calculating it, and some services act as the "merchant of record" and handle tax for you. Check your obligations with an accountant before you start selling internationally.
How access is unlocked
After a successful payment, the payment provider sends your server a message (a webhook) saying who paid for what. Your server then creates the enrolment record. Don't unlock access based only on the student landing on a "thank you" page, because that page can be visited without paying.
Build it step by step
Step 1: Start with one course and no payments
Build the student experience first, with one real course and a few lessons. If watching and completing lessons isn't pleasant, payments won't fix it.
Build an online course site for Sketch Daily, a drawing course for beginners. A home page listing courses, and a course page with description, curriculum by module, price and one free preview lesson. Logged-in students see "My courses", and a lesson page with an embedded video, notes below it, "Mark complete" and next/previous buttons, with a progress bar per course. Save courses, modules, lessons, enrolments and progress in a database. Add an admin area where I can create courses, reorder lessons and paste a video embed link for each lesson. Clean, calm design that works on phones.
Step 2: Add accounts
Students need to log in so their progress and purchases follow them. Email and password is the usual start; "magic link" sign-in by email is friendlier for people who forget passwords. See how to add login to your app.
Step 3: Lock the lessons on the server
Ask for every lesson page and every lesson data request to check, on the server, that the logged-in student is enrolled in that course (or that the lesson is marked as a free preview). Then test it: log in as a student who isn't enrolled and paste a lesson URL directly into the browser. You should see a "buy this course" message, not the lesson.
Step 4: Connect payments
Create a payment provider account, use its test mode first, and store the secret key as an environment variable. Ask for a checkout button on each course page and a webhook endpoint that creates the enrolment when payment succeeds. Test with the provider's test cards, including a failed payment. How to add payments to your app walks through it.
Step 5: Add the emails
At minimum: a receipt with a link to the course, and password reset. Later, a nudge for students who haven't logged in for a while. Email needs a sending provider and a verified domain.
Step 6: Test as three different people
Before launch, go through the platform as a visitor (can I understand what I'm buying?), a new student (can I pay, log in and start lesson one in under two minutes?) and yourself as instructor (can I add a lesson without asking for help?).
Common mistakes
- Hiding lessons only in the interface. If the lesson data can be fetched without an enrolment check on the server, anyone can get it.
- Serving large video files yourself. Slow for students, expensive for you.
- Building quizzes, certificates and community before anyone has bought. Sell one course first.
- No preview lesson. People want to hear your voice and see your teaching before they pay.
- Forgetting refunds and cancelled subscriptions. Decide what happens to access when either occurs, and build it.
- No way to fix a student's access by hand. You'll need an admin action to grant or remove access for support requests.
What it costs
The ongoing costs are hosting and a database for the app, a video host (priced by the host, often on storage and viewing), payment processing fees per sale, an email provider, and a domain. Hosted course platforms bundle most of this into a monthly plan, sometimes with transaction fees on lower tiers. Compare the total, including your own time for maintenance, before deciding. We don't quote vendor prices here because they change; check each vendor's pricing page.
When a ready-made product is the better choice
Hosted course platforms such as Teachable, Thinkific, Kajabi and Podia are built to handle video, checkout, student accounts and emails in one place, and some also help with sales tax; check each one's current features. They're usually the better choice when:
- You're selling a standard video course and want to launch this week
- You don't want to maintain software at all
- You want built-in marketing features like email sequences and sales funnels
Building your own makes sense when the learning experience itself is the product (interactive exercises, a custom practice tool, cohort features), when you want complete control over branding and data, or when the platform fees at your volume outweigh the cost of running your own. A middle path is to validate on a hosted platform, then build once you know exactly what's missing.
Building it with Mythex
Mythex is an AI app builder: you describe the course site, and it builds the pages, admin area and database in a live preview, then publishes it to a public URL. It adds a database to the project when your app needs to save courses and progress, and file storage for uploads such as PDFs and images. Mythex doesn't include video hosting, student login or course payments as built-in products: you choose a video host, add app login with an auth library or provider, and connect your own Stripe account with keys stored as project secrets. The docs cover Stripe payments, adding login for your app's users and handling webhooks.
For a quicker start, try the course landing page template for the sales page or the course storefront template for a catalogue. If your course is part of a bigger product idea, how to build a SaaS MVP covers what to leave out of a first version.
Questions
Where should I host course videos?
Use a video hosting service built for it rather than storing video files in your app. Dedicated hosts handle streaming quality, different devices and domain restrictions, and most offer privacy settings so videos only play on your site.
Can I use unlisted YouTube videos for a paid course?
You can, but unlisted is not private: anyone with the link can watch and share it. For paid content, a host with domain-level privacy controls or signed playback links protects your work better.
How do students get access after they pay?
The payment provider tells your server that the payment succeeded, usually through a webhook, and your server records that the student owns the course. Each lesson page then checks that record on the server before showing the content.
Should I build my own course platform or use Teachable or Kajabi?
Use a hosted course platform if you want to sell a standard video course with the least setup and maintenance. Build your own when you need a specific learning experience, your own branding throughout, or features those platforms don't offer.