MotionFrame
App Store
Courtside: a phone recording swing data in real time
Built solo by a high-school junior · Live on iOS · Android / HarmonyOS in progress

MotionFrame

动 作 帧
Professional-grade badminton coaching, for anyone

Project created July 4. Restarted from scratch July 11. On the App Store August 9; version 1.3 shipped August 25. Launch wasn't the finish line — I went back to the courts to make the analysis more accurate and the consent paperwork clean, and in September the Android and HarmonyOS builds entered on-device testing.

On the App Store · 1.3.2 Started 2026.07.04 iPhone + Watch + AirPods Android / HarmonyOS · in progress ICP 粤ICP备2026109963号
SCROLL
Not the most impressive thing I could build —
a useful one.

I wrote that the day I came back from the city badminton training base. Before that trip I had nearly driven the project into the ground — see Frame 04 below.

30daysfrom restart to App Store
07.11 → 08.09
3tripsback to the courts to collect data
12clipsreference motions filmed with coaches
covering 6 techniques
210entries100 training drills
+ 110 common mistakes
2rejectionsfrom App Review before approval
What it is

A personal badminton coach,
and a badminton community

Amateur players have three real problems: they can't see their own stroke, can't tell what's wrong with it, and don't know what to practise next. MotionFrame links those three into one line — prop the phone courtside and it handles the rest.

01 / Teach

A course built around your body

Not a generic tutorial. Gender, racket hand, height and weight, sessions per week — all of it changes the plan.

  • 3 stages, 12 lessons, from rebuilding the grip and ready position to linking attack and defence; unlocked in order, ticked off item by item
  • 100 training drills · 110 common mistakes, every mistake with a “wrong / right” side-by-side picture
  • 30 knowledge chapters · 12 tactic cards — rules, principles, tactics; plan before the match, review after
  • Courses are pre-generated: 36 player profiles expand into 432 lessons, matched in milliseconds — nobody waits for an AI to write one live
Course home: technique rebuild course, 4 of 12 done
Knowledge library list
02 / See

Every swing measured, not just watched

Record, and the skeleton analysis runs automatically, aligning every swing to the video timeline. Tap any swing for a slow-motion replay with the skeleton overlaid. The video never leaves your phone — not a single byte is uploaded.

  • Per swing: elbow angle, contact-point height, swing speed, rhythm density
  • Level 1–7 rating on the Chinese amateur scale — the “what level are you?” argument players have had for years, turned into a reproducible score
  • Levels 8 and 9 are never judged by AI: a human-review channel takes certificates or match footage insteadshipped in 1.3
  • A trends page for direction: motion consistency, pass rates, training volume — you versus your past self

Screenshots are from the actual 1.3 build.

Per-swing skeleton replay: joints overlaid, 1x/½x/¼x slow motion, with that swing's speed, duration, elbow angle and contact point
Training trends: streak heatmap and before/after comparison
03 / Train with you

A voice that runs the session, not a script

It calls the drill, explains the cue, times the set, counts the rest, drums the countdown. High-frequency lines are synthesised ahead of time and shipped in the app, so it works offline.

  • During a set the front camera samples a few seconds and measures amplitude and rhythm on-device only; you get one targeted line between sets, and the clip is deleted the moment it's analysed
  • The watch reads heart rate: too low in the warm-up and it asks for bigger movement; too high and it tells you to steady your breathing
  • Live correction while you play: instant feedback is all local rules plus local speech — under a second, works without networkshipped in 1.3
  • Silence over guessing — every line comes from 104 fixed phrases; it would rather say nothing than comment blindly
AI voice training: drill timer and spoken cues
04 / Play together

Training alone gets old, so there's a community

Post your session, ask for pointers, review the courts near you. That little rush after a good session needs somewhere to go.

  • Five-dimension court reviews: floor, lighting, ceiling height, air-con draught, crowd — the five things only badminton players care about
  • Daily collectible cards: one a day in gold / silver / limited tiers; only training earns gold. Artwork is now served from the server, so new cards don't need an app release
  • Meetups: pick a court, a time, how many players you're short and the level range. Sorted by time, not distance — a game 2 km away in three days is far less useful than one 6 km away tonightshipped in 1.3
  • Location matching, yet we have never collected a single user's location — every anchor is a court coordinate

