All projects
course-app.sh

Course App

Shipped

Course platform with zero video storage costs — unlisted YouTube hosting behind a custom YT Player.

Full-stack engineer

course-app_case_study.sh

~/projects cat course-app_case_study.txt

// Problem

Course platforms burn budget on video storage buckets and CDN delivery — every uploaded lesson adds recurring infrastructure cost.

// What I built

I built Course App as a course platform where videos live as private/unlisted YouTube uploads — no S3 or CDN costs. Playback uses my custom YT Player wrapper so videos look like a native in-app player (custom controls, no ads, no obvious YouTube chrome) even though they are served via YouTube iframe.

// Architecture

Astro + React on Cloudflare Pages. Lucia session auth, Drizzle ORM over PostgreSQL. Video layer delegates to YT Player by YouTube video ID — unlisted uploads stored on YouTube, branded playback in-app. Zod validation with react-hook-form. Wrangler for deployment.

// Stack

Astro React TypeScript Lucia Drizzle ORM PostgreSQL Cloudflare Pages Tailwind Zod Wrangler YouTube YT Player

// Outcomes

  • ▸ Zero storage-bucket video hosting — unlisted YouTube as the video backend
  • ▸ Seamless branded playback via custom YT Player integration
  • ▸ Full course platform with Lucia session auth on Cloudflare Pages

// Related projects