Inspiration

Tennis Coaches record a ton of practice video, but it's hard to answer basic question like "is this player improving?". Practice is where most development happens, yet the feedback loop is slow because video is not searchable and rills often use coach-specific rules and terminology. We built BetterByPractice to make practice measurable and easy to query.

What it does

BetterByPractice lets coaches to upload practice video, organize it by players and drills, and ask natural-language questions to get clear answers back.

  • Coaches can manage a roster and attach "player ID" videos t keep clips and stats tied to the right athlete
  • Coaches can define custom drill terms in a dictionary so the system understand their practice language.
  • Coaches can label drill clips with drill instances and then ask questions like "Break down Konrad’s point-win percentage by practice sessions."
  • The dashboard keeps a history of questions and responses so insights are easy to revisit.

How we built it

Uploaded videos are stored and associated with drill instances. A (mock) video model produces structured stats on upload, and the NLP layers queries that stored data to answer coach questions in plain language (and structured outputs that could be graphed later).

  • Frontend in React for the dashboard, roster, dictionary, and practice pages.
  • Backend in NestJS to handle authentication and CRUD for players, videos, drill segments, and saved queries.
  • SQLite database for storing user data, drill definitions, timestamps, and generated stats.
  • A placeholder video model that generates structured stats when a practice video is uploaded (so we can demo the pipeline end-to-end).
  • An NLP layer (Claude/Sonnet) that takes a coach’s question, retrieves the relevant data, and returns a human-readable response (and structured output when needed).

Challenges we ran into

  • Designing data model that work for "messy" practice workflows, especially custom drills and timestamps.
  • Keeping player identity consistent across multiple videos and sessions.
  • Defining a clean interface between the NLP layer and the database so answers stay grounded in stored data.
  • Building a demo able MVP fast while leaving clear extension points for real video analysis later.

Accomplishments that we're proud of

  • A working end-to-end MVP that supports the core coaching workflow.
  • A drill dictionary that lets coaches teach the system their own terminology.
  • A practice labeling flow with timestamps that make videos searchable.
  • A chat-style dashboard that makes insights easy to ask for and revisit.

What we learned

  • The hardest part isn't just "analyzing video", it's structuring practice data in a way that matches how coaches think.
  • Even a simple MVP needs a consistent schema so NLP responses can be trusted.
  • Building a "data pool" abstraction early makes it much easier to imagine multi-sport support later.

What's next for BetterByPractice

  • Replace the placeholder video model with a real tennis video model and validate metrics with real teams.
  • Automate drill and event detection to reduce manual labeling.
  • Add trend dashboards and weekly player reports to track improvement over time.
  • Generate shareable clip reels directly from questions and stats.
  • Expand sport-by-sport using a standardized data layer that supports different video model outputs.

Built With

Share this project:

Updates