Full-Stack Client Platform
DMTT Academy
A coaching platform built for a private table tennis coach, centered on paid self-paced courses: a block-based content editor, Stripe enrollment, protected Mux video, a Google-auth student portal, and an admin dashboard for students, revenue, and reviews.

Employer signal
What This Project Shows
This is my first end-to-end project for a paying client, so it shows I can take a real brief from data model to deployed product — including payments, secure media, and the unglamorous launch work.
Problem
What Needed To Be Solved
A coach wanted to sell structured online courses and take private-lesson inquiries without stitching together off-the-shelf tools. The platform had to handle real money, gate paid content reliably, and stay simple enough for one non-technical owner to run.
Approach
How I Built The Solution
I modeled the domain in Prisma (users, courses, modules, content blocks, enrollments) and gated course access on a confirmed Stripe payment recorded by webhook rather than trusting the browser redirect. Paid video streams through Mux with short-lived signed tokens so it cannot be hotlinked, and the whole thing runs on Vercel behind a documented pre-launch checklist.
Outcome
What It Demonstrates
DMTT Academy demonstrates real client delivery: a deployed full-stack product that takes payments, protects paid content, and was carried through a documented launch process for a non-technical owner.
Evidence From Source
Source signal
Course access is computed server-side from `enrollment.paidAt` with an admin bypass, and the Stripe webhook is the source of truth for fulfillment — the client redirect never grants access on its own.
Engineering decision
Public course images are served from a CDN while video is gated behind Mux signed tokens — a deliberate split that protects the paid asset that actually matters instead of pretending screenshots can be prevented.