You are here: 01 / Work — SwingNote

CASE 02 / APP

SwingNote — an AI golf swing analysis app

A golf app that analyzes swing videos on the phone, never uploading them, with a coaching AI that runs on a model we operate ourselves.

Field
AI golf swing analysis
Platforms
iOS · Android (one codebase) · web portal
Languages
KO/EN/JA
Status
Live on both stores
Two SwingNote screens: swing metrics and AI coaching feedback (Korean UI)

Summary

What
Measures tempo, head movement and shoulder turn from a swing filmed on your phone, writes phase-by-phase coaching and practice plans, and keeps practice and round records in one flow.
Our role
Everything from planning to release and operation
Stack
React Native (Expo) · MediaPipe (on-device pose estimation) · Spring Boot (WebFlux) · MongoDB · RevenueCat · Paddle · Kubernetes

The easiest way to build a swing analysis app is to upload the video and analyze it on a server. But then video transfer and processing costs grow with every user, and you end up storing footage of other people's bodies on your servers. We designed SwingNote around avoiding both.

Analysis happens on the phone

Problem
Server-side analysis means transfer and processing costs that scale with users, and a server that holds videos of people's bodies. We wanted the feature to be generously free, yet every use would have added cost.
What we did
We put a pose-estimation model (MediaPipe) inside the app so it runs on the phone. Only the computed numbers go to the server; the video never leaves the device. Tempo is measured as the ratio of backswing to downswing time, and head movement relative to torso length, so results stay comparable at different camera distances.
Why
With the model bundled in the app, analysis works offline. We confirmed a full analysis in airplane mode on a real Android phone (Galaxy S10 5G); a 3.2-second swing took about 5 seconds (August 29, 2026). The same video should always give the same numbers, but at first results shifted with device load. We switched from sampling frames during playback to reading frames at fixed intervals, and repeated runs of the same video now match to the last digit. A 2D video can't measure shoulder turn as an exact angle, so we show a 0–100 relative index for comparing sessions filmed from the same angle.
SwingNote metrics screen — tempo 2.2:1 (backswing 1.57 s, downswing 0.70 s), head movement 16.2% of torso length, shoulder turn index 68 (Korean UI)

We run the coaching AI ourselves

Problem
Turning numbers into readable coaching and practice plans needs a language model. A pay-per-call AI API charges for every request, so losses grow with users and the feature can't stay free.
What we did
We run an open language model on servers we operate to write coaching and practice plans, and priced features by what they actually cost us. Measurement on the phone costs almost nothing on the server side, so it's free and unlimited; only AI coaching, which runs the model on our servers, uses credits.
Why
Credits are deducted only when coaching is actually delivered. If the AI server can't respond for a moment, the request waits in a queue instead of looking finished. In a paid feature, "marked as done but never delivered" is the fastest way to lose trust.
SwingNote AI coaching screen — feedback broken down by swing phase (Korean UI)

Getting through review on both stores

Problem
Apple asked for a video of the core AI analysis recorded on a real device (Guideline 2.1). When we went to record it, we found analysis had never worked on iOS — the web view settings only had an Android-specific option. Apple also flagged that we were "sharing personal data with a third-party AI service without disclosure or consent" (5.1.1(i), 5.1.2(i)).
What we did
We fixed the iOS settings and added an end-to-end check on a real iOS device to our pre-release routine. For the AI question, we answered item by item what the app sends to our server, explained that no external AI service is used and videos never leave the device, and expanded the privacy policy's section on AI processing. Anything we weren't sure of, we didn't present as fact.
Why
Working on Android doesn't mean working on iOS, and a wrong explanation in a review reply has to be corrected before anything else. On Google Play, our personal developer account first needed a closed test with 12 testers for 14 days; production access was approved eight days after we applied.

Results

  • AppiOS & Android, one codebase (React Native, Expo), KO/EN/JA
  • On-device swing analysistempo, head movement, shoulder turn (relative index), a skeleton overlay right after analysis, comparison with past sessions
  • AI coachingby phase (backswing, transition, impact), practice plans, practice and round records
  • Web portal & paymentssubscriptions (RevenueCat in the app, Paddle on the web)
  • Backendseven services (auth, swing, coaching, practice, rounds, media, subscriptions) plus a gateway, on Kubernetes
  • Sign-inGoogle and Apple
  • ReleaseApp Store and Google Play, still run by us

If your app uses AI or the camera

We start by deciding what runs on the phone and what runs on a server. That choice sets your monthly server bill after launch and how much personal data you handle.

Whether to use a paid AI API or run a model yourself comes down to expected usage and cost, and we work it out with you. For low-traffic apps, a pay-per-call API is often cheaper.

Before submission, we prepare answers to the questions camera, video and AI apps get in review: where the data goes, and whether it really works on a device.

Mobile Apps (Android + iOS)

$6,500 / 1 month

Next case

laonmon.com

This website · Web · KO/EN/JA

CONTACT

LET'S
TALK.

Have a website or app in mind, a partnership idea, or a question? No logo or copy needed yet — tell us what you do and what you need, and we'll reply with scope, timing and a quote.