Engage Analytics
Summary
A video engagement platform built for the Learnathon competition. It reads facial emotion from viewer video to tell a creator whether the content actually landed, rather than inferring it from watch-time. I led the team.
Problem
Course creators have no direct signal for whether content is working. Watch-time and completion rate are what everyone uses, and both are lagging proxies — they tell you someone stayed, not that they were engaged.
Constraints
- C01Inference had to be fast enough for real video, not a batch job on short clips
- C02Large uploads had to move through the pipeline without overloading the backend
- C03A fixed competition deadline, with a team to coordinate rather than just my own time
Architecture
SAS-token uploads go straight to Azure Blob, keeping large video off the app server.
Firebase token auth gates uploads and analysis.
DeepFace (VGG-Face) classifies viewer emotion frame by frame across 7 classes.
Per-frame results aggregate into an engagement read-out for the content owner.
Decisions
Results
Retrospective
Picking DeepFace over a custom model is the only reason this shipped inside the competition window — scoping the ML target early and then refusing to move it was the actual lesson in leading a team. That said, the 89% rests on a single evaluation pass. I wouldn't quote it as load-bearing without regression checks behind it.