The red banner at the top of the meetup screenshot was added by the judges' demo build itself: “the games below are demo data.” Posts can be demo content; meetups cannot — real people would show up at a court on that schedule. So demo games are labelled one by one and blocked on both client and server from ever mixing with real ones.

Meetup list: each game shows court, time, level range and players needed
Card gallery: 24 cards, 12 gold, 3 limited
Nearby courts map and review entry
About versions: what you can download from the App Store today is 1.3.2 (August 27). Everything marked “shipped in 1.3” above — meetups, live correction, human review for levels 8/9 — went live with 1.3 on August 25; 1.3.1 and 1.3.2 were hotfixes over the next two days. The Android version has its native analysis engine and all screens finished and is being tested on a Xiaomi device; the HarmonyOS shell compiles and is waiting for device verification. Neither is on any store yet — this page only describes what you can actually install right now.
Evidence

Why trust it?
Because I went and filmed the data myself

An AI tells you your elbow isn't high enough. Why believe it? If its standard was scraped off the internet, you shouldn't. So over these three months I went to the courts three times to collect data — below is each trip: when, what happened, and what came back.

Trip 01 2026.07.23 – 07.25 · City badminton training base

Three days of being challenged

I didn't go to demo. For three days I stayed with the coaches and players, filmed a large set of real match data to check whether the analysis was actually right, and went through it line by line. The coaches looked at every result on the spot and said which judgements didn't hold — more useful than any self-test.

What came back wasn't a feature list but a positioning: personal coach + badminton community. Those days also settled the thing that made me drop the whole “pro” track — one coach can already watch players on four courts at once.

Output real-match dataset Output product positioning Cut multi-camera pro edition
A coach at the base going through analysis results with the developer, phone in hand
Coaches reviewing the analysis on the spot, pointing out which calls didn't hold
Collecting training data courtside with a phone
July 24, collecting real-match data at the base
Trip 02 2026.08.06 · Local badminton club

My mentor's question: “Why would a user trust the AI's judgement?”

It hit the nerve. Without a reference example sitting next to it, an AI saying “elbow too low” gives the user nothing to compare against — however accurate, nobody believes it.

That evening I got hold of a professional coach at a local club and filmed 27 reference clips, plus the common mistakes. Until then the app's core parameters had been researched by an AI from the web; from that day on they were measured by me, frame by frame.

12 clips made it into the app — 7 correct, 5 wrong — covering 6 techniques. Each is 3.5 seconds with contact fixed at 1.5 s, so a reference and a mistake can be lined up frame for frame.

Output 27 raw clips → 12 in the app Output our own core parameters Output real examples inside the course
A professional club coach demonstrating a clear on court
A professional club coach demonstrating reference technique
Fixed phone camera filming the coach's demonstration
Fixed camera, clip by clip: front and side, different angles, and the mistake set
Trip 03 2026.08.17 · During the finals, I went back

After launch, I re-shot every reference clip

Two reasons. Accuracy: the first batch was filmed in a hurry, with too few angles and motions, and the analysis could get better. Portrait-rights compliance: the first time round I hadn't handled the authorisation cleanly, and I didn't want a coach who had helped me to carry risk because of my sloppiness.

The hard part that day wasn't filming — it was finding someone willing to be on camera

I contacted several venues; none wanted to appear. Which is entirely reasonable — nobody wants their face and their hall in a stranger's student project.

The one that agreed backed out once I sent over the authorisation contract. The more formal the paperwork, the more cautious the other side — I hadn't anticipated that.

The solution: the coach brought our own player, Frank, who performed every demonstration as a student while the coach corrected each motion from the sideline. The person on camera is one of us; only one release form needed.

