All work

SwingDoctor

iOS app for Meta smart glasses

Tennis analysis from the player's point of view. The app streams first-person video from Meta AI glasses to an iPhone and is learning to read an opponent's swings and court position.

Role
Solo developer
When
2026
Status
In development
Built with
Swift, Meta Wearables Device Access Toolkit, Computer vision, Python, OpenCV, MoveNet

The idea

Sports video is usually shot from the side of the court. SwingDoctor puts the camera on the player's face, so it sees what they see. The goal is to track the other player's swings, position and direction, then tell the wearer where to move and where to place the next shot. The same data can help coaches spot what a student should work on.

There is also a phone mode for self-analysis. Prop the phone up, record at 1080p60 from the back camera, and the app reads your own stance, footwork and swing.

What works today

  • Live camera preview streamed from the glasses into the iOS app through Meta's Wearables Device Access Toolkit.
  • Video recording with start and stop, phone-microphone audio, a preview sheet, and saving to the Photos library.
  • A source picker that switches between the glasses and the phone camera.

Getting the glasses to talk

The SDK is new, and the first wall was a session that refused to start with a "Device unavailable" error even though the glasses were paired. The fix was not in the app at all: the developer tools had to be installed on the glasses themselves.

I also built on a free Apple developer team, which can't provision the Hotspot Configuration or Wi-Fi Information entitlements. The app ships with no entitlements file and uses the toolkit's Developer Mode registration path instead.

Computer vision

Before writing any Swift vision code, I proved that real-time body tracking was fast enough with a desktop prototype in Python, using OpenCV and the MoveNet pose model on a webcam. That answered the riskiest question cheaply. The next step, now in progress, is on-device pose estimation and tennis-ball detection inside the iOS app, starting with a pose overlay on the live feed.