All work

Course Creator SaaS student app interface
Role
Fullstack Developer
Period
2024 - 2025
Private Build

Under NDA. The numbers are real, and I'm happy to walk through the product on a call.

A multi-sided SaaS where course creators launch schools, upload video lessons and sell through a marketplace, while students buy access and learn. Payments, subscriptions and automatic paid-content access included.

StackReact, TypeScript, NestJS
3

Products in one platform

A creator admin, a student app and a public marketplace: three products, one codebase.

4

User roles, one system

Creators, school owners, students and admins, each with its own area and permissions.

Auto

Pay once, access unlocks itself

Checkout and recurring subscriptions drive entitlement: on a confirmed payment, the right course or plan activates automatically, gated server-side.

What I built

Fullstack across a multi-sided SaaS: the creator admin and onboarding, the student app, the marketplace, and the payment-to-access backend behind it.

Creator onboarding
School admin dashboard
Course builder
Video upload UI
Object storage
Marketplace & catalog
Payments & subscriptions
Paid access control

What it had to handle

Users
Four roles: creators, school owners, students, admins. One product, separate areas and permissions.
Content
Multi-gigabyte video lessons that can't run through the app server.
Money
Checkout, recurring subscriptions and automatic paid access.
The problem

How I approached it
    01
    Architecture

    02
    Onboarding

    03
    Video

    04
    Payments

How it helped
  • Creators could launch a school and start selling without manual setup.
  • A purchase unlocked the right content automatically, no support ticket.

What I chose (and what I didn't)

Direct-to-storage
Video uploads go straight to object storage instead of through the API, presigned and validated.
Server-gated access
Backend guards decide entitlement, never the client; content is checked before it's served.
Webhook-driven activation
Access activates from confirmed payment status instead of a manual grant: purchase, subscription or renewal.
State per surface
MobX state separated per role so the three products never bleed into each other.

Tech stack

ReactTypeScriptMobXNestJSPostgreSQLRedisTypeORMObject Storage

Open to frontend & fullstack roles.