Privacy Policy

Last updated: 2026-07-07 (v2.10) — see Changelog at the end of this document.

Data Controller

This Privacy Policy describes how the data controller listed below collects, uses, and protects personal data when you use the AI Language Tutor mobile application and the website at ailanguagetutor.app (collectively, the "Service").

EU Representative (GDPR Art. 27)

We are established outside the EU/EEA. Under GDPR Art. 27 we have designated, in writing, a representative in the Union.

We value your privacy and your rights as a data subject and have therefore appointed Prighter Group with its local partners as our privacy representative and your point of contact for the European Union. Prighter gives you an easy way to exercise your privacy-related rights (e.g. requests to access or erase personal data). To contact us via our representative Prighter, or to exercise your data-subject rights, please visit: https://app.prighter.com/portal/19285443777.

You may contact our EU representative via the portal above for any data-protection matter, or reach us directly at support@ailanguagetutor.app; we will respond within 30 days as required by GDPR Art. 12(3).

1. Data We Collect

We collect the following categories of personal data, each for a specific purpose:

2. Data We Do NOT Collect

3. Third-Party Processors (Sub-processors)

To deliver the Service we engage the service providers listed below. Where required by applicable law, we put in place data-processing terms and international-transfer safeguards, such as the European Commission's Standard Contractual Clauses (SCCs), Data Privacy Framework certifications, or another valid transfer mechanism. Maintenance of these contractual arrangements is an ongoing process; copies of relevant agreements are available on request.

ServicePurposeData sentRegion
Anthropic (Claude API)Primary LLM for Premium-tier feedback generation (claude-sonnet-4-6); fallback for voice and Free/Pro feedback (claude-haiku-4-5); shared fallback for the validation roleText only (no PII intentionally sent)USA
OpenAIPrimary LLM for in-conversation voice turns (gpt-5.4-mini) and for Free/Pro-tier feedback generation; text-to-speech (models tts-1, tts-1-hd, gpt-4o-mini-tts); fallback speech-to-text; text embeddingsText and voice audioUSA
Google GeminiShared fallback for feedback generation (gemini-3.1-pro-preview) for all tiers; primary LLM for the judge role (gemini-2.5-flash); used for content summary and validation rolesText onlyEU/USA (Google Cloud routing)
DeepgramPrimary streaming speech-to-text (Nova-2)Voice audioUSA (api.deepgram.com)
ElevenLabs (Premium tier)High-quality TTS voice synthesisText onlyUSA
Azure Speech (Premium tier)Pronunciation assessment and shadowingVoice audio sampleEU or USA (depending on Azure region)
PostHogProduct analytics and feature flagsUser ID, in-app events, IP addressEU (eu.posthog.com)
SentryError and crash trackingAnonymized stack traces and technical context; send_default_pii=False set at backend SDK init (backend/app/main.py) — Sentry does not receive request bodies, headers with auth tokens, or user identifiers by defaultUSA
RevenueCatSubscription state and IAP receipt managementRevenueCat user ID, entitlements, receipt metadataUSA
Apple (Sign in with Apple)OAuth authenticationApple-relayed or real email, optionally nameUSA
Google (Sign in with Google)OAuth authenticationEmail, name, Google account ID (scopes: openid email profile)USA
Firebase / Firebase Cloud MessagingPush notification deliveryDevice push token, message payloadUSA
TwilioSMS phone verificationPhone number, country, source IPUSA
ResendTransactional and lifecycle email deliveryEmail address, message contentUSA
S3-compatible object storage (self-hosted MinIO, running on our Hetzner instance)GDPR data-export bundles (7-day download TTL) and admin-generated article narration TTS. No user voice recordings are stored here — session audio is processed in-memory and kept on the user's device only (see §1 and §5)Export ZIP archives; pre-generated article narration audioEU/EEA — Finland (Hetzner data center, Helsinki); data never leaves the EU
Hetzner Online GmbHHosting infrastructure (compute, PostgreSQL, Redis, MinIO object storage, nginx)All Service data while at rest on our servers (account, learning, audio, logs)EU/EEA — Finland (data center in Helsinki); processor headquartered in Germany
Cloudflare, Inc.DNS, content delivery network, DDoS protection, and country-code lookup via the CF-IPCountry request header (stored on your profile for legal and consent localisation only; NOT currently used to route AI traffic or gate features)HTTP request metadata, including IP address (transient) and approximate countryGlobal edge network (EU/EEA POPs serve EU/EEA traffic); processor headquartered in USA
Telegram FZ-LLC (Telegram Bot API)Optional delivery channel for daily phrase, vocabulary reminders, and learning nudges via our Telegram botTelegram user ID, chat ID, username, message content (only if you connect your Telegram account)UAE / Global (Telegram-managed)

