2. What types do we use?
Necessary
These cookies and similar technologies are needed for TrainerLink to work safely, including sign-in, session management, security, bookings, payments and storing your cookie preferences.
Preferences
With your permission, we remember preferences such as your language, recent dashboard searches and whether the onboarding widget is open.
Share app usage
With your permission, we measure how TrainerLink is used and performs. This choice also includes masked session recordings; website recordings are currently disabled.
Read more about app usage and session recordings in the privacy policy.
Marketing
Marketing cookies are intended for advertising measurement. We currently use no advertising trackers.
3. Your cookie preferences
Necessary cookies do not require consent. We ask for your permission before using the other categories. You can reject optional cookies and change or withdraw your choice at any time through Cookie preferences at the bottom of the website or the button below. You can also delete or block cookies in your browser; blocking necessary cookies may affect how the website works.
4. Cookie overview
Below you can see the cookies and similar technologies we use, their purpose and provider, and how long they stay on your device.
Cookies expire automatically. Local storage has no automatic expiry: validity is checked when used, and values may remain until replaced or cleared. Requested functional settings stay available when you reject optional cookies. Payment providers may use necessary storage during checkout; see our privacy policy.
tl_consent_subject / tl_cookie_consent (cookies)
- Provider
- TrainerLink
- Category
- Necessary
- Purpose
- Link this browser to your cookie choice and remember the consent dialog.
- Retention
- 180 days
trainerlink.cookieConsent (localStorage)
- Provider
- TrainerLink
- Category
- Necessary
- Purpose
- Local copy of your choice. Optional processing starts only after verification of the server record.
- Retention
- Until replaced or browser storage is cleared; server validity up to 180 days
trainerlink.cookieConsent.pending.v1 (localStorage)
- Provider
- TrainerLink
- Category
- Necessary
- Purpose
- Retry an unsaved cookie choice. Does not authorize tracking.
- Retention
- Until saved successfully, replaced or browser storage is cleared
trainerlink.cookieConsent.intent.v1 (localStorage)
- Provider
- TrainerLink
- Category
- Necessary
- Purpose
- A random choice ID prevents a delayed response from overriding a newer withdrawal. Does not authorize tracking.
- Retention
- Until next choice or browser storage deletion
sb-*-auth-token (localStorage)
- Provider
- Supabase
- Category
- Necessary
- Purpose
- Sign-in and session management.
- Retention
- Until sign-out or deletion; expired sessions are not accepted
trainerlink.auth.* / trainerlink.guestTrainerSave.v2.* (localStorage)
- Provider
- TrainerLink
- Category
- Necessary
- Purpose
- Safely resume a requested registration, email confirmation or saved trainer.
- Retention
- Confirmation and guest request valid for 24 hours; removed on completion, expiry check or deletion
trainerlink.portalRole:* / trainerlink.notificationInstallation* (localStorage)
- Provider
- TrainerLink
- Category
- Necessary
- Purpose
- Selected account area and device ownership for requested push notifications; does not authorize marketing.
- Retention
- Until changed, unlinked, signed out where applicable or browser storage is cleared
trainerlink.nativeAppBanner.dismissedAt.v1 (localStorage)
- Provider
- TrainerLink
- Category
- Necessary
- Purpose
- Remember your request to dismiss the app prompt.
- Retention
- Effective for 30 days; stored value until replaced or deleted
trainerlink:ios-install-guidance-dismissed / trainerlink.pwa-permission-setup.v1
- Provider
- TrainerLink
- Category
- Necessary
- Purpose
- Remember dismissed installation guidance and completed or skipped notification/location setup. Does not grant browser permissions.
- Retention
- localStorage until deletion; permission setup falls back to sessionStorage or memory when unavailable
trainerlink.bookingIntent.v1 / trainerlink.checkin.token / trainerlink.pendingAuthContext.v1 / trainerlink.organisationInvitation.v1 / trainerlink.guestTrainerSave.current.v2 (sessionStorage)
- Provider
- TrainerLink
- Category
- Necessary
- Purpose
- Resume a booking, check-in or requested sign-in/invitation route.
- Retention
- Until completed or the tab closes; sign-in and invitation context valid for up to 30 minutes
trainer-service-v2:pending-create:* / trainerlink.organisationInviteRequest.v1:* / trainerlink-admin-package-adjustment:* (sessionStorage)
- Provider
- TrainerLink
- Category
- Necessary
- Purpose
- Safely retry requested changes without duplicate execution.
- Retention
- Until completed, deleted or the tab closes
rotterdampt_lang / trainerlink.onboardingWidgetOpen.v2.* / trainerlink.dashboard-search-history.v1:* (localStorage)
- Provider
- TrainerLink
- Category
- Preferences
- Purpose
- Remember language, expanded/collapsed onboarding widget and up to five recent dashboard searches. Requires preference consent.
- Retention
- Until replaced, deleted or preference consent is withdrawn
trainerlink.analytics.* (localStorage / sessionStorage)
- Provider
- TrainerLink
- Category
- Share app usage
- Purpose
- Consent-based usage measurement and first public page context.
- Retention
- First page context valid for 90 days; other local values until deletion/withdrawal, tab values until the tab closes
ph_* / posthog* (cookies, localStorage / sessionStorage)
- Provider
- PostHog EU
- Category
- Share app usage
- Purpose
- Usage measurement after analytics consent.
- Retention
- Cookies up to 365 days; local values until deletion/withdrawal, tab values until the tab closes
trainerlink.sessionReplayOwner (localStorage)
- Provider
- TrainerLink
- Category
- Share app usage
- Purpose
- Binds a newly verified consent receipt to its original analytics account so the choice can be restored safely after reopening. This value alone grants no permission.
- Retention
- Until you withdraw or replace the choice or clear browser data; web consent is valid for 180 days
trainerlink.sessionReplayConsent / trainerlink.sessionReplayIntent / trainerlink.sessionReplayIntentOwner / trainerlink.sessionReplayPaused (sessionStorage)
- Provider
- TrainerLink / PostHog EU
- Category
- Share app usage
- Purpose
- Optional masked web recordings after an acknowledged Share app usage choice.
- Retention
- Until the tab closes
Vercel Speed Insights
- Provider
- Vercel
- Category
- Share app usage
- Purpose
- Performance measurements after analytics consent; no persistent browser cookie of its own.
- Retention
- Measurements as described in privacy policy
Service worker / Cache Storage
- Provider
- TrainerLink
- Category
- Necessary
- Purpose
- Load the web app and offer updates; does not authorize tracking.
- Retention
- Until cache update, web app removal or site data deletion
| Name / technology | Provider | Category | Purpose | Retention |
|---|---|---|---|---|
| tl_consent_subject / tl_cookie_consent (cookies) | TrainerLink | Necessary | Link this browser to your cookie choice and remember the consent dialog. | 180 days |
| trainerlink.cookieConsent (localStorage) | TrainerLink | Necessary | Local copy of your choice. Optional processing starts only after verification of the server record. | Until replaced or browser storage is cleared; server validity up to 180 days |
| trainerlink.cookieConsent.pending.v1 (localStorage) | TrainerLink | Necessary | Retry an unsaved cookie choice. Does not authorize tracking. | Until saved successfully, replaced or browser storage is cleared |
| trainerlink.cookieConsent.intent.v1 (localStorage) | TrainerLink | Necessary | A random choice ID prevents a delayed response from overriding a newer withdrawal. Does not authorize tracking. | Until next choice or browser storage deletion |
| sb-*-auth-token (localStorage) | Supabase | Necessary | Sign-in and session management. | Until sign-out or deletion; expired sessions are not accepted |
| trainerlink.auth.* / trainerlink.guestTrainerSave.v2.* (localStorage) | TrainerLink | Necessary | Safely resume a requested registration, email confirmation or saved trainer. | Confirmation and guest request valid for 24 hours; removed on completion, expiry check or deletion |
| trainerlink.portalRole:* / trainerlink.notificationInstallation* (localStorage) | TrainerLink | Necessary | Selected account area and device ownership for requested push notifications; does not authorize marketing. | Until changed, unlinked, signed out where applicable or browser storage is cleared |
| trainerlink.nativeAppBanner.dismissedAt.v1 (localStorage) | TrainerLink | Necessary | Remember your request to dismiss the app prompt. | Effective for 30 days; stored value until replaced or deleted |
| trainerlink:ios-install-guidance-dismissed / trainerlink.pwa-permission-setup.v1 | TrainerLink | Necessary | Remember dismissed installation guidance and completed or skipped notification/location setup. Does not grant browser permissions. | localStorage until deletion; permission setup falls back to sessionStorage or memory when unavailable |
| trainerlink.bookingIntent.v1 / trainerlink.checkin.token / trainerlink.pendingAuthContext.v1 / trainerlink.organisationInvitation.v1 / trainerlink.guestTrainerSave.current.v2 (sessionStorage) | TrainerLink | Necessary | Resume a booking, check-in or requested sign-in/invitation route. | Until completed or the tab closes; sign-in and invitation context valid for up to 30 minutes |
| trainer-service-v2:pending-create:* / trainerlink.organisationInviteRequest.v1:* / trainerlink-admin-package-adjustment:* (sessionStorage) | TrainerLink | Necessary | Safely retry requested changes without duplicate execution. | Until completed, deleted or the tab closes |
| rotterdampt_lang / trainerlink.onboardingWidgetOpen.v2.* / trainerlink.dashboard-search-history.v1:* (localStorage) | TrainerLink | Preferences | Remember language, expanded/collapsed onboarding widget and up to five recent dashboard searches. Requires preference consent. | Until replaced, deleted or preference consent is withdrawn |
| trainerlink.analytics.* (localStorage / sessionStorage) | TrainerLink | Share app usage | Consent-based usage measurement and first public page context. | First page context valid for 90 days; other local values until deletion/withdrawal, tab values until the tab closes |
| ph_* / posthog* (cookies, localStorage / sessionStorage) | PostHog EU | Share app usage | Usage measurement after analytics consent. | Cookies up to 365 days; local values until deletion/withdrawal, tab values until the tab closes |
| trainerlink.sessionReplayOwner (localStorage) | TrainerLink | Share app usage | Binds a newly verified consent receipt to its original analytics account so the choice can be restored safely after reopening. This value alone grants no permission. | Until you withdraw or replace the choice or clear browser data; web consent is valid for 180 days |
| trainerlink.sessionReplayConsent / trainerlink.sessionReplayIntent / trainerlink.sessionReplayIntentOwner / trainerlink.sessionReplayPaused (sessionStorage) | TrainerLink / PostHog EU | Share app usage | Optional masked web recordings after an acknowledged Share app usage choice. | Until the tab closes |
| Vercel Speed Insights | Vercel | Share app usage | Performance measurements after analytics consent; no persistent browser cookie of its own. | Measurements as described in privacy policy |
| Service worker / Cache Storage | TrainerLink | Necessary | Load the web app and offer updates; does not authorize tracking. | Until cache update, web app removal or site data deletion |
5. Privacy policy
For more information about how we process personal data and your privacy rights, see our Privacy statement.