Legal

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 fourteen 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, an AI read across several sessions or timing sheets was requested, a chart in a coach chat answer was shown or left out, and an account was deleted. 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. They 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. 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 and your dashboard has loaded, we record how the screen behaved during your visit, so that a page which fails to load or a button that does nothing can be found and fixed rather than guessed at. Recording starts at the dashboard and nowhere else: not on the sign-in round trip, 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:

  • Text is replaced with blocks, and so are the accessibility labels behind the charts and grids, which is where lap times and sector times are written out for screen readers. Driver names, track names and lap times are not readable in a recording.
  • Every form field is masked, including the email field on the sign-in screen.
  • Images and video are dropped.
  • The charts, track maps, G-G plots and the 3D replay are drawn on canvas, and canvas is not captured at all. Your telemetry is therefore absent from the recording rather than merely hidden in it.
  • 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 and what you clicked, 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.

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).

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.

WhoWhat they doWhere
SupabaseDatabase, authentication, file storage and the server-side functions that run the analysis. This is where your account and your sessions live.European Union
StripePayments, 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
AnthropicThe AI models behind coaching reports and the coach chat. Called only from our server-side functions, never from your browser.United States
VercelHosting and delivery of this website and the product app, including standard server request logs.European Union / United States
GoogleSign-in (Google OAuth: email address and basic profile only) and, on these marketing pages, Google Analytics.European Union / United States
AppleSign 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
SentryError 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 replace every piece of text and every form field with blocks before they leave your browser, drop images and video, and do not capture the charts, track maps or replays at all. They carry your account ID, never your name or email.European Union / United States
ElevenLabsSpeech-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 only, so we can see where a page confuses people. Not loaded inside the product app, and it stays that way: recordings inside the app come from Sentry above, which masks everything by default.European Union / United States
Esri (ArcGIS)Satellite imagery tiles under the GPS replay. Your browser requests the tiles covering the circuit you drove; Esri receives those tile coordinates, never your name or account.United States
Open-MeteoHistorical weather for the day and place of a session. Receives the circuit coordinates and the date, never your name or account.European Union
VultrHosts 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
CloudflareCarries 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
RevenueCatSubscriptions 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
ExpoDelivers 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

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.

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, and in the iOS Keychain (the system's protected store for secrets) in the iPhone app. 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 and the OpenAI advertising pixel on the production site. See the note in section 2. What is set:

CookieSet byPurposeLifetime
_ga, _ga_*Google AnalyticsTells returning visits from new onesUp to 2 years
_clck, _clskMicrosoft ClarityLinks the page views of one visit for the heatmapUp to 1 year
__opprefOpenAI pixel (first-party)Attributes a sign-up to the ChatGPT ad it came fromUp to 90 days
purpl_homePURPL (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.