Case Study · EdTech & E-Learning
Secure Video Streaming Platform & Learning Analytics LMS
Migrated an education provider's premium course library off public YouTube onto a private, authenticated streaming platform — then built the LMS and learning analytics on top of it.
- Industry
- EdTech & E-Learning
- Timeline
- 2025
- What we did
- Content migration · Secure video streaming · LMS development · Learning analytics · Cloud infrastructure & CI/CD
The Challenge
What the client was up against
The provider's premium course library — the thing students were paying for — was sitting on public YouTube, watchable by anyone with the link. Moving it meant migrating a large volume of video and its metadata without losing the catalogue structure. On top of that, the client had no idea what students actually did with the content: no watch time, no completion rates, no signal about which topics people were struggling with.
Our Approach
How we solved it
Migrate the metadata, not just the files
Videos are the easy part. The catalogue — titles, descriptions, ordering, course structure, the relationships between lessons — is what makes the library usable, and it had to survive the move intact. We wrote the migration as a repeatable Python pipeline that moved content and metadata together onto a private streaming platform, so it could be re-run and reconciled rather than being a one-shot script nobody dared touch twice. The library came out the other side whole, not as a folder of orphaned video files.
Put the content behind the paywall, properly
Playback is gated on authenticated access, so a video URL alone is not a key to the content. Only signed-in, entitled users can stream — which is the entire reason for the migration, and the part that has to be enforced at the delivery layer rather than merely hidden in the UI.
Make it fast enough that nobody misses YouTube
Students had been watching on one of the most optimised video platforms on earth, so the replacement could not feel worse. We served content through Cloud CDN, caching it at edge locations near the viewer, with managed load balancing behind it to spread traffic and absorb the peaks that come with cohort-based courses, where everyone hits play at once. Redis carries the hot path — sessions, entitlement checks, and the lookups that would otherwise hammer the database on every play.
Turn playback into insight
Because delivery was now ours, every play, pause, and drop-off became data. Playback events land in Postgres and a Python pipeline aggregates them into the metrics educators actually asked for: engagement, watch time, completion rates, progress, and per-course and per-subject performance — so they can see which lesson loses half the class and fix it, instead of guessing.
Ship it the same way every time
The whole platform is containerised with Docker, with images published to Artifact Registry and rolled out on GCP through a CI/CD pipeline. Deployments stopped being an event: the same image that passed CI is the one that runs in production, so 'works on my machine' never enters the conversation.
What We Built
Inside the solution
- Repeatable Python migration pipeline for video content and catalogue metadata
- Private streaming with authenticated, entitlement-gated playback
- LMS with course management and structured student learning paths
- Cloud CDN edge caching for low-latency playback near the viewer
- Managed load balancing on GCP for high-traffic resilience and scale
- Redis caching on the hot path for sessions and entitlement checks
- Analytics dashboards for engagement, watch time, and completion rates
- Per-subject and per-course reporting to surface struggling topics
- Dockerised services published to Artifact Registry and deployed via CI/CD
Technology
- Next.js
- TypeScript
- Python
- Tailwind CSS
- shadcn/ui
- PostgreSQL
- Redis
- Docker
- Google Cloud Platform
- Cloud CDN
- Artifact Registry
- CI/CD
The Outcome
Premium content moved behind authentication, with CDN-backed playback and analytics educators actually use.
- Private
- Premium library moved off public YouTube
- Edge-cached
- Playback served from Cloud CDN close to the viewer
- Data-driven
- Educators acting on engagement and completion data
Owning your delivery layer is what makes analytics possible. Once the video is yours, every pause and drop-off is a lesson about the lesson.
More Work
Other case studies
Different industries, same approach: understand the problem first, then build only what solves it.
Facing a Similar Problem?
Tell us what you're working on and we'll tell you how we'd approach it — no obligation.