4. Legal Basis for Processing (GDPR Art. 6 and Art. 9)

We do not process special-category data under Art. 9. See "Voice biometrics determination" below.

5. Retention Periods (Art. 13(2)(a))

Data categoryRetention
Account dataUntil you delete your account (+ a 30-day grace period implemented by our account-purge worker)
Conversation transcripts30 days (then purged by our retention worker)
Audio recordings (pronunciation, session voice)Not retained on our servers. Audio is processed in-memory only and discarded once speech-to-text and pronunciation scoring finish (typically <2 seconds). A rolling local copy of completed-session recordings is kept on your device only, capped FIFO at 3 (Free) / 10 (Pro) / 20 (Premium); uninstalling the app or clearing app storage removes them immediately
Vocabulary entriesUntil you delete the entry or your account
JWT authentication tokensAccess token 15 minutes, refresh token 30 days
Analytics events (PostHog)24 months (enforced via PostHog EU Cloud project retention settings); analytics identity is deletable on request via support@ailanguagetutor.app and as part of account deletion
Error logs (Sentry)90 days (Sentry default). Cleartext email addresses are masked in log messages and Sentry breadcrumbs before transmission (helper app/core/logging.py::mask_email); only the domain is preserved for operational correlation
Web-server access logs (nginx access.log / error.log)7 days, enforced by host-side logrotate with daily rotation + 7 retained generations. Captures IP addresses (pseudonymous personal data under GDPR Recital 30); forensic capability beyond 7 days is intentionally given up in favour of Art. 5(1)(c) data-minimisation. Sentry real-time alerts and the 6-year audit_logs table cover incident detection that does not require access-log history
Coach free-text feedback (your written replies to the in-app coach thumbs-up / thumbs-down prompts)90 days, after which the free-text body is NULLed by our retention worker (the anonymized rating and category are kept for product analytics)
Telegram identifiers (telegram_id, chat_id, username)Until you disconnect Telegram in Profile → Settings or delete your account, whichever is first

6. Your Rights Under GDPR (Arts. 15–22)

You have the following rights with respect to your personal data:

7. International Data Transfers (Art. 13(1)(f))

Some of our service providers are located outside the EU/EEA (primarily the United States). Where personal data is transferred outside the EU/EEA, we use an applicable transfer mechanism where required, such as an adequacy decision (where granted by the European Commission), the EU-U.S. Data Privacy Framework for certified providers, the European Commission's Standard Contractual Clauses (SCCs), or another valid safeguard. Details of the applicable safeguards for a specific provider are available on request at support@ailanguagetutor.app.

8. Sign in with Apple (App Store Guideline 5.1.1)

The Service supports Sign in with Apple. When you use Sign in with Apple, you may choose to share either your real email address or an Apple-relayed private email (e.g. <random>@privaterelay.appleid.com). We store whichever email Apple returns to us. You can revoke our access at any time from your Apple device: Settings → Apple ID → Sign-In & Security → Apps Using Your Apple ID.

9. Sign in with Google

Sign in with Google requests the OAuth scopes openid, email, and profile only. We do not request access to Google Drive, Google Calendar, Gmail, or any other Google service.

10. Children

AI Language Tutor is not intended for users under the age of 16. We do not knowingly collect personal data from children under 16. If you believe a child under 16 has provided us with personal data, please contact support@ailanguagetutor.app and we will delete the data promptly.

11. Voice Biometrics Determination (Art. 9 explanation)

Our voice processing is limited to speech-to-text transcription, text-to-speech synthesis, and pronunciation assessment against a reference text. We do not create, store, or compare voice prints for the purpose of identifying or authenticating you. For this reason, voice recordings are processed as ordinary personal data under Art. 6, not as biometric special-category data under Art. 9.

12. Cookies and Tracking

On the public website (ailanguagetutor.app), we use PostHog (EU-hosted) for product analytics. PostHog activates only after you accept analytics cookies via our cookie banner. We do not use advertising or cross-site tracking cookies. In the mobile app, PostHog telemetry is opt-in by default: the SDK is not initialised at all until you accept the consent dialog on first launch (native auto-initialisation is disabled via the AUTO_INIT=false manifest flag on both Android and iOS). Firebase Cloud Messaging is used solely for push-notification delivery and does not capture analytics. You can withdraw or grant analytics consent at any time under Profile → Privacy.

