Privacy policy
The grammar pages and the level test collect no personal data. The AI speaking demo and the waitlist collect a little, and this page lists it.
What we collect
- Grammar drills and the level test: nothing.
- The AI speaking demo: our server processes the conversation and briefly saves tutor replies to prevent duplicate charges on retries. Your browser saves the transcript, draft, lesson step and feedback on this device in IndexedDB. We do not save your audio.
- Daily limits: a count of requests, voice characters and voice seconds per network, with a scrambled IP address. We delete it after two days.
- The waitlist, if you join: your email, level, goal and the date.
Speaking accounts are optional. The grammar drills and level test require no account.
Your drill and test answers
The scoring runs in your browser while the page is open. The site does not send your answers anywhere, and it does not save them after you close the page.
The AI speaking demo
- When you speak, your browser sends your voice straight to Deepgram, a speech-to-text service. Deepgram returns the text to the page. Our server never receives the audio, and we do not store it. Our server only gives your browser a pass that is valid for 30 seconds. Deepgram's own privacy policy applies to the audio it receives.
- If Deepgram is not available, or its daily limit is used up, your browser turns your speech into text. Chrome and Edge may send your voice to Google or Microsoft to do this, and Safari may send it to Apple. Their own privacy policies apply. If you type your answers, no audio is used at all.
- The page sends the text of the conversation to our server on Cloudflare. Our server sends it to OpenRouter or Groq to generate the tutor's replies. OpenRouter passes it to its model provider. We do not save your learner transcript on the server. When answer limits are enabled, we keep tutor replies and request fingerprints for the current and previous UTC day to handle retries, then remove them on subsequent site activity.
- To read a reply aloud, our server sends the tutor's text to Deepgram, which turns it into speech. Your answers are not sent for this. Our server streams the audio without saving it. For buffered playback and replay, it may cache the tutor's audio for up to 30 days, so the same line does not need a new request.
- Do not say or type personal details, such as your address or phone number, in the lesson.
Saved speaking progress on your device
Your browser saves your current transcript, draft answer, lesson step, feedback and conversation settings in IndexedDB under english-ocean. This works without an account. The record stays on this device until you start over or clear site data. It does not sync to other devices, and no audio is stored. In private browsing or when storage is blocked, progress may not survive closing the page.
Hands-free dialogue checks pauses using microphone audio in your browser. It sends your answer automatically after your selected pause. You can turn dialogue off to review each answer before sending. The microphone pauses while the tutor speaks and when you leave the page.
Daily limits
The free demo has answer, time and network limits. Guests receive five answers a day; email sign-in gives fifteen total answers a day, including any guest answers already used. Answer limits reset at midnight UTC. Your browser stores the minutes you used today in localStorage, under the name eo-speak-budget. Our server counts requests, voice characters and voice seconds per network each day. It stores a one-way hash of your IP address mixed with a secret value and the date, not the address itself. It deletes the count after two days.
Email sign-in
We store your email address and last sign-in date in Cloudflare D1. Cloudflare Email Service sends an eight-digit code to your email. Codes expire after ten minutes and allow five attempts. We store hashes of codes and session cookies, not their original values. Expired codes and sessions are removed on later site activity. Accounts with no active sessions and no sign-in for 30 days are also removed on later activity.
Daily answer records use a guest session or account identifier. Signing in carries this browser's guest usage into your account. Starting over clears local lesson progress without restoring daily answers. Your full transcript stays on this device and does not sync to other devices.
The course waitlist
The waitlist is optional. If you join, we store your email address, your level, your goal and the date you joined, in a Cloudflare D1 database. No other company receives the list. We use it for one thing: to email you when the course opens. We delete the list when the course opens, or after 12 months, whichever comes first. Your browser also remembers that you joined (localStorage, eo-waitlist-joined), so the form does not show again.
To remove your email sooner, contact us. The waitlist is for people aged 16 and over.
Cookies
The speaking lesson uses an essential, HttpOnly session cookie named eo_session for guest allowances and email sign-in. It expires after 30 days or when you sign out. The site uses no tracking or advertising cookies.
Analytics
The site uses Plausible cookieless analytics to record page views in aggregate without following you across other sites. It also counts lesson steps and waitlist sign-ups. These counts never include your answers or your email.
Advertising
There are no ads today. The site reserves empty ad positions below the lesson and drill content. Ads will never sit between a question and its answer. If ads start later, they will be contextual: matched to the page, not to you, and without tracking cookies.
Children
The grammar pages and the level test are for learners of all ages and collect no data. Children under 16 must not join the waitlist.
Changes to this policy
We will update this page when the site changes. The date at the top shows the last update.
Questions
Contact details will be added before launch.