That night we re-shot 12 techniques from two cameras. Within a single day the new footage was organised and wired into the product — that's the speed one person plus an AI can reach; three months earlier, renaming and aligning alone would have cost me a week.

Re-shot 12 techniques · two cameras Signed a portrait-rights agreement Fixed compliance of the first batch
Evening of August 17: the coach correcting a player's demonstration from the sideline
August 17, evening: the coach correcting each motion; the demonstrator is our own player
The developer sitting on the court floor, processing footage on a laptop
Lights still up, already wiring the footage in from the court floor
Page one of the motion-footage filming and usage authorisation agreement, ID numbers and contact details redacted
Page 1 of 7 of the Motion Footage Filming and Usage Authorisation Agreement.
ID numbers, contact details and the subject's name are redacted.

A seven-page agreement, not a casual “mind if I film?”

It spells out what is filmed, how, where it may be used, for how long, and how the subject can terminate at any time. I was under 18 when I signed it, so it also needed my mother's signature as legal guardian to take effect.

Clause 2 is the precondition for the whole thing: any footage published or shipped inside the software must have the subject's face processed until unrecognisable to the general public and all venue branding removed; footage that fails either may not be used externally in any way. The agreement is also retroactive to August 6 and requires the first batch to be re-processed.

That's why every photo on this page showing a coach has the face and venue branding blurred — including the August 6 batch. It's not clumsy pixelation; it's what the agreement requires.

Hardware working together

Three devices you already own,
assembled into a training system

No professional gear to buy. The watch measures force, the camera measures posture, and the two streams are aligned on one timeline and cross-checked — something no single device can do.

AirPods, Apple Watch and iPhone in use together at a badminton hall
iPHONE

The eye at the sideline

Records video and runs Vision skeleton tracking, computing elbow angle, contact point and swing speed frame by frame — entirely on-device.

APPLE WATCH

The sensor on your wrist

Samples angular velocity at 100 Hz, detects every swing in real time with haptic feedback, and logs heart rate for the whole session.

AIRPODS

The word between sets

In the 30-second rest it tells you what went wrong in the last set — no looking down at a screen.

Phone-only works too: recording, analysis, per-swing metrics, courses and voice-led training need no watch. The watch owns the “force” stream and the live correction while you play.

The journey

Frame by frame

This is the real sequence, including the six days I stopped and the days I went the wrong way. I've numbered it in frames — the app is called MotionFrame, after all.

Frame 01July 4 · 1:47 a.m.

One idea, and the project was created that night

My own frustration on court: the gap to good players was obvious, but where exactly was it? The coach said “no rotation”, “contact point too low”; I nodded and did the same thing next point — because I couldn't see myself.

Ten commits that day: watch swing detection, linked recording, skeleton replay, AI feedback. The first-round demo took shape the same day.

Frame 02July 5 – 10Stalled

Six days, not a single commit

The demo worked, and I stopped. It could detect swings and offer a paragraph of advice — enough for a competition — but I knew very well that it wouldn't help a single person who actually wanted to improve. The six-day gap is still in the commit history. I didn't erase it.

Frame 03July 11Restart

Starting over, this time aiming to be used

I picked the whole experience apart and landed the fixes in three batches. The worst one: a phone propped courtside locks its screen within a minute or two and the recording dies on the spot — the kind of bug you never find at a desk.

Frame 04July 20 – 23✕ Shelved

The days I nearly wrecked the project

I wanted a multi-camera pro edition to sell to institutions: three phones approximating 3D reconstruction for stability. I spent days on it. On July 23, the first real-court test, it fell apart instantly — one camera's clock wasn't synced at all; the same drill came out as 19.6 seconds on it and 34.5 on the others.

Worse, I only understood later: one coach can already watch players on four courts at once. I was working hard on a problem that didn't exist.

How it ended

The multi-camera approach was shelved on the spot in favour of “one camera + tablet monitor”. That code never got a user-facing entry point; it stays in the repository as a record and a reminder.

Frame 05July 23 – 25Turning point

