Legal
Privacy Policy
Last updated: 2026-10-31 · Other versions: 简体中文 · Bahasa Malaysia
1. Who we are
FluentDojo (fluentdojo.com) is operated by DUOCODE TECHNOLOGY (Malaysia, business registration no. LA0087244-A). This policy explains how we collect, use, and protect your personal data when you use our real-time English tutoring service. For any question or request about your data, contact contact@fluentdojo.com.
2. Data we collect
- Account data: the email address you register with, your password stored as an irreversible hash, and an optional display name.
- Voice and video: once you actively enable your microphone (and optionally your camera), your audio (and video) is captured in real time to power the AI conversation, pronunciation assessment, and classroom interaction. This data is processed as a stream; nothing is recorded while your devices are off.
- Practice content and learning progress: conversation history, exercise answers, assessment scores, mistake cards, and review schedules, used to show you your history and drive personalised review; also the text recognised in call reviews, meeting transcripts and summaries, documents you upload, and the meeting agents and practice scenarios you create.
- Place category in the phone apps: only if you allow location access, the app works out on your phone what kind of place you are at (for example a café or a station). We receive that category, never your coordinates. See section 3A.
- Phone number: only if you sign in with an SMS code, your mobile number (mainland China numbers). We do not store the code itself (the code is generated and checked by Alibaba Cloud).
- Contact and support: the name, email address and message you send through the contact form. When you report a reply from the AI coach, the report is sent through the same form and includes the text of that reply. The Feedback button in the corner of the page sends what you type into it (and any screenshots you attach) to our own feedback service, Agentic CS (agenticcs.net); signed in, it also carries your account id, email and display name so we can reply, and signed out a random per-browser id (see section 5).
- Technical data: logs necessary for security and reliability (IP address, request times, account ID, error details).
3. Third-party services
To provide the Service we send each provider only what the feature needs. We do not sell your data and we do not allow providers to use it to advertise to you. Wherever a provider lets us opt out of having our data used to train its models, we have opted out.
- Alibaba Cloud Model Studio (Singapore; Qwen models): live speech recognition, AI conversation and replies, writing feedback, exercise generation, and suggestions and summaries in the meeting assistant. It receives your voice, your writing, and conversation and meeting content; it is not used for training, and request content is kept for at most 30 days.
- Cartesia (US): the AI coach’s voice. It receives the text the coach says; we have switched off “contribute to model training” in our account, and Cartesia’s privacy policy states no fixed retention period.
- Deepgram (US): the final transcript of each turn you speak in the practice room, live speech recognition in the meeting assistant, and transcription of recorded audio; when neither Youdao nor Tencent Cloud can assess a read-aloud, it also turns that recording into text. It receives your voice in the practice room, the read-aloud recording in that case, and meeting or recorded audio (in a meeting this can include other participants); every request we make opts out of model improvement, so audio and transcripts are not kept after processing, and request metadata without content is kept for 90 days.
- NetEase Youdao and Tencent Cloud (mainland China): pronunciation assessment. They receive your read-aloud audio and the reference text, and keep it only as long as needed to score it under each provider’s policy, with no fixed period stated; Tencent Cloud’s API documentation says audio is not stored by default.
- Our own model gateway (US) and the services it routes to: Anthropic (Claude) and Microsoft Azure OpenAI (GPT; Neon AI Gateway when Azure is unavailable): live suggestions, translation and summaries in the meeting assistant. They receive meeting transcripts and the documents you give a meeting agent. The gateway does not log conversation content, only usage (model, tokens, cost); Anthropic does not use it for training and deletes it within 30 days; Azure OpenAI does not use it for training and keeps it up to 30 days for abuse monitoring; Neon AI Gateway keeps it up to 30 days for abuse monitoring.
- Stripe: membership payments and subscriptions on the website (there are no purchases in the phone apps). It receives your email address, display name and payment details (collected by Stripe directly; we never see card numbers). When you delete your account, we have Stripe delete your customer record (email, display name, saved payment methods); invoices and payment records already issued, which show the email and name at the time, are kept by Stripe as accounting and tax rules require.
- Cloudflare: network delivery and protection for the website, the bot check (Turnstile) on the contact form, and storing our encrypted backups. It receives your IP address and requests; backups are files we encrypt with our own key, which Cloudflare cannot read. Turnstile signals are used only to detect bots and improve that detection, never for advertising.
- Amazon Web Services (Singapore): hosting our servers and database, which hold everything we store (encrypted in transit; the database is reachable only inside our network); retention is under our control, see section 6.
- Alibaba Cloud SMS verification (Phone Number Verification Service, SMS authentication; mainland China): SMS-code sign-in for mainland China (+86) numbers, and the code that confirms deleting an account that signs in only by SMS. It receives your phone number, sends the code in an SMS under our signature, and checks the code you type; the code itself is generated and stored by Alibaba Cloud and we never store it. What we keep about each send is in section 6.
- Zoho Mail / ZeptoMail: sending verification and password-reset emails, and forwarding contact-form messages. It receives your email address and the email content; sending logs (recipient, subject, delivery status) are kept for 60 days, and message bodies are not saved by default.
- Agentic CS (our own feedback service, agenticcs.net): the Feedback button in the corner of the page. It receives only what you submit through it, plus your account id, email and display name when you are signed in.
- LanguageTool (self-hosted): grammar checking for writing; the text does not leave our servers.
- Mac companion, “Hear the other side”: when you turn this on, the sound of your meeting app (Zoom, Teams, Lark or WeChat) is streamed while a meeting is running on FluentDojo to Deepgram (English meetings) or Alibaba Cloud DashScope (Chinese meetings) for speech recognition. We do not store this audio; what we keep is the meeting’s text transcript and summary.
When you use arrival reminders on an iPhone, the map lookup that tells the kind of place is done by Apple Maps (see section 3A).
Where data is processed: our servers and database are in Singapore. Live speech recognition and most AI replies are handled by Alibaba Cloud in Singapore; the final transcript of each turn you speak in the practice room is made by Deepgram in the United States; speech synthesis, meeting transcription and some meeting suggestions are handled by providers in the United States and pass through our model gateway in the United States; pronunciation assessment is handled by Youdao and Tencent Cloud in mainland China; the SMS sign-in code for mainland numbers is handled by Alibaba Cloud SMS verification in mainland China. Encrypted database backups are fetched and encrypted by our own backup server (located in mainland China) and stored with Cloudflare.
3A. The phone apps and location
FluentDojo’s iPhone, Apple Watch and Android apps show this website; the account and data are the same. Beyond the website the apps add one feature, arrival reminders: when you arrive somewhere (a café, an office, a station…), the app suggests a one-minute English practice for that kind of place.
- Location access is optional. On iPhone, arrival reminders are off until you turn them on in the app, and the app asks for location only then; you can turn them off at any time in the app’s “I’m at…” sheet. On Android, the app asks for location when you first open it, you can decline, and you can withdraw the permission at any time in system settings. Every practice feature works without location, and you can always pick a place by hand in “I’m at…”.
- Location in the background. To notice an arrival while the app is closed, arrival reminders need location access “Always” (“Allow all the time” on Android). On iPhone the app uses the system’s Visits service and is woken only when you arrive at or leave a place; on Android the app reads the location on the phone about every 15 minutes in the background.
- Your coordinates stay on your phone. They are used on the phone only to work out the kind of place: an iPhone asks Apple Maps for nearby points of interest (that lookup is handled by Apple under Apple’s privacy policy); Android uses no map or place service — the app compares the places you marked as home, office or school, or guesses from the time of day, and the places you mark are stored only on the phone, encrypted.
- We receive only the category. The app sends us the place category (such as “cafe”), the local hour and weekday, the interface language and the app platform (iPhone or Android), to pick a practice card. We do not store the category: to prevent abuse the server only counts how many cards an account took today, and that counter expires after two days; the cards themselves are the same for everyone.
- Notifications are created on the phone. Reminders are local notifications; we use no push service. The Apple Watch only receives the latest card from your iPhone; it uses no network and no location of its own.
- Huawei watch. FluentDojo’s Huawei watch (HarmonyOS) app shows the latest practice card the Android app sends it (its title, first line, situation and the link to the practice page); until it is connected to the phone it shows a few fixed sample cards. When you choose to start on the phone, it tells the phone only which practice page to open. The card travels between your phone and your watch through the Huawei Health app on the phone and Huawei Wear Engine (handled by Huawei under Huawei’s privacy policy). The watch app has no network access and no location of its own; it keeps only the latest card on the watch, and dismissing the card deletes it.
- The web page inside the app cannot read your location. The app blocks the page from using the browser’s location API, so the website itself never gets your position.
- No analytics in the apps. The Umami statistics in section 5 run only when you visit the website in a browser; the phone apps do not load them.
- The microphone is used only when you tap “Start listening” in the practice room or use read-aloud or the meeting assistant, the same as on the website.
4. How we use data
- to provide and improve real-time conversation, assessment, and learning features;
- to store your learning history and progress so you can review it at any time;
- to keep the Service secure (abuse prevention, troubleshooting).
We do not sell your personal data, and we do not use it for third-party advertising.
5. Cookies and local storage
We store your sign-in tokens (access/refresh tokens) in your browser’s localStorage to keep you signed in, and may store interface preferences. These are strictly functional and are not used for cross-site tracking. Clearing your browser data removes them.
Site analytics run on Umami, self-hosted on our own server: it writes no cookies, sets no cross-site identifier, and records only aggregate page views. We do not use Google Analytics, and we use no third-party advertising tracker.
The Feedback button (section 2) writes one localStorage entry, agentic-feedback-anonymous-id — a random id generated in your browser so a reply can find the same browser — only while you are signed out. It sets no cookie and, like everything here, is not used for cross-site tracking.
The guest trial (one practice session without registering) stores two things in your browser: a short-lived, server-issued anonymous trial token, and a random device identifier that exists only so the daily allowance is yours rather than shared with everyone on your network. The device identifier is generated on your device, is derived from nothing about you or your hardware, and is never linked to an account. It is not an account, carries none of your identifying information, and stops working once it expires or you clear your browser data.
The only thing kept from a trial is the conversation itself — the recognised text of what you said and the coach's replies — stored under a single throwaway anonymous identifier and automatically deleted by our servers 30 days after that trial was created. Pronunciation scores are shown live on the page and are not written to our database, and a trial creates no mistake cards and no learning history. Because there is no account, none of it is ever linked to your identity; once deleted it cannot be recovered.
FluentDojo’s phone apps do not load these statistics. The phone apps keep a copy of your sign-in in the phone’s secure storage (the iPhone Keychain, Android Keystore-encrypted storage), on that device only and not carried over in backups, to fetch practice cards in the background; it is cleared when you sign out of or delete your account in the app.
6. Retention and deletion
Account data and learning records are kept for as long as your account exists. You can delete your account yourself at any time, in the app or on the website: sign in and open Account → Delete account. Once you confirm with your password (an account that signs in only with an SMS code confirms with a code we text to its number instead), your account and all associated data are deleted immediately and cannot be recovered.
Deleted at once: your account (email, password, display name) and every device’s sign-in; conversations, answers, scores, correction cards and review history, study plans and progress; call-review text and moments; meeting transcripts, summaries, uploaded documents and meeting agents; practice scenarios you created. An active membership is cancelled with no further charges, and your customer record at our payment processor, Stripe (email, display name, saved payment methods), is deleted as well. Deletion itself is not a refund (see the Terms for refunds).
Gone after a set time:
- server logs (with IP address and account ID) are kept for at most 30 days; diagnostic records saved when the voice service fails (with a short log excerpt) are used only to investigate that failure and kept until it is resolved;
- the temporary state of a practice session is cleared after one hour without activity; anti-abuse counters expire within two days;
- after you delete your account, we keep a hash of your account ID and the time of deletion for 90 days, only to stop late charges (for example a payment made on another device around the time of deletion), and then delete them;
- SMS sign-in send records: for each code sent (to sign in, or to confirm an account deletion) we keep only the phone number, the send time, whether Alibaba Cloud accepted it, the refusal error code if it refused, and how many wrong codes you typed — never the code itself. Send records are deleted automatically after 30 days, and deleting your account deletes your number’s send records with it.
- contact-form messages held back because our daily sending limit was reached are stored temporarily and kept for at most 30 days; they are deleted automatically afterwards;
- backups: the database is backed up once a day, for disaster recovery only. Backups on the server are kept for 14 days; an encrypted copy is stored with Cloudflare, keeping one per day for the last 30 days and one per week for the last 12 weeks. So after you delete your account, your data disappears from every backup within about 12 weeks.
Kept by providers under their own rules: section 3 gives each provider’s retention. Stripe keeps only past invoices and payment records (which show the email and name at the time), as accounting and tax rules require; emails already forwarded to our support mailbox stay there unless you ask us to delete them.
An account that only ever signed in with an SMS code has no password, so it deletes itself with an SMS code instead: on the same Account → Delete account page, ask for a code and type the code texted to the account’s number. The account and its send records are deleted in the same way.
You may also email contact@fluentdojo.com at any time to request an export or the deletion of your account and all associated data; we will complete deletion within a reasonable time (normally no more than 30 days), except where retention is required by law.
The guest trial has no account, so this rule does not apply to it; its retention period is stated in section 5.
7. Security
All traffic is encrypted with TLS; passwords are stored as irreversible hashes; databases are reachable only on our internal network. No internet transmission can be guaranteed absolutely secure, so please keep your credentials safe.
8. Minors
The Service is intended for users aged 18 or over; minors should use it with the consent and guidance of a guardian. If you believe we have collected a minor’s data without guardian consent, contact us and we will delete it.
9. Changes to this policy
We may update this policy; the new effective date will be shown on this page and material changes will be announced in the product.
10. Contact
Data-subject requests (access, correction, deletion) or any privacy question: contact@fluentdojo.com. This policy is governed by the laws of Malaysia, including the Personal Data Protection Act 2010 (Act 709), enforced by the Department of Personal Data Protection (Jabatan Perlindungan Data Peribadi).
This notice is published in English, 简体中文 and Bahasa Malaysia (Notis Privasi). If the versions differ, the English version prevails.