Skip to content
Huzaifa Qadeer

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
Context

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.

Architecture

How it is put together

A layered stack that keeps the AI services isolated behind the domain API. External integrations are reachable only through the application tiers. I owned the AI services layer and the Python backend under it.
  1. 01

    Presentation

    Built by my teammate

    • Mobile app (React Native)
    • Admin panel (Next.js)
    • Camera capture
    • Notifications
  2. 02

    Domain services

    • Authentication
    • User management
    • Course management
    • Social hub
    • Subscriptions
  3. 03

    AI services

    My work, except the chatbot

    • Drill form analysis
    • Shooting practice analytics
    • Chatbot query handling
  4. 04

    Data

    • MongoDB
    • Analytics and reporting
  5. 05

    External integrations

    • Cohere (NLP)
    • Wise (payments)
    • Nodemailer (email)
Decisions

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.

Constraints

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.
Media

What it looks like

  • Mobile app walkthrough, including pose-based drill and shooting analysis
  • Admin panel walkthrough
  • Hoop Master capture view, recording a shooting rep for analysis
    Capture view — a rep is recorded here, then sent to the analysis service.
  • Hoop Master home dashboard showing enrolled courses and active drills
    Home — enrolled courses, active drills and progress.
  • Player profile screen showing personal metrics, badges and recent activity
    Athlete profile — stats, badges and shareable public portfolio.
  • Community feed showing weekly challenges and player posts
    Community feed — weekly challenges and challenge attempts.
  • Admin dashboard showing user growth and content moderation overview
    Admin panel — moderation, challenge scheduling and subscription management.
Stack

Built with

  • Python
  • MediaPipe Pose
  • OpenCV
  • PyTorch
  • Flask
  • Node.js
  • Express
  • MongoDB
  • React Native
  • Next.js
Metrics

What is measured

Team size
2
Use cases specified
36
Form analysers built
2
Links

The repository is private. Ask for a walkthrough.