Inspiration

I do Olympic weightlifting, and most of the coaching happens over WhatsApp videos. You send a clip, the coach answers whenever, and payment is a mess: some pay up front and wait forever, others get feedback and "forget" to pay. I'd already built Sideline Lift Judge (AI that scores bar path from a video), so I wanted to turn it into something a coach could actually charge for.

What it does

  • A lifter uploads a clip, taps the bar, and gets an instant bar path score.
  • They can order a full review from a coach. PayPal authorizes the payment but doesn't charge yet.
  • The AI drafts the review (score, drift, 1–2 cues), and the coach edits and approves it.
  • Only when the coach delivers does the app capture the payment. If the coach misses the deadline, a sweeper voids the authorization automatically. If there's a dispute, the money is refunded.
  • Coaches get an ops agent: they type things like "Invoice my 3 athletes $60 each" or "refund Noa's review" and it prepares the PayPal action, but nothing runs until they hit confirm.

How I built it

  • Python + FastAPI on Heroku
  • The bar path pipeline from Sideline Lift Judge (NVIDIA models on Nebius Token Factory)
  • PayPal Orders v2 for authorize, capture, void and refund
  • PayPal Agent Toolkit for invoicing from the ops agent
  • NVIDIA Nemotron as the ops agent's brain, with a human confirm step on every money action, and an audit log

Challenges

  • Getting the payment state right: authorize, deliver, capture, or void on timeout, without ever charging twice.
  • Invoices kept returning 403 in sandbox until the account settings were sorted out.
  • Tracking the bar is hard when there's other gym equipment in the frame. The path sometimes jumps to a hanging ring during the catch, and I'm still fixing that.

What I learned

Authorize-then-capture is perfect for "pay when delivered" services, and an AI agent touching money must always ask a human before it acts.

What's next

Better bar tracking, coach payouts, and WhatsApp sharing for reviews.

Built With

Share this project:

Updates

Submission history