Three days at the city training base

The details are above under “Evidence · Trip 01”. In one line: I didn't go to demo, I went to be challenged.

Frame 06The day I came back from the base
Not the most impressive thing I could build — a useful one.
— written in that day's notes
Frame 07July 26 – August 3

Every day: review code, fix bugs, add features

July 27 was the full turn: drop the pro side, go all-in on the consumer version. The 12-lesson course engine was finished that night.

The hardest part was actually the UI. Every time I asked the AI to change the interface it was half delight, half horror — you never knew whether polish or disaster was coming back.

The app needed hundreds of illustrations. I assumed I'd have to generate them one conversation at a time; once I asked properly, I handed it a Volcano Ark API key and the whole illustration problem was solved in a few hours: 100 drill images, 220 mistake images, none missing.

Slumped in a chair after a late night of development
The normal state that week
Frame 08August 3

Building a pipeline to find my own faults

A harsh outside review kept me up all night. The first thing I did the next day was write an offline evaluation pipeline — it compiles the app's production code directly, so offline results match what runs on the phone bit for bit.

The first measured result was ugly: a 45.2% swing false-detection rate. The same day I proposed three improvements; none passed the gate, so none shipped — just a report. That rule hasn't been broken since.

Frame 09August 4Turning point

“Why would a user trust the AI's judgement?”

That one line from my mentor directly led to the reference-motion shoot two days later, and to the in-app page Where these numbers come from — measurement method, measured accuracy, “conclusions we rejected ourselves” and “what we can't measure”, all written down and shipped inside the product.

Frame 10August 5ICP filing issued

Got the filing number; the build couldn't get in the door

粤ICP备2026109963号 was issued that day — without it, no App Store listing in China at all.

The same day my build was bounced three times by Apple's automated checks. It took a long time to find the root: my Mac runs a beta OS, and Apple reads the build machine's version out of the binary and rejects the toolchain outright — no Xcode version would help.

There was a shortcut: edit that version string inside the archive and the check passes. I didn't take it. That would be lying to Apple about the build environment. I moved to cloud builds and uploaded honestly.

Frame 11August 6Rejection ①

Apple 2.1(a): on iPad, the sign-in button did nothing

The reviewer tested on an iPad and “Sign in with Apple” gave no response. The cause was mine: the failure branch swallowed every error and showed nothing, and the iPad dialog size truncated the explanatory text to an ellipsis. Fixed the same day.

That evening I also filmed the 27 reference clips (see “Trip 02” above).

Frame 12August 7Rejection ②

Apple 3.1.1: this time they were right

I had a line in the app: “enter an admin code to remove the AI limit”. Apple ruled that this unlocks digital features through a mechanism other than in-app purchase, and rejected it.

They were right. I didn't argue, and I didn't just bury the entry point — the whole channel was deleted from the code.

The same day I overturned two of my own conclusions (the racket-hand criterion and the elbow-angle definition) and recomputed my false-detection score from 45.2% to 29.2%: the old algorithm had counted time spans with no human labels at all.

Resubmitted after the fixes; this time it passed.

Frame 13August 9Launched

Search “动作帧” on the App Store

Counting from the July 11 restart: exactly 30 days. A stranger can download it and actually use it.

Open the App Store page →
Frame 14August 17During the finals

Eight days after launch, back to the courts

To make the analysis more accurate and to get the portrait rights clean. The hard part wasn't filming — it was finding someone willing to be on camera. The whole story is under “Evidence · Trip 03”.

Frame 15August 25 – 271.3 shipped

Launch wasn't a stopping point

Daily-card artwork moved to server delivery (new cards without an app release), live correction opened up and was verified on real devices, a human-review channel for levels 8/9, the training voice redone, meetups built from zero to usable — all of it in 1.3, approved and live on August 25.

The same day a user hit a crash in the card gallery. 1.3.1 was submitted that day; 1.3.2 followed two days later. Once there are real users, “fix the bug” weighs something completely different.

