Privacy Policy

Last updated: October 11, 2026

Introduction

This policy describes the information the Shadosen iPhone app and this website handle, and which services receive it.

Information We Collect

Account Information

You sign in with Apple or Google through Firebase Authentication. The app sends the Firebase ID token to our API. We store the email address in that token when one is present, the name when Apple or Google provides one, the sign-in provider, and the Firebase user id. You can change the display name in the app. The phone keeps your account id, email, name, and sign-in tokens in secure storage. Refresh tokens stored on our server expire after 30 days. Access tokens expire after one hour. Our code does not set a retention period for the account record.

Usage Data

We store learning sets, lesson titles, durations, transcripts, word timings, play counts, practice days, streaks, and pronunciation reviews. A review includes the reference text, locale, duration, word-level differences, and a short summary. When a lesson-audio assessment has been saved, we also store that Azure assessment. Daily review counts are stored for plan limits. The app sends product analytics to Firebase Analytics with our user id, your subscription tier, and events for sign-in, screens, practice, recordings, the paywall, and AI review. A short note from on-device transcription (up to 100 characters) can be included in those events. The same events, except screen names, are sent to PostHog when the app build includes a PostHog project key. IP addresses are not stored. Before discarding the IP, PostHog uses it to estimate a location (city, region, country, postal code, and approximate coordinates). Our code does not send your account id to PostHog. Practice reminders are scheduled on the phone and are not sent to our servers. If you create a lesson with AI, the topic you type (up to 500 characters) is sent to a language model on Cloudflare, and the generated text is sent to a speech service on Cloudflare. We store that you generated a lesson. Our code does not store the topic text. Our code does not set a retention period for analytics events.

This website sends pageviews and App Store badge clicks to PostHog. A click includes the page, language, and badge placement. Each website event also includes browser, OS, device type, screen size, browser language, timezone, URL, referrer, and a random id for that page load. IP addresses are not stored. Before discarding the IP, PostHog uses it to estimate a location (city, region, country, postal code, and approximate coordinates). That data is processed in PostHog's US region. The website SDK keeps that state in memory for the page view. It does not set cookies or use localStorage for analytics, does not record sessions, and does not autocapture clicks. You can opt out by blocking scripts, using a content blocker, or by turning on Do Not Track in your browser, which this site honours. Our code does not set a retention period for those events.

Dictation results: for each clip you check, the date and time, playback speed, speech rate, the number of words caught, close, heard differently and not typed by word level, and the words you missed with their level. What you type is never saved or sent. This history is stored on our servers, linked to your account, and on your phone. Deleting your account deletes it from both.

Word lists used for Dictation word levels are listed on the credits page.

Audio Recordings

Lesson audio you import, record, or create with AI is uploaded to our API and stored until you delete that lesson or your account. Our code does not set an automatic deletion period. If you choose cloud transcription, the audio is uploaded to our API. The API sends it to Cloudflare Workers AI, first to Deepgram Nova-3 and, if that fails, to Whisper, and returns a transcript. That step does not save the audio file. On-device transcription uses Apple speech recognition. On iOS 26 and later it is set to run on the device. On earlier iOS versions the older recognizer is not limited to the device, so Apple may receive the audio. A shadowing take recorded during practice stays on the phone for that session and is not uploaded as a lesson. AI pronunciation review converts your take and sends it, with the reference text, from the phone to Microsoft Azure Speech. If we do not already have a saved assessment for the lesson audio, that lesson audio is sent to Azure the same way. Our API issues an Azure token that we treat as valid for 10 minutes and does not receive the audio. Our API does not save the review audio. Our code does not set a retention period for audio held by Azure, Cloudflare Workers AI, or Apple.

How We Use Your Information

Data Storage

The API runs on Cloudflare. Account and practice records are in Cloudflare D1. Audio files are in Cloudflare R2. Two practice counters, learning days and play count, are cached in Cloudflare KV. Our code does not set an expiry on those cache entries. Logs are enabled for every API invocation. Our code does not set a retention period for those logs. Some log lines include an audio filename, file size, and content type, or, when sign-in fails, the start of a token. Lesson audio you have opened is cached in the app and removed from that cache when you sign out. Playback speed and similar practice settings stay in a local database on the phone.

Third-Party Services

These services receive information when you use the features above:

Your Rights

In the app you can:

Account Deletion

You can delete your account from Account settings. We then delete your user record and the database rows tied to it, the audio files you uploaded, and the cached practice counters, and the app signs you out. Shared example audio is left in place. This does not delete the Firebase Authentication user, the RevenueCat customer, or reports already sent to analytics or error services. Our code does not set a retention period for those remaining copies.

Children's Privacy

Our service is not intended for children under 13 years of age. We do not knowingly collect personal information from children under 13.

Changes to This Policy

We may update this privacy policy from time to time. We will notify you of any changes by posting the new policy on this page and updating the "Last updated" date.

Contact Us

If you have any questions about this privacy policy, please contact us at support@shadosen.com.