/ tech-stacks / Best Tech Stack for an Online Course Platform as a Solo Developer
tech-stacks 11 min read

Best Tech Stack for an Online Course Platform as a Solo Developer

The best tech stack for building an online course platform as a solo developer - frameworks, databases, hosting, and tools.

Hero image for Best Tech Stack for an Online Course Platform as a Solo Developer

Best Tech Stack for an Online Course Platform as a Solo Developer

Online education is a $400+ billion market and still growing. Building a course platform as a solo developer means competing with Teachable, Thinkific, and Udemy, but there's plenty of room for niche platforms, white-label solutions, or platforms with unique features those giants don't offer. The technical challenge is managing video content, tracking progress, handling payments, and delivering a smooth learning experience without a team of 50 engineers.

Here's the stack that makes it manageable for one person.

Layer Pick
Frontend Next.js (React)
Backend Next.js API routes + tRPC
Database PostgreSQL (via Prisma)
Video Mux or Cloudflare Stream
File Storage Cloudflare R2
Auth NextAuth.js (Auth.js)
Payments Stripe
Hosting Vercel

Frontend: Next.js

A course platform has two distinct frontend needs: a marketing site (course listings, landing pages, SEO-optimized content) and a learning app (video player, progress tracking, quizzes, discussion). Next.js handles both elegantly. It is the most battle-tested React meta-framework available, with roughly 139,600 stars on GitHub and around 40 million weekly npm downloads as of May 2026. The current release is Next.js 16.2.6, so any tutorial or App Router pattern you find this year still maps cleanly to what you install.

Course landing pages should be server-rendered for SEO. When someone searches "learn Python online," your course page needs to rank. Next.js server components give you fast, crawlable pages with dynamic pricing and enrollment counts.

The learning dashboard is a client-heavy application. Video playback, progress bars, note-taking, and quiz interactions all need real-time state management. Use React state for the lesson player and sync progress to your backend on meaningful events (lesson completed, video paused, quiz submitted). Don't sync every second of playback.

For the video player, Video.js or Plyr are solid open-source options. Both support HLS streaming, custom skins, and playback speed controls. Your video hosting service (Mux or Cloudflare Stream) will provide HLS URLs that these players consume directly. Video.js is the heavier, more extensible of the two, with about 39,800 GitHub stars, roughly 929,000 weekly npm downloads, and a current release of 8.23.7. Plyr is the lighter, design-forward pick at around 29,800 stars, about 269,000 weekly downloads, and version 3.8.4. Both are MIT-licensed and free, so the choice comes down to how much you plan to customize the player chrome.

Backend: Next.js API Routes + tRPC

Keeping everything in one Next.js project is the right call for a solo developer. Your backend handles:

  • Course management - CRUD for courses, modules, lessons
  • Enrollment - Track who bought what, manage access
  • Progress tracking - Lesson completion, quiz scores, certificates
  • Video - Signed URL generation for secure video access
  • Payments - Stripe webhooks for purchases and subscriptions

tRPC gives you end-to-end type safety between frontend and backend. When you change a course API response, TypeScript errors show up immediately in your components. For a solo developer maintaining everything, this prevents an entire category of bugs. tRPC is mature and widely adopted, with roughly 40,300 GitHub stars and about 3.5 million weekly npm downloads of @trpc/server as of May 2026. The current major line is v11 (latest 11.17.0), which is the version any new project should pin to.

For authenticated video access, generate signed URLs or use your video provider's token-based authentication. Never expose raw video URLs to the client since your entire business depends on content protection.

Database: PostgreSQL + Prisma

Your data model for a course platform is relational by nature: courses have modules, modules have lessons, users have enrollments, enrollments have progress records. PostgreSQL with Prisma is the natural fit. Prisma is the most popular TypeScript ORM, with about 46,000 GitHub stars and roughly 11.6 million weekly npm downloads as of May 2026. The current major line is Prisma 7 (latest 7.8.0), so generate your client against that and you get the modern, faster query engine out of the box.

Key tables: users, courses, modules, lessons, enrollments, lesson_progress, quiz_submissions, certificates. The relationships between these are straightforward foreign keys.

Host on Neon for the free tier and serverless scaling, or Supabase if you want real-time features (live comment sections, collaborative notes). Neon's free plan gives you 0.5 GB of storage per project, 100 CU-hours of compute, and 5 GB of egress, after which the Launch tier is pure usage-based pricing at $0.35 per GB-month of storage and $0.106 per compute-hour with no fixed monthly fee. Supabase's free tier includes a 500 MB database, 50,000 monthly active users, and 1 GB of file storage (projects pause after a week of inactivity, and you are capped at two active projects), while the Pro plan is $25 per month and bumps you to an 8 GB included database, 100,000 monthly active users, and daily backups. For a course platform that is mostly read-heavy with bursty enrollment traffic, Neon's scale-to-zero compute usually wins on cost early on, and Supabase pays for itself once you want built-in auth, storage, and realtime in one bill.

One important schema decision: store lesson progress as individual records, not as a JSON blob on the enrollment. You'll want to query things like "which lessons have the highest drop-off rate" and "what percentage of enrolled users completed module 3." Separate records make these queries simple.

Video: Mux or Cloudflare Stream

Video is the most expensive and complex part of a course platform. Don't try to build your own transcoding pipeline. Use a managed service.

