Cookie Policy
Effective date: 12 August 2026 · Version 2026-08-12
This Cookie Policy lists every cookie and browser-storage key YoluBand uses, what each one does, and how you can control them. The list stays complete because an automated check in our build compares it with a machine-readable inventory of every key our code writes; if the code writes something this policy does not cover, the build fails. In short, cookies keep you signed in and remember your preferences, and analytics runs only if you switch it on. We set no advertising cookies and use no third-party advertising trackers.
1. What cookies and browser storage are
Cookies are small text records the browser stores for a website; localStorage and sessionStorage are similar browser stores that never leave your device by themselves. YoluBand uses all three. Azerbaijani data-protection law applies to any of them that contain personal data, and this policy plus our Privacy Policy describe exactly that.
2. Strictly necessary cookies
These are required for the service to work; they cannot be switched off from within the app:
- Sign-in session (Clerk): several cookies set by our authentication provider keep you signed in securely and expire with your session.
- NEXT_LOCALE: remembers your interface language (Azerbaijani, Russian, English).
3. Functional cookies
These make features work but the app survives without them:
- Look-and-feel cookies (yb.theme, yb.skin, yb.frame): remember your light/dark theme and the cosmetic skin and avatar frame you equipped, so the first paint already matches your choice. The app works without them; it simply opens in the default look.
- Placement cookies (yb_placement, yb_placement_sid): carry the result of a pre-signup placement test to your new account, then are cleared.
- Referral cookie (yolband_ref): remembers for 30 days that you arrived via a friend's invite link so both of you can receive the referral reward.
- Outreach-link cookie (yolband_acq): remembers for 30 days which of our own links brought you here (a post we published, or the sign-up button on the level-test result screen), so we can tell which channel produced a sign-up; it is read once when you finish setting up your account and then cleared.
- Teacher-link cookie (yolband_teacher): remembers a pending teacher connection or that you declined one.
- Preference and dismissal cookies (yb_tool_uses_v2, yb_streak_repair_dismissed, yb_vocab_suggest_dismissed, yb_find_level_dismissed): remember how many free runs you have used on each free tool, or that you closed a banner so we do not show it again. An older counter cookie, yb_tool_uses, is no longer used and is deleted whenever we encounter it.
- Age confirmation cookie (yoluband_ai_age_ok): set only after you confirm, on the free AI tools, that you are 18 or over, so this browser is not asked again; it lives one year, carries a single flag and nothing about who you are, and is cleared if you answer no.
4. Analytics (optional; you can decline)
Product analytics is off until you switch it on. We use PostHog, hosted in the European Union, for first-party product analytics: which screens are used, where learners get stuck, whether new features help. Nothing analytics-related runs before you accept — the PostHog code is not downloaded, no ph_ cookie or storage entry is written, and no event is recorded.
- The notice on your first visit has an Accept button and a Decline button. Declining takes one click and the app carries on exactly as before.
- If your browser sends Do Not Track, we never show the notice and analytics stays off.
- Your choice itself is stored in localStorage (yolband:consent_v2). It is version 2 because we re-ask everyone whose choice was collected under our earlier wording.
- When you are signed in, the choice is saved to your account as well, so you can change it at any time in Settings → Privacy. Withdrawing stops collection on this device and on your account: our servers record events for an account only while its stored choice is "accepted".
- Declining or withdrawing also clears the ph_ cookies and storage entries from this browser.
- Once analytics is on, events carry your user ID and event names, never the text of your essays, your audio, your tutor chats, or your email address.
- Separately, our hosting provider measures traffic and page performance for us (Vercel Web Analytics and Speed Insights); this measurement sets no cookies, stores no cross-site identifier, and is not part of the choice above.
5. Local and session storage we use
Kept on your device to make the app feel instant; none of it is advertising-related:
- yolband:consent_v2: your analytics-consent choice (with yolband:consent_synced_v1, a marker that the choice was already mirrored to your account, and the legacy yolband:consent_v1, read once for the migration and then removed).
- yb.theme: theme fallback used before the page finishes loading.
- yb.voiceConsent: a local flag that you have given voice-recording consent, so this device does not ask again (the authoritative consent record is stored with your account).
- Updated-terms notice marker (yb.termsNotice.seen): remembers that this device has already shown you the notice about updated terms, so it appears in its compact form afterwards; your acceptance itself is stored with your account.
- Campaign snapshot (yb.utm_first): if you arrived from a link with campaign tags (UTM), a first-touch snapshot so we know which channel brought you.
- Sound and input preferences (yb_input_hard_mode, and the sound-effects switch yolband.sfx): typing-mode and sound choices.
- Game and streak helpers (yb_daily_word, yb_league_result_seen, the daily-challenge streak yolband.dailyChallenge, the sentence-sprint mode yoluband_sentence_sprint_mode, per-game bests yolband.best.<game>.<difficulty>, the landing-page snake high score yolu_snake_best, and the daily-goal toast flag dgc:<date>): local bests, daily helpers, and flags that mark a celebration you have already seen.
- Lesson-variant memory (yb.variantSeen.v1): which wording variant of an exercise you saw last, so repeats feel fresh.
- Feedback-prompt counters (yolband:nps_v1, yolband:lesson_count, yolband:nps_due): local counters and a due flag that decide when to show the occasional feedback prompt.
- Answer and draft autosave (yolband_writing_<sessionId>, yolband_<section>_<sessionId>, yolband_<scope>_<sessionId>_<stage>): mock-test and SAT essay drafts and answer maps saved locally so a crash or a refresh does not lose your work.
- Offline queue (@yolband/offline_lesson_queue:<userId>, and the yolband-pwa browser database it prefers): lesson answers saved while you are offline. When you reconnect, those queued answers are transmitted to our servers so your progress is recorded. If a queued completion can no longer be accepted, a note about it (yb.lesson.droppedCompletions.v1, at most five, kept for seven days) lets the Learn page tell you once which lesson did not count.
- Offline app cache (yolband-v7, yolband-audio-v2): copies of app files and authored lesson audio (CacheStorage) so pages load fast and work offline.
- Install-prompt flags (yb.pwa.installDismissedAt, yb.pwa.lessonCompletions): remember that you dismissed the install-app prompt and how ready this device is for it.
- Session-only flags, which disappear when the tab closes: analytics once-per-session markers (yolband:analytics_once:<event>, written only after you accept analytics), the notice frequency cap (yb:notice-cap-v1), the teacher-invite "later" dismissal (yolband_teacher_later), the lesson crash-recovery payload (yb.lesson.completion.v1), the in-progress lesson state (yb.lesson.session.v1: which exercise you were on and your answers so far, kept for ten minutes so a reload resumes where you were), and scroll-once flags (yb_placed_scroll_<unitId>).
- QA marker (yb_qa): set by hand only on our own test devices so our team's usage is excluded from analytics; it is never set for real users.
6. How to control cookies, changes, and contact
You can decline analytics from the first-visit notice, and if you are signed in you can turn it on or off at any time in Settings → Privacy. If you cleared your browser storage, the notice appears again on your next visit. You can also delete or block cookies entirely in your browser settings; the app will still work, though you will be signed out and your preferences reset. Material changes to this policy are announced through an in-app notice; the date at the top is the effective date. The Azerbaijani-language version of this policy is the governing version. Questions: privacy@yoluband.az.