Last updated 13 November 2026. This draft says what PlateSort actually does with information, matched against the app and the website as they are built today. A lawyer should review it before it is published. It is written so it can sit under the GDPR and under the California Consumer Privacy Act as amended by the CPRA. Where those laws give you a stronger right, that right wins.
Who this is about
PlateSort is operated by Kypton O'Neal and Benjamin Robles, as business partners. There is no company. “We” means the two of them. They are the controllers of the account data described below. The payment processor ([payment processor] — Lemon Squeezy, Stripe, or Paddle) handles the card. Lemon Squeezy and Paddle are the merchant of record for the payment. Stripe is not, unless Stripe Tax is turned on.
What never leaves your Mac
Sorting does not upload your footage. These stay on the Mac unless you yourself copy them somewhere:
- Race video, photos, and start lists (rosters).
- Sorted folders. Original clips are copied, not cut or re-encoded.
- The 14-day trial clock. It is stored in two local files and signed against an identifier the Mac already has (the hardware UUID from Apple’s IORegistry, or a random id written once if that cannot be read). It is not sent to us. Deleting one file does not restart the trial.
- The monthly clip counter. It counts clips on this Mac. If you are signed in to a PlateSort account, the app also sends us the number itself (see “Clip counts” below). It never sends file names, footage, or rosters. If the counter breaks, sorting is allowed through.
- Your saved licence key, and the claim token from an in-app purchase, in the app’s local support folder.
- If you sign in with email and password, the session token only. It is stored in the macOS Keychain, not in a file. The password itself is not stored on the Mac.
- Crash logs, in Home ▸ Library ▸ Logs ▸ RaceOS. Nothing uploads them.
- A tester access code and the email it was made for, if you sign in as a tester. That sign-in is checked on the Mac. There is no tester account on our server.
- Stella’s Claude API key, if you paste one. It is stored in a private file on the Mac (permissions limited to your user). We do not receive that key.
What we store when you pay
[payment processor] sends our website a signed notice when a subscription is created, updated, renewed, cancelled, or refunded. We store, in Supabase:
- Name and email from the checkout.
- Plan (Basic, Pro, Studio, or Super) and the subscription id.
- The licence key, when it expires, and the status (for example active, cancelled, refunded).
- The claim token the app invented, so that Mac can collect the key. It is a long random string, not your password.
- The id of the webhook notice, so a repeated delivery is not applied twice.
- If you create a PlateSort account: your email, your role, and a bcrypt hash of your password. We do not store the password itself. The account is not created until you enter a 6-digit code we email you. That code is stored only as a hash and expires after 15 minutes. A sign-in also stores a hash of the session token, so the raw token can live in the Mac Keychain. A password reset stores a hash of a one-hour code. Changing your email stores the new address and a hash of a 6-digit code (valid for 15 minutes) until you confirm it, and your purchase moves to the new address when you do. Changing your password signs your other devices out. Signing in with that account on another Mac installs the licence already linked to the same email. A new copy asks for this account before the 14-day trial starts; the trial clock begins at that first sign-in.
The public website cannot read that table. Only the server, with a private key, can. Purpose: give you the key, unlock the Mac that pressed Buy, renew the same subscription, and handle a refund or a “send my key again” request. The key-lookup page emails the key to the address on file. It does not show the key on screen, and it gives the same reply whether or not that email has a subscription.
We do not receive your card number, card expiry, or the security code. [payment processor] does. Their privacy notice covers that.
Teams, free plans and clip credits
These are stored in Supabase, in tables the public website cannot read:
- Teams. The person who pays can add teammates by email, up to the number of people their plan covers. We store the payer’s email, each teammate’s email, and when they were added. A teammate who signs in with that email gets a licence from the payer’s plan, which ends when the payer’s paid period ends. The payer can remove a teammate at any time. We email the teammate once to say they were added, and who added them.
- Extra people. If you have more people on your plan than it covers, the owner records how many extra people you have, so you can add them. We store your email and that number.
- Free plans. The owner can give someone a plan without payment, or move them up or down a plan. We store the email, the plan, the end date, and when it was set. We email the person to tell them.
- Clip credits. The owner can give clips back, for example when a bug wasted some. We store the email, the number of clips, the month, a short note the owner may type, and the date.
Clip counts
When you are signed in to a PlateSort account, the app tells our website how many clips this Mac has sorted this month. It sends the number, the month, and a short code that stands for the Mac (made from the Mac’s identifier, so we cannot read the identifier back from it). It sends this when the app opens, when you sign in, every few minutes while it is open, and when you open the Account screen. It does not send file names, footage, rosters, or race names. Purpose: add the clips you were given back to your allowance, show you and us how many clips you have left, and spot a problem before you run out. If you use more than one Mac, the numbers are added together.
Who can see account data
Only the owner of PlateSort (one of the two partners) can open the admin page. It shows account emails, plans and billing status, who is on which team, clip counts, and any credits given. It does not show passwords, which we do not have, or footage, which we never receive. There is no way for the owner to sign in as someone else.
Resend sends the licence email, the 6-digit codes for creating an account or changing your email, a password-reset code if you ask for one, and, if a payment is refunded, a short note saying so. It also sends a short note when someone adds you to their plan, or when the owner gives you a free plan, saying how to get started. The licence message contains your first name, the plan name, and the key. The codes and reset messages contain a short-lived code and not your password. We do not run a newsletter from this app. Purpose: deliver the key you paid for, confirm that an email address is yours, let you choose a new password, or tell you about a plan you were given.
The optional web dashboard
The dashboard is off until the site is connected to its database. If you create an account, Supabase Auth stores your email and a password hash. If you then link a Mac, the app sends the computer’s host name and, after that, race names and clip counts (sorted, needs a human, no plate). It does not send file paths or footage. Unlink in Settings and that stops. Purpose: let you glance at a sort from another screen.
Stella
Stella is optional. If you connect a Claude API key, the frames she looks at for an AI edit are sent to Anthropic with that key. If you use the Claude app already signed in on the Mac, the edit runs through that app instead. If you never connect Claude, those frames stay on the Mac. PlateSort’s subscription does not include Claude’s charges.
Updates and the website host
On launch the app asks our website whether a newer version exists. That request carries a version check and a user-agent string. It does not include your name, footage, or roster. The website is hosted on Vercel. Vercel keeps ordinary host logs (IP address, time, the address requested). Our own log lines record the webhook event name and subscription id, and whether the email sent. They are not written to include the licence key.
Why we use it, and for how long
- Contract: providing the subscription you bought, including the key and renewals.
- Legitimate interests: keeping the webhook from being applied twice, debugging a failed payment, and counting clips so the monthly allowance is applied fairly and clips given back are added. You can object where the law says so.
- Legal duty: tax records stay with [payment processor] under their rules. Lemon Squeezy and Paddle collect sales tax as merchant of record. With Stripe, the partners handle sales tax unless Stripe Tax is turned on.
DRAFT retention: the licence row is kept while the subscription exists and for up to 24 months after it ends, so we can answer “where is my key?”. Webhook ids are kept for 90 days. Clip counts are kept per month for up to 24 months. Team entries stay while the account exists and are removed when a teammate is removed. Free plans and clip credits are kept as a record while the account exists. Local files stay until you delete them. Vercel log retention is Vercel’s. You can ask us to delete the name and email sooner; a payment processor may still have to keep a tax record.
Who else processes it
[payment processor] (Lemon Squeezy, Stripe, or Paddle — payments), Supabase (database and, if you use the dashboard, login), Resend (email), Vercel (hosting), Google (Analytics, only if you accept it on the website), and Anthropic (only if you run Stella). These companies may process data in the United States or other countries. DRAFT: a lawyer should name the transfer tool (for example standard contractual clauses) before this is shown to people in the EEA or the UK.
Your rights
Depending on where you live, you can ask for a copy of the account data we hold, a correction, deletion, a restriction, or a portable copy, and you can object to a use based on legitimate interests. California residents can ask what we collected, ask us to delete it, and ask us not to sell or share it. We do not sell personal information and we do not share it for cross-context advertising. We will not discriminate against you for asking.
To ask: email kypton@platesort.com. We may need to confirm it is you, using the email on the subscription. If you are in the EEA or the UK you can also complain to your data protection authority. We will reply within the time the law gives us (30 days under the CCPA, one month under the GDPR, unless a permitted extension applies).
Children
PlateSort is a tool for people filming races. It is not directed at children under 16, and we do not knowingly collect their information. If you believe we have, email the privacy contact and we will delete it.
Cookies
The website uses Google Analytics only if you press “Accept” on the cookie card. It then receives your visit details (pages viewed, rough location from your IP address, device and browser) to count visitors. If you choose “Necessary only”, or your browser sends a Global Privacy Control signal, nothing from Google loads. The full list, and how to change your choice, is in the Cookie Policy.
What we don’t do
We don’t sell personal information. We don’t use your race footage to train a model. We don’t use advertising or social-media tracking cookies, and analytics cookies are set only if you accept them.