Frame 16September · nowLIVE

Bringing it to phones that aren't iPhones

The most common comment: “is there an Android version?” After school started in September the Android app was rebuilt as a native shell with a native analysis engine: skeleton tracking runs on the phone, a clip turns into a report in seconds, and the report's video replay and per-swing jumps are native. The HarmonyOS shell compiles too. Both are in on-device testing and not on any store yet.

From the first commit at 1:47 a.m. on July 4 to today. This is the first time I've put an idea into real people's hands — the next question is how it stays alive. That's the “Roadmap” section below.

How it was made

One person + AI
is a small development team

The whole way through: I describe what's needed in a chat window, the AI writes the code, I verify on a real iPhone and Apple Watch, and feed the problems back for it to fix.

The division of labour is clear

AI won't think for you about what to build or why. That part is mine alone: going to the base, being challenged by coaches, cutting features that weren't solid, deciding the positioning, deciding which shortcuts not to take.

But once the thinking is done, it takes implementation speed somewhere I didn't dare imagine — in the conversation on the right I raised 9 issues found on device and got back every fix, compiled and gate-checked, with a line-by-line reconciliation 2 hours 54 minutes later. August 17 was the same: footage shot in the evening was in the product that day.

  • My role: set direction, make trade-offs, verify on device
  • AI's role: turn what's been thought through into code
  • Hard rule: every fix must be reproducible and verified on a real device — “should be fine” is not accepted
Conversation log: 9 fixes verified item by item, task time 2 hours 54 minutes
A real conversation log: I hand over a problem list, it hands back a reconciliation table
The honest part

It isn't perfect —
and I've measured every gap

These numbers aren't estimates. I built an offline evaluation pipeline that compiles the app's production code directly, so offline results match what runs on the phone bit for bit. Knowing where the gaps are matters more than pretending there are none.

29.2%

Swing false-detection rate

Definition: threshold 0.35, scored only inside human-labelled spans. At 0.50 it's 20.8%. The sample is only 5 videos, 21 swings — not enough for a stronger claim.

±7 pts

The AI rating wobbles

The same footage run 4 times differed by up to 7 points. Mitigated with a trimmed mean over multiple runs, but a single result still shouldn't be treated as authoritative.

Doubles

It can track the wrong person

With two or more people in frame it may lose the target. The app labels this clearly, but analysis of doubles footage is not to be trusted.

Levels 8 / 9

AI cannot judge these two

Levels 8 and 9 on the Chinese scale are about professional-team history; a phone video can't tell. So AI is hard-capped at level 7 and anything above goes to human review. Not unfinished — deliberately not done.

Smash

Contact point reads low

Known remaining issue: the “window peak” fix that worked for elbow angle can't be copied to contact-point height — it pulls the follow-through in.

0

Unit tests on iOS

Everything rests on device testing and the offline evaluation pipeline. The backend has 11 regression scripts; iOS has none — that's a debt I owe.