13. Data Processing Agreement (DPA)

If you use AI Language Tutor on behalf of a company, school, or other organization and require a signed Data Processing Agreement, contact support@ailanguagetutor.app. We provide a standard GDPR-compliant DPA on request.

14. Required vs Optional Data (Art. 13(2)(e))

Some data is necessary to provide the Service; other data is optional.

If you do not provide required data, the corresponding features will not be available, but you may still use the parts of the Service that do not require that data (for example, text-only practice without voice features).

15. Security Measures

We use technical and organizational measures designed to protect personal data. These include transport encryption (TLS for all client–server traffic), encryption at rest for sensitive credentials, access controls with least-privilege principles for administrative access, environment-separated production credentials, audit logging for sensitive operations, automated retention enforcement (transcript purge worker and export-bundle cleanup worker; session audio is not stored on our servers and so has no cleanup worker — see §1 and §5), pseudonymisation of identifiers in observability tooling (Sentry user context carries only the user UUID with send_default_pii=False; cleartext email addresses in logger.* messages are masked via app/core/logging.py::mask_email before reaching the structured-log / Sentry-breadcrumb pipeline; a regression test in tests/core/test_mask_email.py guards against new leaks), bounded web-server log retention (nginx access / error logs are rotated daily with 7 retained generations; see §5), and restricted backend administrative access. No online service can guarantee absolute security. We will notify affected users and relevant supervisory authorities of any personal-data breach in accordance with GDPR Art. 33 and Art. 34.

16. AI Provider Configuration and Training

We do not use your conversation transcripts, voice recordings, or any personal content to train our own AI models. We only send personal content to third-party AI providers (Anthropic, OpenAI, Google Gemini, ElevenLabs, Deepgram, Azure Speech) where our account settings, the provider's published terms, or our data-processing agreement with that provider prohibit use of API submissions for provider-side model training, unless we disclose otherwise in this Policy before using that provider for personal content. Feedback-generation traffic is routed by subscription tier (Free/Pro to OpenAI primary, Premium to Anthropic primary, with Google Gemini as the shared fallback) rather than by country. If a provider's training posture is uncertain or changes, we will either stop sending personal content to that provider or update this section before continuing.

17. User-Provided Content in Conversations (Your Responsibility for Data Minimization)

The Service is designed for language practice. Conversation scenarios, prompts, vocabulary entries, written replies, spoken turns, and any other free-form content you choose to provide are sent in real time to our third-party AI providers (see §3 and §16) and retained for the periods set out in §5 (conversation transcripts for up to 30 days; session audio is not retained on our servers, only a short rolling copy on your device — see §1 and §5).

To protect your privacy, we ask you to use fictional names and made-up scenarios for practice. Please do not include real personal data in your conversations, uploads, or vocabulary entries, in particular:

This guidance reflects the data-minimization principle of GDPR Art. 5(1)(c): the safest data is the data we never receive. We apply automated safeguards on our side — PII masking in error logs, transport encryption, least-privilege access controls (see §15) — and we configure third-party AI providers not to use API submissions for provider-side model training (see §16). However, no automated filter can detect every form of personal data, and once you submit content it has already been transmitted to our AI providers. You remain responsible for the content you choose to share with the Service.

This section does not limit our obligations as data controller under GDPR. Your rights under Arts. 15–22 (see §6) continue to apply to any personal data you provide, including the right to erasure: deleting your account removes your transcripts and vocabulary entries within 30 days, subject to lawful retention obligations. If you realize you have submitted sensitive personal data and want it removed sooner, contact dpo@ailanguagetutor.app (or support@ailanguagetutor.app with subject prefix [GDPR]) and we will process the erasure request without undue delay.

18. Changes to This Policy

We will notify you of material changes to this Privacy Policy at least 14 days before they take effect, via in-app notification and — if you have given marketing-email consent — by email. Older versions are archived and available on request.

19. Contact

20. Changelog

