/cookies
Cookies & tracking.
Short version: no advertising cookies, no cross-site tracking, no consent wall. Everything we store is strictly functional.
We use only strictly-necessary / functional browser storage, no tracking or advertising identifiers:
- Theme preference (localStorage, audiolab-theme): remembers dark/light. Purely cosmetic.
- Sign-in session (Supabase auth token, localStorage): keeps you logged in on /account. Only present if you sign in.
- SkillLab progress (localStorage, skilllab-progress): your local scores, on your device only.
- Workspace clip (IndexedDB, audiolab-workbench): the decoded audio you loaded, so switching tabs does not re-decode it. Cleared after four hours or when you close the clip.
- Lab handoff (IndexedDB, audiolab-handoff): carries one file from a lab into the workspace. Written on handoff, read once.
- Your API key (localStorage, al:connect:key): only if you paste one on /connect, so you don’t have to fetch and paste it again next visit. It stays on your device (the page never sends it anywhere) and “Forget it” removes it.
- HearLab session (localStorage, hearlab-session): the captions and check-ins from your last listening session. Written on your device only; the audio itself never leaves the browser and is never stored.
- File-name privacy choice (localStorage, audiolab:anonymise-file-names): whether you asked us to anonymise file names before they are saved. The real answer lives on your account; this is only a local copy so the page does not have to wait for the network before it hides a name.
- Lab preferences (localStorage, al:preset:…): small interface choices per lab, such as which tab you had open or which caption language you picked.
- Interface state (localStorage, al_onboarded and al_acct_hidden): whether you have seen the intro, and whether account values are hidden on screen.
- Sign-in event marker (sessionStorage, al_si): so one visit reports at most one “signed in” event to our product analytics. Gone when you close the tab.
- Checkout marker (sessionStorage, al-ads-purchase): only exists if campaign measurement is switched on (see below), and only after a completed checkout, so reloading the confirmation page cannot report the same sale twice. Gone when you close the tab.
That list is meant to be exhaustive: it is everything this site writes to your browser. You can check us on it:
open your browser’s developer tools, Application → Storage, and compare. A build check
(scripts/privacy-truth-check.mjs) fails if the code starts writing a key that is not named here.
Under the ePrivacy Directive, strictly-necessary and functional storage like this does not require a consent banner. We therefore don’t show one, and we don’t load anything that would need one.
No Google Analytics, no Meta Pixel, no cross-site tracking, and no third-party marketing cookies. We do use PostHog for product analytics, on its EU-hosted instance, configured with in-memory persistence: it stores nothing on your device and sets no cookies, which is why it does not trigger a consent banner under the ePrivacy Directive.
No advertising networks either. The code to report a completed checkout to Google Ads exists in this site, but it only loads when a campaign id is configured, and today none is. This sentence is rendered from that same setting rather than typed by hand, so it cannot quietly become untrue: switch the campaign on and this paragraph changes with it.
You can clear all of the above at any time via your browser’s "clear site data" for audiolab.tools. Doing so signs you out and resets your theme and local progress; nothing else is affected. See also our Privacy Policy.
Last updated
2 July 2026. Initial publication.