Mux is the premium choice. It handles upload, transcoding to HLS (adaptive bitrate), thumbnail generation, and provides a beautiful player component. Its per-minute pricing is transparent and broken into three dimensions. Encoding on the baseline tier is free, with higher-quality encoding starting around $0.025 per minute. Storage runs $0.0024 per minute at 720p and $0.003 per minute at 1080p. Delivery is metered with the first 100,000 minutes per month free, then $0.0008 per minute baseline (about $0.001 per minute at 1080p). Optional DRM is $100 per month plus $0.003 per play. For a platform with 100 hours of content and moderate viewership, that storage plus delivery lands in roughly the $50 to $100 per month range once you are out of the free delivery allowance, though you should check current pricing as Mux meters several dimensions.

Cloudflare Stream is the budget-friendly alternative. Pricing is two dimensions you prepay and meter: $5 per 1,000 minutes of stored video and $1 per 1,000 minutes of delivered video, with ingest and encoding always free and no separate egress charge. For a solo developer starting out, this flat, predictable model is significantly cheaper and easier to forecast than Mux's multi-dimensional metering.

Both provide signed URL access, so you can restrict video viewing to enrolled students.

Auth: NextAuth.js

NextAuth.js (now Auth.js) handles authentication with minimal configuration. Set up email/password and social logins (Google, GitHub) in under an hour. It integrates cleanly with Prisma for session and user storage. The project carries about 28,300 GitHub stars, and the next-auth package sees roughly 4.3 million weekly npm downloads while the newer framework-agnostic @auth/core adds another 3.2 million as of May 2026. It is free and open source under the ISC license.

For a course platform, you'll also need role-based access: students, instructors, and admins. Extend the NextAuth session with a role field and check it in your middleware and API routes.

Payments: Stripe

Stripe is the clear winner for course payments. You'll use:

  • Checkout Sessions for one-time course purchases
  • Subscriptions for all-access membership models
  • Connect if you allow other instructors to sell (marketplace model)

Stripe handles tax calculation, invoicing, refunds, and global payment methods. The webhook integration with Next.js API routes is straightforward. Listen for checkout.session.completed events to grant course access. Stripe's standard US pricing is 2.9% plus 30 cents per successful domestic card charge, with no setup or monthly fee. Manually entered cards add 0.5%, international cards add 1.5%, and currency conversion adds 1%, so budget a little above the headline rate if you sell globally.

Nice-to-Haves

  • Resend for transactional emails (welcome, enrollment confirmation, completion). The free tier covers 3,000 emails per month at up to 100 per day, and the Pro plan is $20 per month for 50,000 emails.
  • Upstash Redis for rate limiting and caching popular course data. The free tier includes 256 MB of data and 500,000 commands per month, and pay-as-you-go is $0.20 per 100,000 commands after that.
  • Vercel Blob for course resource files (PDFs, slides, code downloads)
  • react-pdf for in-browser PDF viewing of supplementary materials
  • OpenAI for AI-powered quiz generation from lesson transcripts

Monthly Cost Breakdown

Service Cost Source basis
Vercel (Pro) $20/user/month (Hobby is free) $20 included usage credit, then pay-as-you-go
Mux or Cloudflare Stream $5-100/month Stream $5/1,000 min stored + $1/1,000 min delivered; Mux metered
Neon Postgres (free tier) $0 0.5 GB storage, 100 CU-hours, 5 GB egress
Cloudflare R2 (files) ~$1-3/month $0.015/GB-month, 10 GB free, egress free
Stripe 2.9% + 30c per transaction US standard domestic card rate
Domain ~$1/month typical .com amortized annually
Total ~$27-125/month + Stripe fees

Cloudflare R2 deserves a callout for file storage (PDFs, slides, code downloads). It is $0.015 per GB-month with the first 10 GB free, charges $4.50 per million Class A (write) operations and $0.36 per million Class B (read) operations after generous free allowances, and critically has zero egress fees. That last point matters on a course platform where students download the same resource files repeatedly.

The variable cost is video. Start with Cloudflare Stream at the flat $5 per 1,000 minutes stored and upgrade to Mux when you need advanced analytics or a better player experience.

Video Hosting at a Glance

Dimension Cloudflare Stream Mux
Encoding Free Free baseline, ~$0.025/min higher quality
Storage $5 per 1,000 min (any resolution) $0.0024/min at 720p, $0.003/min at 1080p
Delivery $1 per 1,000 min First 100k min/mo free, then ~$0.0008-0.001/min
Egress Included Included in delivery
DRM n/a (token-signed URLs) $100/mo + $0.003/play
Pricing model Flat, prepaid, easy to forecast Multi-dimension metered, scales with quality

Conclusion

The best stack for a solo developer building a course platform: Next.js with tRPC for the full-stack application, PostgreSQL with Prisma for structured course data, Mux or Cloudflare Stream for video hosting, Stripe for payments, and Vercel for deployment.

The critical decision is video hosting. Don't self-host video. Don't transcode on your own servers. The encoding, delivery, and DRM complexity will consume all your development time. Use Mux or Cloudflare Stream, focus on building a great learning experience, and let the managed services handle the infrastructure that's genuinely hard to get right.

Sources

Pricing, version, and popularity figures verified on 2026-05-30. Pricing changes often, so confirm current rates on each vendor's page before you budget.

Built by Kevin

Like this? You'll like what I'm building too.

Two ways to support and get more of this work.

Desktop App

HEARTH

A privacy-first Life OS for your desktop. Journal, tasks, and notes that stay on your machine. Coming soon, direct download from this site.

Read more
Digital Products

MY TOOLKITS

Receipts-first toolkits for shipping after hours, building Claude agents, publishing on Amazon, and more. The exact methods I used, not theory.

Browse on Whop

Need This Built?

Kevin builds products solo, from first version to live. If you want something like this made, work with him.