Your video never leaves your phone.
This is not a page we wrote to satisfy a lawyer. On-device analysis is the product decision we are proudest of, and this is the plain description of what that means — plus everything this website itself collects, which is very little.
Last updated
SwingOK has not shipped. Today this site does one thing that touches your data: it takes an email address for the waitlist. This policy describes that, and describes how the app is designed. It will be expanded into a full app privacy policy — covering accounts, purchases and any optional sharing features — before the app ships, and we will change the date at the top when it is.
What runs on the device
The whole analysis pipeline is designed to run on your iPhone: the 240 fps capture, the automatic trim around impact, the pose estimation that places 33 body landmarks on every frame, and the comparison of those landmarks against checkpoint ranges. There is no upload step in that loop, because there is no server in that loop.
The practical consequence: your swing footage is your footage. It sits in the app on your phone alongside the rest of your camera roll, and it travels only if you deliberately send a clip to a coach or a friend. We do not have a copy. We could not produce your swing videos if someone asked us to, because we never receive them.
This also happens to be why feedback is fast. Nothing has to make a round trip to a data centre before you can see the overlay. Privacy and speed are the same decision here, made once. More on the pipeline itself on how it works.
What the waitlist form collects
When you submit the waitlist form, exactly five things are written to our database. Here is the complete list, with the reason for each.
| Stored | Why |
|---|---|
| Email address | So we can send you the beta invite and the launch note. It is the only thing you type into the form. |
| Source | Which of the three forms you signed up from — the hero, the closing call to action, or this waitlist page. It tells us which page actually convinces people. |
| Device bucket | A single coarse word derived from your browser's user-agent: iphone, ipad, android, mac, windows, other or unknown. We never store the raw user-agent string. SwingOK launches on iPhone, so this is how we judge how much Android demand there is. |
| Referrer | The page you were on before you landed here, truncated. It tells us where our readers come from. |
| Signup timestamp | It fixes your place in the invite queue, which is the whole point of a waitlist. |
That is the entire record. No name, no location, no fingerprint, no advertising identifier, no profile. If you sign up twice with the same address, nothing new is written — you keep the position you already had.
Why we hash IP addresses instead of storing them
A public signup form needs some defence against a script submitting ten thousand addresses, and the usual defence is a per-IP rate limit. The usual implementation stores the IP address, which quietly turns a spam control into a log of who visited.
We don't keep the address. The IP from the request is combined with a secret salt and run through SHA-256, and only that digest is stored, next to a counter and the hour it belongs to. The counter enforces a limit of five signups per hour. The digest cannot be reversed into an address, and without the salt it cannot be compared against a precomputed table either. It is a fingerprint of a request, useful for nothing except counting requests.
The form also carries two invisible anti-bot checks — a honeypot field a real browser never fills in, and how long the form took to fill out. Neither is stored. Both exist so we don't have to put a third-party CAPTCHA on the page, which would mean sending your visit to a company that isn't us.
What this site does not do
- No third-party analytics. There is no Google Analytics, no product analytics SDK and no session recorder on this site.
- No advertising or tracking pixels. No ad network, no remarketing tag, no social tracking pixel.
- No cookies set by us. The site sets no tracking or advertising cookies. There is nothing to consent to because there is nothing being placed.
- No third-party font or asset calls. The typefaces are self-hosted from our own domain at build time, so loading a page does not tell anyone else that you loaded it.
- No selling, renting or sharing your data. Not for money, not for “partnerships”, not ever. Your email is for the two emails described on the waitlist page, and nothing else.
Our hosting provider processes requests to serve the site, as any host must. If we ever add an analytics tool, it will be one that does not build a profile of you, and this page will say so before it goes live.
Retention, and how to be removed
Waitlist entries are kept until the app launches and the invite queue has been worked through, or until you ask us to delete yours — whichever comes first. Rate-limit records are counters attached to an hour-long window and are not needed once that window closes.
To be removed, or to ask what we hold about you, email [email protected] from the address you signed up with. We will delete the row and confirm. You do not need to give a reason, fill in a form, or talk to a retention flow.
If something on this page turns out not to match what the code does, that is a bug and we want to hear about it at the same address.