Hoop Master
AI-assisted basketball training — pose-based analysis of shooting and drill form.
- Role
- Two-person final year project. I built the computer-vision and Python backend: pose analysis, form scoring and feedback. My teammate built the mobile front end and the coaching chatbot.
- Period
- Final year project · completed July 2025
- Status
- FinishedNot hosted
Why it exists
Personal basketball coaching is expensive and scarce, and the apps filling that gap mostly ship a drill library. Hoop Master was our final year project at COMSATS University Islamabad: a player records a drill or a shooting rep and gets back a scored assessment of their form.
How it is put together
- 01
Presentation
Built by my teammate
- Mobile app (React Native)
- Admin panel (Next.js)
- Camera capture
- Notifications
- 02
Domain services
- Authentication
- User management
- Course management
- Social hub
- Subscriptions
- 03
AI services
My work, except the chatbot
- Drill form analysis
- Shooting practice analytics
- Chatbot query handling
- 04
Data
- MongoDB
- Analytics and reporting
- 05
External integrations
- Cohere (NLP)
- Wise (payments)
- Nodemailer (email)
Trade-offs
Keep pose analysis in its own Flask service behind the Node/Express API
Instead of Run the analysis inside the Node API, or on the mobile client
The mobile client never calls the model, and the Python CV work could be built and deployed on its own. The cost is a second runtime to operate and an extra hop on every analysis request.
Derive form metrics from the landmark sequence over time
Instead of Score individual frames and average the result
A rep is judged as a movement rather than as a pose. The cost is that a noisy or dropped stretch of frames corrupts the whole attempt instead of one frame of it.
Return an annotated video with the score
Instead of Return the score and the written corrections alone
The player can see the moment in the rep the feedback refers to. The cost is that every analysis has to render and store a video file, not just produce a number.
Limits and how they are handled
- Analysis runs on an uploaded recording, not a live camera feed.
- The player records a rep in the app; the Flask service returns the score and annotated video afterwards.
What it looks like
Mobile app walkthrough, including pose-based drill and shooting analysis Admin panel walkthrough

Capture view — a rep is recorded here, then sent to the analysis service. 
Home — enrolled courses, active drills and progress. 
Athlete profile — stats, badges and shareable public portfolio. 
Community feed — weekly challenges and challenge attempts. 
Admin panel — moderation, challenge scheduling and subscription management.
Built with
- Python
- MediaPipe Pose
- OpenCV
- PyTorch
- Flask
- Node.js
- Express
- MongoDB
- React Native
- Next.js
What is measured
- Team size
- 2
- Use cases specified
- 36
- Form analysers built
- 2
Where to look next
The repository is private. Ask for a walkthrough.