Privacy policy
CPT Trainer is a study tool for students preparing for the ISSA Certified Personal Trainer exam. It is run by Ben Tibbs (the "operator"). This page says, in plain words, what the app stores, where it goes, who can see it, and how to remove it.
The short version. Opening the app requires signing in with Google. Your progress is saved in your browser and, with the email address and name Google provides, in the service's database, so the same progress appears on your other devices. If you buy a pass, Stripe processes the payment; your card details never reach the service. When something breaks, an error report goes to Sentry so it can be fixed; it never contains your email or answers. Nothing is sold and there are no ads. To learn which pages and features help, the site and the app count visits and feature use with Google Analytics; your browser's Global Privacy Control or Do Not Track setting turns that off, and so does a switch in Settings.
What the app stores
- Study progress. Which terms you have answered, how many times right or wrong, your learning status per term, the lessons you have marked as finished, the days you studied, and your exam date and study days. This is kept in your browser's storage (localStorage and IndexedDB) on every device you use, along with your answers to the free practice questions on the public pages, your sign-in session and your analytics choice.
- Settings. Your round and flashcard settings stay in your browser and are not synced: each device keeps its own.
- Account details. With Google sign-in: your email address, name, profile picture link and Google account identifier, as provided by Google. Email sign-in is not offered yet and may be added later; if it is, the account will hold your email address only, and the emailed sign-in link will carry only that address. Signing in is required to open the app; the free practice questions on the public pages need no account.
- Sign-in logs. The sign-in service (Supabase Auth) keeps its own sign-in logs, such as your IP address and the time, under Supabase's own policy.
- Synced progress. A copy of the study progress above (not the round and flashcard settings), stored against your account so other devices can load it.
- Purchases, only if you get a pass. The checkout's Stripe identifiers (checkout session, payment if there was one and, for live payments, your Stripe customer id), the amount (0 for a pass a promotion code made free) and currency, the email you gave Stripe, when access was granted and, if refunded, when. Card details are entered on Stripe's page and never reach the service.
- Your access. Your pass (or access with no expiry that the operator granted) and the date your access ends, if it does. Without a pass, your account has the free trial of Module 1.
- The access cookies. When you sign in, the server sets two cookies.
cpt_sessionlets your browser open the app without asking the account service on every visit. It holds your account id, your access (a pass, access with no expiry, or the free trial) and when it ends, signed so it cannot be changed; it is not encrypted, page scripts cannot read it, it lasts at most 30 days and it is renewed when you visit.cpt_tierholds only the word "trial" or "full", so the app knows at once whether to show Module 1 or the whole course; page scripts can read it, and it lasts as long ascpt_session. Signing out removes both. - Usage analytics. The public pages, the sign-in page and the study app use Google Analytics 4 to count visits and feature use: the pages you open, the site that sent you, your approximate location (country, region and city), your device, browser and operating system, and events such as starting the free questions, answering a question (right or wrong, which lesson, which question style, how long it took), finishing a round, opening a picture, choosing a pass and completing or refunding a purchase (the pass and amount). It sets first-party cookies (
_gaand_ga_EWYX6LNQRW) that hold a random identifier, for up to 2 years. If you sign in, events carry your account's random id, never your email or name. It never receives your answers' text, your email, the course text or your payment details. Advertising features, ad personalization and Google signals are turned off, and Google may use the data only to provide Analytics to the operator. Analytics does not load at all when your browser sends Global Privacy Control or Do Not Track, or when you turn off Settings → Usage analytics; a purchase made with analytics off is not sent to it either. - Error reports. When the app, the sign-in page or the server hits an error, a report goes to Sentry: the error and where in the code it happened, the page address without its query, your browser and operating system, and your account's random id. It never contains your email, name, answers or payment details, and Sentry is set not to store IP addresses. Error reports are sent whatever your analytics setting, because they keep sign-in and checkout working.
- AI help keys, only if you connect AI help. If you connect Claude, ChatGPT or Gemini, your API key is stored in your own browser (encrypted where the browser allows it) and is never sent to the operator. Requests go from your browser directly to the provider you chose, under that provider's terms.
The app does not collect your location (beyond the approximate location above), contacts, or anything from other sites, and it uses no advertising trackers.
Where it goes
- Usage analytics: Google LLC receives the usage analytics described above, under the Google Analytics terms and Google's privacy policy (policies.google.com/privacy). Data is kept for 14 months, then deleted.
- Error reports: Functional Software, Inc. (Sentry) receives the error reports described above, under its own privacy policy (sentry.io/privacy).
- Hosting: Vercel serves the site and the app and writes ordinary web server logs (IP address, pages requested, time) that it retains under its own policy.
- Accounts and synced progress: Supabase hosts the database and the sign-in service. Your sign-in happens with Google. If email sign-in is added later, the sign-in service will send the email.
- Payments: Stripe, Inc. processes payments as the payment processor under its own privacy policy (stripe.com/privacy). Stripe receives your email address and the payment details you enter, plus your account's random id and, if analytics is on, the analytics ids that link the purchase to your visit.
- Backups: an encrypted copy of the database is saved every night to the operator's private GitHub repository (GitHub, Inc.).
- AI help: only if you connect it, and only to the provider you connected, from your browser.
Who can see it
You can see your own progress. The operator, who runs CPT Trainer and its database, can see the synced progress rows and the account details and purchase records of signed-in students, and uses them only to run the service and to improve the study material. Other students cannot see your data. Apart from the services named above, nobody else receives it, and it is never sold or shared for marketing.
How long it is kept
Browser storage stays on your device until you reset progress in Settings, clear the site's data, or your browser clears it. Synced progress and account details are kept while your account exists. An encrypted copy of the database is saved every night and each copy is deleted after 90 days. Purchase records are deleted with your account; Stripe keeps its own record of the payment as payment law requires, under Stripe's policy. Web server logs follow the hosting provider's retention, and sign-in logs follow the sign-in provider's.
Your choices
- Turn off usage analytics. Settings → Usage analytics, or turn on Global Privacy Control or Do Not Track in your browser. Any one of them stops analytics from loading.
- Keep your own copy. Export progress in Settings gives you a backup file you own.
- Sign out. Settings → Account → Sign out. Your local copy stays on the device; the synced copy stays in the database until you ask for deletion.
- Shared devices. When you sign in, the progress already on that device is merged into your account. On a phone or computer other people use, sign out when you finish.
- Delete your account and synced data. Email the operator at support@cpttrainer.com from the address you signed in with. Deletion is completed within 30 days; copies in the encrypted nightly backups expire within 90 days after that.
- Reset progress. Settings → Saving → Reset all progress. This clears the progress on this device. When you are signed in, it also clears your account copy and the progress on every other device where you are signed in. If you reset while signed out, the account copy is cleared the next time you sign in, because the newer reset wins. A reset cannot be undone; export a backup first if you might want the progress back.
Children
The app is for adult students of a certification course. You must be at least 16 years old to use it, and it is not directed at anyone younger.
Changes
If this policy changes, the new version is posted here with a new effective date.
Contact
Questions about privacy: support@cpttrainer.com.