VersionDateChanges
v2.102026-07-07Conversation-transcript retention tightened from 12 months to 30 days under GDPR Art. 5(1)(c) (data minimisation). §5 (Retention table row) and §17 (User-Provided Content pointer) updated. The retention_worker ARQ cron (app/workers/retention_worker.py) now purges session_messages older than 30 days on the daily 03:45 UTC pass; independently-stored derivatives (CEFR level, weak areas, vocabulary items, pronunciation scores, feedback summaries) survive the purge and continue to power progress tracking and coach recommendations. Section numbering §1–§20 unchanged.
v2.92026-07-06EU Representative (GDPR Art. 27) — appointment activated. The intro block "EU Representative (GDPR Art. 27)" is now populated with the designated representative Prighter EU Rep GmbH (operated by Maetzler Rechtsanwalts OG, Austria), registered EU/EEA address Schellinggasse 3/10, 1010 Vienna, Austria. Prighter provides an EU-based data-subject-request portal at app.prighter.com/portal/19285443777 for exercising rights of access, rectification, erasure, restriction, portability and objection under GDPR Art. 15–21. The three placeholder markers introduced in v2.3 are removed. Section numbering §1–§20 unchanged.
v2.82026-06-29Observability pseudonymisation + bounded web-server log retention. §5 (Retention) — added rows for nginx access / error logs (7 days, daily rotation via host-side logrotate with copytruncate) and clarified the Sentry retention entry now includes mask_email redaction of email addresses in log messages before transmission. §15 (Security Measures) — expanded to document the pseudonymisation invariant for Sentry user context (only the user UUID, send_default_pii=False), the mask_email helper in app/core/logging.py guarded by tests/core/test_mask_email.py, and the bounded web-server log retention. Section numbering §1–§20 unchanged.
v2.72026-06-29PostHog analytics moved to a strict opt-in model in the mobile app. §4 (Legal Basis) — analytics lawful basis switched from Art. 6(1)(f) legitimate interest to Art. 6(1)(a) explicit consent. §12 (Cookies and Tracking) — clarified that the mobile-app PostHog SDK is not initialised at all until the user accepts the consent dialog on first launch; native auto-initialisation is disabled via the com.posthog.posthog.AUTO_INIT=false manifest flag on both Android (AndroidManifest.xml) and iOS (Info.plist). Consequence: zero PostHog network activity (no /decide call, no session-replay snapshot, no distinctId emission) before the user grants consent. Section numbering §1–§20 unchanged.
v2.62026-06-29Session audio is no longer stored on our servers. §1 (Audio recordings), §3 (S3/MinIO sub-processor row), §5 (Retention — audio row), §14 (Optional data — meeting-audio upload claim removed) and §15 (audio cleanup worker reference removed) all updated to reflect the new on-device-only model: voice is streamed in-memory through Deepgram/OpenAI/Azure for transcription and pronunciation scoring (typically <2 seconds) and discarded; a rolling local-only copy of completed-session recordings is kept on your device, capped FIFO at 3 (Free) / 10 (Pro) / 20 (Premium). Word-level pronunciation scores remain stored as text. Section numbering §1–§20 unchanged. The legacy server-side retention (14 days in MinIO) was removed in the same release; existing audio was wiped via a one-off operator script.
v2.52026-06-22Added §17 "User-Provided Content in Conversations (Your Responsibility for Data Minimization)" — explicit guidance to use fictional names and scenarios for language practice, and a non-exhaustive list of categories users are asked NOT to share (government IDs, payment data, credentials, health/special-category data under Art. 9, third-party PII without consent, confidential business information). Section also reaffirms our obligations as data controller and points users to the erasure pathway (§6) for content they later wish to remove. Former §17 (Changes to This Policy) renumbered to §18; former §18 (Contact) to §19; former §19 (Changelog) to §20.
v2.42026-06-17Section 18 (Contact) split into a per-purpose alias list. dpo@ailanguagetutor.app (data-protection / DSR) and legal@ailanguagetutor.app (legal / DPA / B2B) added as dedicated aliases now that the Migadu Mail Lite mailbox stack is live; support@ remains the general-purpose address.
v2.32026-06-16Added structured EU representative (GDPR Art. 27) placeholder block with Prighter onboarding note and three [TO BE INSERTED] markers for mechanical find-replace once the contract signs. Clarified country-code purpose limitation in §1 (Approximate country) and §3 (Cloudflare row): the CF-IPCountry-derived country code is used only for legal/consent display and is NOT used to route AI traffic or gate features — this aligns the user-facing text with app/core/geo.py (_COUNTRY_SPLIT_ROLES = {}) and with docs/legal/vendor_transfer_register.md.
v2.2June 2026DeepSeek removed from all cascades (per ADR-001, 2026-06-10). Sub-processor table updated to reflect the post-DeepSeek routing: OpenAI primary for voice + Free/Pro feedback, Anthropic primary for Premium feedback, Google Gemini as shared fallback. Telegram bot integration documented as optional, with data-category and purpose disclosure.