Also cut on purpose: shuttle trajectory tracking (measured detection rate 24% from the side / 7% from rear-left; removing it took the bundle from 51.7 to 32.6 MB) and automatic shot-type classification (single-player, single-court footage can't train a usable classifier — confidently wrong is worse than silent). The channel Apple rejected under 3.1.1 was deleted outright, not reworded — see Frame 12.

Where it goes next

How it stays alive:
fix retention first, then talk money

MotionFrame has never taken a cent from a user and has no paywall. This roadmap is written for judges, teachers and future partners — every item is marked as “already happening” or “still a plan”, and every number states its definition.

567registered accounts
launch 08.07 → 09.12
1,355active devices, last 30 days
server-side, de-duplicated by device
260peak daily actives (08.12)
recently 60–120
¥0revenue to date
a fact, not modesty
Consumers · individual players

Core stays free forever; heavy users pay per use

Recording, analysis, per-swing metrics and courses are free for good. AI feedback and rating consume “feather coins” — today a daily usage allowance that cannot be bought with money. That's Apple's 3.1.1 line; we were rejected under it once, so we know exactly where it sits.

  • Happening now: native Android (in device testing) and HarmonyOS (compiling) — from iPhone-only to every phone
  • Next: fix retention first — in the mid-August review, 79% of devices had shown up for only one day; until the denominator is fixed, every conversion rate is noise
  • Planned: once daily actives hold above 1,000, open coin purchases (reference: ¥6 = 500 coins ≈ 25 reviews) and rewarded video for coins; the code paths exist, the gates are simply closed
Institutions · schools, venues, teams

Fixed camera + on-premises deployment, for students without phones

The main line confirmed with our mentors and a prospective investor on August 29, 2026: in Zhuhai, with one school and one badminton venue, a “camera + tablet / classroom display” teaching aid where the data never leaves the school network. The team/coach console was written two months ago and has never been sold.

  • Happening now: teachers are brokering the school and venue; a campus edition (fixed camera) prototype is being built on its own branch; the cost structure is worked out — use the school's existing displays first, no margin on hardware, no after-sales burden
  • Pricing (unvalidated): per-school annual subscription, ¥2,000–5,000 / year; one school ≈ a full year of every consumer monetisation path combined
  • Preconditions: footage of minors processed locally + guardian consent (draft ready); public procurement needs a legal entity — company registration is being driven with our teachers' help
Ecosystem · venues and content

Meetups → venue traffic → booking commission

Meetups and five-dimension court reviews already put people, time and place in one screen. This is the path with the highest ceiling, but it needs a company entity and venue-by-venue agreements — it's last not because it matters least, but because it can least afford to be rushed.

  • Zero-cost test first: add a “book this court” jump from meetups and see whether anyone actually books; talk commission only with data
  • Not doing: equipment affiliate links (gambling community trust for pocket change), selling data, or ads targeted at minors
  • Traffic source: the developer's own Douyin account carries the “high-schooler + AI” story (best single video: 112k views) and feeds the product
2026 Q4In progress

Three platforms, retention, the first school

Ship Android / HarmonyOS; make “came back the next day” the single north-star metric; run an on-premises pilot with one school and one venue in Zhuhai.

2027 H1Planned

Company entity, replicate B2B, open consumer payments

Complete company registration; replicate the school / team subscription to 3–5 sites; open coin purchases and rewarded video once daily actives pass 1,000.

2027 H2Planned

A venue network

Sign booking partnerships with venues so meetups connect straight to a court — merging “find people to play” and “find a court” into one action.

Whichever path, four things don't change

Training video stays on the device, always; AI rating is capped at level 7, humans above that; no user data is ever sold; anything involving minors is compliant before it ships.

Definitions: registered accounts and active devices come from the server-side statistics tables (as of 2026-09-12); “79% for one day only” is the 2026-08-16 review of 482 devices; B2B pricing is an estimate with no deals closed; nothing marked “Planned” carries a committed date.

Who made it

Two people

MAKER

Kyle · “the Refactorer”

Software, partnerships, research, video editing — everything except being the one on camera.

  • iOS / watchOS
  • Backend & website
  • Base & club partnerships
  • User research
  • Video editing
TESTER

Frank

Tries the app, reviews the app, shoots the video. The first real user and the most demanding one. On August 17 he performed every reference motion on camera.

  • Device testing
  • Feature reviews
  • Filming
  • On-camera demonstrations
It solved my problem of not having money for extra coaching.
— Frank, after using it
About me

I'm Kyle — you can also call me the Refactorer

A high-school junior, three months into vibe coding. Think of it, build it. I'm stubborn about things actually being used — anything that stops at the demo stage counts as unfinished to me.

Before this I built a study app for iOS that never reached the store. MotionFrame is the first product I've genuinely put into strangers' hands, and the first time I've strung iPhone, Apple Watch and AirPods into one system.

I'm exploring everything AI can do: image and video generation, data analysis. Lately I've also started making videos, telling the pitfalls I've hit to others who want to build things.

Kyle talking about the project to camera