Privacy Policy
Last updated
PURPL runs on your driving data, so it is worth being exact about what that means. This page says what we collect, why we are allowed to, who else touches it, and how to get it back or have it deleted.
1. Who is responsible for your data
The data controller is Solox LTD. (Single-member limited liability company (EOOD)), registration number (UIC) 206020638, Bulgarian Commercial Register (Registry Agency), registered at 27 William Gladstone Str., Triaditsa, 1000 Sofia, Bulgaria. PURPL is its trading name.
For anything on this page (a copy of your data, a correction, an erasure, or just a question), email info@purpl.app. A person reads it.
2. What we collect, and why
Account data
Your email address, plus your name and profile picture where the way you sign in provides them. The web app and the iPhone app do not offer exactly the same ways to sign in:
- Web app: Google, Apple, or email. With email you either choose a password or ask for a one-time link or code to be sent to your address. If you forget your password, we send a reset link or code to the same address.
- iPhone app: Google, Apple, or an email address with a one-time code that we send you. The iPhone app has no password sign-in.
From Google we ask for your email address and basic profile only; nothing else in your Google account is visible to us. From Apple we receive what you allow in Apple's own sign-in screen: your email address, which can be an Apple private relay address if you choose to hide yours, and your name. In either app you can also choose your own profile picture: it is shrunk on your device to a small square image and saved with your account details. Legal basis: performance of our contract with you (Art. 6(1)(b)); you cannot have an account without it.
Notification token (iPhone app)
Once you are signed in, the iPhone app asks whether it may send you notifications. If you say yes, the app gets a notification token for your phone from Expo (see section 3) and saves it on your profile. Nothing is being sent through it at present, so for now the token is only stored.
Your telemetry and sessions
The files you upload from your data logger and everything derived from them: lap and sector times, GPS traces, speed, RPM, temperatures, accelerometer data, plus the track, driver, kart and class names you enter yourself. Also the analysis built on top (corner deltas, theoretical-best laps, session scores) and the AI coaching reports. Legal basis: performance of our contract with you (Art. 6(1)(b)).
Driver names are personal data. If you enter a name that is not yours (a team-mate's, or your child's), you are responsible for it being fair to do so.
Files from AiM loggers (.xrk and .xrz) are read on your own device first: in your browser on the web, and on your phone in the iPhone app. If that on-device reader cannot open a file, the app sends the file to our own decoding service at xrk.purpl.app, which turns it into laps and measurements and returns them. The service handles those two file types only. It runs on a server we rent from Vultr and is reached through Cloudflare (both are listed in section 3).
To show where you stand among other drivers, our servers score each of your sessions and keep the scores against your account: a few numbers per area, such as how repeatable your braking is, with the circuit attached for the areas that are compared circuit by circuit. Every session that passes our data checks goes into one shared pool, so your scores help rank other drivers and theirs help rank you. Each driver sees only their own place and how many sessions and drivers it was ranked against; nobody is shown another driver's name, sessions or scores. The pool is not anonymous on our side: every score belongs to an account, and your places are stored against yours.
Billing data
Your plan, your subscription status, and the customer and subscription references Stripe gives us. For App Store subscriptions in the iPhone app, we also receive the purchase events RevenueCat sends us. We never receive your card number. Stripe collects and holds payment details directly. Legal basis: performance of our contract (Art. 6(1)(b)), and our legal obligation to keep accounting and tax records (Art. 6(1)(c)).
Product events
A short, fixed list of twenty-two events, sent by the web app and the iPhone app between them: a file was parsed, sign-in started, sign-up completed, a report was requested, a paywall was shown, a share link was created, checkout was opened, an upload failed, an anonymous session was viewed, a session report was opened, the app finished loading once you were signed in (with whether on a phone, a tablet or a computer), an AI read across several sessions or timing sheets was requested, a chart in a coach chat answer was shown or left out, the upload window was opened (and whether on a phone), a step in choosing a file was taken (the file picker was opened, files were chosen, with how many and their file types but never their names, or the picker was closed without a file, each with whether on a phone, a tablet or a computer), and an account was deleted. Six more follow one sign-in on the web from the button to the account: you came back from Google, Apple or an email link, a sign-in error or notice was shown (the kind of error, never its text), a sign-in code was sent, a code was entered, the welcome screen was shown, and a sign-in was left unfinished. The list is closed on purpose and does not grow with every feature. When you are signed in these are recorded against your account id; when you are not, they carry no identifier, with one exception: the sign-in events carry a random number that ties the steps of a single sign-in attempt together. It is made up on the spot, is not worked out from anything about you or your device, is kept in the one browser tab you are signing in from, and is dropped when the sign-in ends or the tab closes. These events tell us whether the product works, not what you drove.
Each event also records when it happened and, on the web, the address of the page it happened on, without anything after a question mark. Some carry a few small details, such as how many sessions your account holds when the app finishes loading or, for a failed upload, the file extension and size, how many laps were found, the error code and a short error message. When you start a sign-in on the web, and when you come back from it, the event also records the type of browser: whether the page was opened inside another app's built-in browser and, if so, which one (for example Instagram or TikTok), and the name of the website that first sent you to us (for example instagram.com), never its full address. Your browser's identification string is read to work this out and is not stored or sent. Legal basis: our legitimate interest in understanding and fixing our own product (Art. 6(1)(f)).
Support correspondence
Emails you send us and our replies. Legal basis: performance of our contract, and our legitimate interest in answering you (Art. 6(1)(b) and (f)).
Technical logs and error reports
Standard server request logs from our host, and crash reports from our error monitor. The error monitor is configured to strip IP addresses, email addresses, cookies, request headers and request bodies before anything leaves your browser. Legal basis: our legitimate interest in keeping the service secure and working (Art. 6(1)(f)).
Session recordings in the product app
Once you are signed in, we record how the screen behaved during your visit, so that a page which fails to load, a button that does nothing or a feature that is hard to use can be found and fixed rather than guessed at. Recording starts on a screen of your own account, such as your dashboard, one of your sessions, the session list, a comparison, your progress and team pages or your account page. It starts nowhere else: not on the sign-in round trip, not on the sample session or the page that reads a file before you have an account, and not in the shared replay viewer that the demo on our homepage runs, so a visitor who has not signed in is not recorded by this at all.
The recording is masked in your browser, before anything is sent. Masking is the rule: text is replaced with blocks unless we have checked that a part of the screen holds nothing personal and marked it as safe to show. A part nobody has checked, and any screen we build later, stays masked.
What is left readable, so that we can see how the product is used:
- On the page of one of your sessions: the names of the tabs, headings, labels and buttons; your lap times and sector times; the numbers on the analysis cards, such as speeds, braking points, grip, temperatures, weather readings and scores; corner and section labels such as T4 or S2; and the charts and icons.
- On the same page, the charts and the flat track map that are drawn as pictures may be recorded as low-quality images, about one a second.
- On the same page, after an upload: the line that says the session was saved, and the fixed wording of the question about the driver name. Not the name itself.
- On your dashboard: section titles, labels and buttons; your lap times, your streak and the day counts; the scores and places on your driving traits; the numbers on the progress chart; and the wording shown when the dashboard is empty, offline or failed to load.
- In the session list: the page title and the season, the headings and buttons, the notes and empty states, and on each row the badges, the best lap, the gap and spread numbers and the sync status. Also the selection bars and the fixed wording of the delete window. Not the title of a row or the line under it, which hold the circuit, the date and the driver.
- On your account page: the page title, the label of each setting, and the fixed wording of the sign out and delete account controls. Never the value beside a label.
- On the progress and team pages: the page title, the two tab names, the section labels and the wording shown when there is nothing to display yet. Nothing else.
- On every screen: the navigation labels. The fixed wording of the upload window, which is its titles, the reading steps, the buttons, the counts and the status of each file, such as saved or failed, with the lap time, lap count and position that were read from it and the one-line verdict on its laps. The notice that you are offline, with the number of files waiting. And the fixed parts of the coach panel: its title, its greeting, the suggested questions and the voice note timer.
What is always masked or left out, on every screen:
- Names of people, wherever they appear: the driver of a session, your display name, team members and rivals. Your email address.
- Everything you type or choose in a field. Every form field is masked.
- The names of the files you upload, session titles, and the circuit name written in your file, because that is text somebody typed into the logger.
- Your conversations with the coach, both what you write and what it answers, voice note transcripts, and the written report on a session.
- Photos, images and video, which are dropped, and the 3D replay, which is not captured.
- Share links, and plan and billing details.
- The accessibility labels behind the charts and grids, which is where lap times and names are written out for screen readers.
- On the screens listed above, every part that is not named there, such as the greeting, your goal and your calendar on the dashboard, the plan card on your account page, and the team table.
- Every screen that is not listed above, including the comparison of two laps and race intel. Apart from the navigation labels, the upload window and the fixed parts of the coach panel, the text there is still replaced with blocks, and no chart is recorded as an image.
- Requests the page makes are noted by address only, with the query part removed, and never their contents. The address of a request can otherwise name the circuit you were looking at.
What is kept is the layout of the page, which screen you were on, what you clicked and the readable parts listed above, tied to your account ID so a broken screen can be matched to a support message. Never your name, never your email. Recordings are held by Sentry on their own schedule, which is shorter than the life of your account and independent of it, so deleting your account does not delete a recording that has already expired or is about to. You can object to this at any time using the contact address below, and we will exclude your account.
Session recordings on the sign-in and onboarding screens
The sign-in screen of the product app, and the short onboarding that follows a new account, are also recorded, by Microsoft Clarity, the same tool that records these marketing pages. We do this to find out why a sign-up that was started did not finish. Every field you type in (email address, password, sign-in code) is masked in your browser before anything is sent, and we do not give Clarity your email address or your account id. The recording is stopped before the signed-in app opens: your sessions, laps, coach chat, settings and billing are never part of it. It runs on the production site only.
Analytics on these marketing pages
The public pages at purpl.app (this one included) load Google Analytics on the production site. That is separate from the product events above and uses cookies. While we compare two versions of the homepage, a cookie of our own also remembers which one you were shown (see section 8). These pages and the product app also load the Meta pixel on the production site, to measure our ads on Facebook and Instagram and to show them again to people who have visited (retargeting).
The same public pages also load Vercel Web Analytics and Vercel Speed Insights on the production site. Web Analytics counts page views, the page you came from, your country and your type of device, and sets no cookie: a visit is told apart from another by a hash of the request that Vercel discards every day, so it cannot follow you across days or sites. Speed Insights measures how fast each page loads and responds in your browser. Neither is linked to your PURPL account.
The PURPL app for Windows
The Windows app is the product app on your computer, and keeps a copy of what it needs there so it works without internet. Everything above applies to it too. On top of that:
- On your computer. Your sign-in, your sessions and their analysis are stored in %APPDATA%\PURPL, in your own Windows user account. Sessions you add while offline wait there and are sent to your account when you are back online. Sessions the app downloads from a MyChron are also saved as ordinary files in Documents\PURPL\Sessions, so Race Studio 3 can open them.
- Your Race Studio 3 folder. If you let the app watch it, the app reads the session files in it to import them. It does not change or delete them.
- Crash reports. When the app crashes or hits an error, it sends a report to our error monitor, Sentry (see section 3), with the same stripping as on the web. It does not send a copy of your computer's memory.
- Product events. The app sends the same product events as the web app (see above). Events from while you were offline are kept on the computer and sent when you reconnect.
- Downloads and updates. The installer and its updates come from GitHub (see section 3), which sees the request your computer makes for the file, as any website does.
Legal basis: performance of our contract with you (Art. 6(1)(b)) for keeping and syncing your sessions; our legitimate interest in keeping the app working (Art. 6(1)(f)) for crash reports and product events.
3. Who processes your data for us
We use a small number of service providers. They act on our instructions and may not use your data for their own purposes. We do not sell your data to anyone, and we do not use your telemetry or your coaching reports to train AI models.
| Who | What they do | Where |
|---|---|---|
| Supabase | Database, authentication, file storage and the server-side functions that run the analysis. This is where your account and your sessions live. | European Union |
| Stripe | Payments, subscriptions and invoices. Stripe handles your card details directly; they never reach our servers. We hold only a customer reference and your plan status. | Ireland / United States |
| Anthropic | The AI models behind coaching reports and the coach chat. Called only from our server-side functions, never from your browser. | United States |
| Vercel | Hosting and delivery of this website and the product app, including standard server request logs, and, on these marketing pages, Vercel Web Analytics and Speed Insights. | European Union / United States |
| Sign-in (Google OAuth: email address and basic profile only) and, on these marketing pages, Google Analytics. | European Union / United States | |
| Apple | Sign in with Apple, in the web app and the iPhone app. Apple tells us what you allow in its own sign-in screen: your email address, which can be an Apple private relay address if you choose to hide yours, and your name. | United States |
| Sentry | Error monitoring, so crashes get found and fixed, and a masked recording of how the product app behaved during a visit, so a screen that breaks can be found without asking you to describe it. Configured to drop IP addresses, email addresses, cookies, headers and request bodies. Recordings are masked in your browser before anything is sent: names, email addresses, everything you type, file names and coach conversations are replaced with blocks, and images and video are dropped. On the page of one of your sessions the interface labels, lap times, analysis numbers, charts and the flat track map are left readable, so we can see where the product is hard to use. Recordings carry your account ID, never your name or email. | European Union / United States |
| ElevenLabs | Speech-to-text for the voice notes you record for the coach, and the synthetic voice that reads a report aloud. Your recording is sent to ElevenLabs to be transcribed; we do not allow it to be used to train their models. | United States |
| Microsoft (Clarity) | Heatmaps and session recordings on these marketing pages, and session recordings on the sign-in and onboarding screens of the product app, so we can see where a page confuses people and where signing up goes wrong. On those app screens every field you type in is masked in your browser before anything is sent, and we do not give Clarity your email address or account id. It does not record the signed-in app: it is stopped before your dashboard opens, and recordings there come from Sentry above, which masks text unless a part of the screen has been checked and marked as safe to show. | European Union / United States |
| Meta Platforms Ireland | The Meta (Facebook) pixel on these marketing pages and in the product app, so we can measure our ads on Facebook and Instagram and show them again to people who have already visited (retargeting). It receives the pages you open, your IP address, your browser details and its own cookie identifiers, and from the app three steps: an account created, a checkout opened, a first session uploaded. We do not give Meta your email address, your account id or your telemetry. | European Union / United States |
| Esri (ArcGIS) | Satellite imagery tiles under the GPS replay. Your browser, and our server when it lines the replay up with the imagery, request the tiles covering the circuit you drove; Esri receives those tile coordinates, never your name, your account or your telemetry. | United States |
| Open-Meteo | Historical weather for the day and place of a session. Receives the circuit coordinates and the date, never your name or account. | European Union |
| Vultr | Hosts the server that decodes AiM .xrk files your device could not read itself (see section 2). The server is ours: it receives the file and returns the laps and measurements in it. | European Union |
| Cloudflare | Carries the connection between your device and that decoding server, so a file sent for decoding passes through its network on the way. | European Union / United States |
| RevenueCat | Subscriptions bought in the iPhone app. The RevenueCat software runs inside the app from the moment it opens, even before you sign in. Once you do, the app gives RevenueCat your account ID so a purchase can be matched to your account. RevenueCat receives your App Store purchases (if you make any), your IP address and an identifier for your device, and tells us which plan you are on and whether it is active. Card details stay with Apple. | United States |
| Expo | Delivers notifications to the iPhone app. If you allow notifications, the app registers your phone with Expo, which receives the Apple device token for your phone and the identifier of the app, and returns the notification token we keep on your profile. No notifications are being sent at present. | United States |
| GitHub | Hosts the installer of the PURPL app for Windows and its updates. When you download the app, or the app checks for or downloads an update, your computer fetches the file from GitHub, which receives your IP address and your browser or app details as part of that request. It receives nothing about your account or your sessions. | United States |
4. AI coaching, specifically
When you ask for a coaching report or use the coach chat, the relevant parts of your session (lap and corner data, the numbers the report is about) are sent to Anthropic's API to generate the answer. This happens on our servers; your browser never talks to Anthropic and never holds an API key. The generated report is stored on your account so you can read it again.
Anthropic processes it as our provider under its commercial API terms and does not train models on it.
Photos. In the coach chat (called the Race Engineer in the apps) you can attach photos. The app shrinks a photo on your device, and our server passes it to Anthropic with your message so the model can look at it. A photo goes along again with your next message, then is left out of later ones. Our server does not store the photo itself.
Voice notes. If you record a voice note for the coach chat, the recording is not saved: it is held in memory on your device, sent through our server to ElevenLabs to be turned into text, and then discarded. Our transcription step stores neither the recording nor the text. The text then goes to the coach chat as if you had typed it, and is handled like any other message to it, including being sent to Anthropic as described above.
5. Transfers outside the EU
Some of the providers above are based in, or route data through, the United States. Where that happens, the transfer relies on the European Commission's standard contractual clauses or an adequacy decision, together with the provider's own safeguards.
6. How long we keep it
Your account, sessions and reports are kept for as long as your account is open. You can delete individual sessions in the product yourself at any time, and you can delete the whole account yourself from the You screen in the web app or the mobile app: that removes your account data, your sessions and your reports immediately. The steps are on the Delete your account page.
Invoices and payment records are kept for as long as tax and accounting law requires us to, even after an account is closed.
What the Windows app keeps on your computer is under your control, not ours: it stays there until you delete it, and deleting your account does not reach into your computer. To remove it, delete the two folders named in section 2.
7. Your rights
Under the GDPR you can ask us to:
- Give you a copy of the personal data we hold about you (access).
- Correct anything that is wrong (rectification).
- Delete it (erasure), subject to records we are legally required to keep, such as invoices. The Delete account button on the You screen does this instantly, without asking us.
- Restrict or object to processing we do on the basis of legitimate interest, including the product events described above.
- Take it with you in a portable, machine-readable form (portability).
- Withdraw consent where we relied on it, without affecting what happened before.
Portability is not something you have to ask for. PURPL has a one-click export built in: from the app you can download everything as JSON, or as CSV for a spreadsheet. It is on every plan, it is free, and it keeps working after you cancel. Taking your data out is not a feature you buy back.
For anything else, email info@purpl.app from the address on your account. We answer within one month, as the GDPR requires, and usually much sooner. There is no charge.
8. Cookies and local storage
The product app keeps your sign-in session on your device: in your browser's local storage on the web, in the iOS Keychain (the system's protected store for secrets) in the iPhone app, and in the app's own folder on your computer in the Windows app (see section 2). Without it you would be signed out every time you opened the app. It also remembers interface preferences on your device (the theme, which tab you last opened, whether the coach panel is open). These are necessary for the service to work, and the preferences are never sent anywhere.
These marketing pages additionally load Google Analytics, Microsoft Clarity, the OpenAI advertising pixel and the Meta pixel on the production site. See the note in section 2. Microsoft Clarity is also loaded on the sign-in and onboarding screens of the product app, and uses the same two cookies there. The Meta pixel is loaded in the product app too, and uses the same cookies there. What is set:
| Cookie | Set by | Purpose | Lifetime |
|---|---|---|---|
| _ga, _ga_* | Google Analytics | Tells returning visits from new ones | Up to 2 years |
| _clck, _clsk | Microsoft Clarity | Links the page views of one visit for the heatmap | Up to 1 year |
| __oppref | OpenAI pixel (first-party) | Attributes a sign-up to the ChatGPT ad it came from | Up to 90 days |
| _fbp | Meta pixel (first-party) | Tells returning visits from new ones, so our ads can be shown again to people who visited | About 90 days |
| _fbc | Meta pixel (first-party) | Set only when you arrive from a Meta ad, to tie the visit to that ad | About 90 days |
| purpl_home | PURPL (first-party) | Remembers which of two versions of the homepage you were shown, so we can tell which one works better. It holds the names of the test and the version, nothing about you. | Up to 90 days |
9. Children
Karting starts young. Accounts are for adults: a minor's data should be in PURPL only under an account held by a parent or guardian, who is responsible for it. If you believe a child has an account of their own, email info@purpl.app and we will deal with it.
10. Security
Your data is isolated per account at the database level, every read of your own data is authenticated as you, and secrets (payment keys, AI keys) exist only server-side and never in the browser. No system is perfect; if you find a hole, email info@purpl.app and we will take it seriously.
11. Complaints
If you think we have handled your data badly, tell us first: info@purpl.app. You also have the right to complain to a data protection authority. Ours is the Commission for Personal Data Protection (CPDP), Bulgaria, and you can equally complain to the authority in the EU country where you live.
12. Changes to this policy
If this policy changes, the date at the top changes with it. If a change matters to you (a new processor, a new purpose), we will tell you rather than quietly re-dating the page.
Also on this site: Terms of Service · Refund & Cancellation Policy.