What's new in this version: SpeakMate now includes a structured Lessons feature, asks for your first name during onboarding to personalise your experience, and syncs your name, learning progress, streak and XP to Cloud Firestore so they are tied to your in-app profile. This version also introduces rewarded ads: a time-based "watch ad to continue" gate in Practice mode (roughly every 2 minutes of conversation) and a similar gate before the first Speaking activity of a Lesson. You can now also permanently delete your account and all associated data directly from Settings β this is the only in-app data-reset control; there is no separate "Reset Progress" option. Previous versions kept your profile information only on your device β this version stores a subset of it on our servers as well. Also new: requests to our AI providers (OpenAI and Google Cloud Text-to-Speech) are now routed through a secure relay running on Cloudflare Workers, rather than being sent directly from the app β see Section 4 for details. This is an infrastructure and security improvement; it does not change what data is collected or why. See Sections 1, 4, 5, 9 and 10 for full details.
Plain English Summary: SpeakMate processes your voice and text through secure AI APIs β routed via a Cloudflare Workers relay that we control β to coach your English. We do not sell your data. Your full conversation history, voice cache, and detailed message-level scores stay on your device. Your first name, chosen learning level/goal, and summary progress (streak, XP, sessions) are now also stored in Google Cloud Firestore under a random, anonymous account identifier β never linked to your real identity, email, or phone number β so your progress can be reliably restored. AI voice is generated via Google Cloud Text-to-Speech. The app is free and supported by Google AdMob banner, interstitial, and rewarded ads. AdMob may use your Advertising ID (GAID) to serve relevant personalised ads β you can opt out at any time via Google Settings β Ads. A shared Cloud Firestore config document and the Google Play In-App Updates API are used to deliver mandatory app updates.
π 1. Information We Collect
We collect only the information required to deliver SpeakMate's coaching, Lessons, role-play features, forced-update mechanism, and ad-supported free experience. Here is a complete breakdown:
| Data Type | What It Is | Storage |
| First Name / Nickname |
The name you enter during onboarding, used to greet you (e.g. "Hi, Alex π") on the Home screen. We do not verify this is your legal or real name β you may enter any name you're comfortable with. This step is required to complete onboarding. |
On-Device + Firestore |
| Anonymous Account ID |
A random identifier automatically created by Firebase Authentication (anonymous sign-in) the first time you use the app. It is not linked to your email, phone number, or any other real-world identity, and is used only as a key to store your account stats (Section 1 above) in Firestore. |
On-Device + Firestore |
| Voice Input |
Audio recorded when you tap the microphone. Converted to text on-device via Android's Speech Recognition API. Raw audio is never transmitted to our servers. |
On-Device Only |
| Conversation Text |
Your typed or transcribed messages and AI responses, stored locally in an encrypted Room database on your device. |
On-Device Only |
| AI Feedback & Scores |
Grammar, Vocabulary, Fluency, Spelling, and Pronunciation scores generated per message and stored locally for progress tracking. |
On-Device Only |
| Session Records |
Metadata per practice session: date, duration, topic or mission title, and aggregate scores. |
On-Device Only |
| Account Stats (Level, Goal, Streak, XP, Sessions) |
Your selected level and goal, your daily streak count, total XP, total completed sessions, total minutes practiced, and your lesson-completed counter. Synced to Cloud Firestore under your anonymous account so these summary numbers survive if local app data is cleared. |
On-Device + Firestore |
| Lesson & Unit Progress (Detail) |
Exactly which lessons and units you've completed, and which lesson/unit you're currently on within each learning path. Tracked entirely on-device in an encrypted Room database β this level of detail is not sent to or stored in Cloud Firestore. |
On-Device Only |
| Lesson & Curriculum Content |
The Lessons themselves (units, exercises, prompts) are general educational content β not personal data β fetched from a shared Cloud Firestore library and cached on your device so lessons load quickly and can work offline once downloaded. |
Firestore (Shared Content) |
| Role-Play Mission Data |
Which missions you have completed and your XP earned. Stored locally. |
On-Device Only |
| User Preferences & App State |
Settings such as your selected AI avatar, TTS voice, reminder time, and onboarding draft answers, plus small local state like your current lesson/unit/level/goal position cache. Stored locally via Android SharedPreferences (most settings and cached position) and Android DataStore (avatar selection). |
On-Device Only |
| Ad Frequency Counters |
Non-personal counters (timestamps and completion counts) stored locally via SharedPreferences, used only to space out interstitial ads sensibly β e.g. never twice within 3 minutes. |
On-Device Only |
| Conversation Context (OpenAI API) |
A trimmed window of your recent messages (first message + last 2 turns) and the AI coach's system prompt are sent through our Cloudflare Workers relay to OpenAI's API to generate contextual responses. The relay forwards this content and attaches our API credential server-side; it does not store or independently use the content. Transient β we do not maintain a permanent server-side copy. |
Sent via Cloudflare Relay β OpenAI API |
| TTS Audio β Google Cloud |
The AI coach's reply text is sent through our Cloudflare Workers relay to Google Cloud Text-to-Speech to generate natural-sounding speech. The relay forwards the text and attaches our API credential server-side; it does not store the text or the resulting audio. The audio is streamed back and cached locally. Not stored on our servers. |
Cloudflare Relay β Google TTS β Local Cache |
| Advertising ID (AdMob) |
Google AdMob may collect your device's Advertising ID (GAID) to serve personalised or contextual banner, interstitial, and rewarded ads. The AD_ID permission is automatically injected by the AdMob SDK (play-services-ads) via manifest merging at build time. You can reset or opt out of personalised ads at any time via your device's Google Settings β Ads. |
Google AdMob |
| App Update Config (Cloud Firestore) |
A single shared, non-personal config document (appConfig/android) storing the current minimum required app version number. The app reads this document β never anything about you β to decide whether to prompt a mandatory update. No personal or account data is transmitted or read as part of this check. |
Firestore (Shared Config) |
| Crash Reports |
Anonymous technical crash logs (stack traces, device model, OS version) sent to Firebase Crashlytics. No conversation content included. |
Firebase (Anon.) |
| Analytics & Performance Events |
Anonymous usage events (e.g., "session started", "lesson selected") and app responsiveness metrics sent to Firebase Analytics and Firebase Performance. No personally identifiable information. |
Firebase (Anon.) |
Home screen visuals: The icons and illustrations shown on the Home screen (streak flame, topic emojis, play/clock icons, etc.) are static images bundled inside the app itself. They are not downloaded from the internet, are not personalised, and do not involve any user data.
SpeakMate is free and ad-supported. The app displays Google AdMob banner ads, interstitial ads (shown between sessions), and rewarded ads (a "watch to continue" gate at a few points, so continued AI usage stays funded β see Section 2 and Section 10) to support ongoing development. There are no in-app purchases or subscriptions in this version.
We do NOT collect: your email address, phone number, precise location data, contacts, photos, payment details, biometric data, or a verified real-world identity. The name you enter is self-reported and used only for greeting/personalisation purposes.
π― 2. How We Use Your Information
Your data is used exclusively to power the SpeakMate experience:
- Personalised Greeting: The name you enter during onboarding is used to greet you by name on the Home screen and in relevant places throughout the app.
- Real-Time AI Coaching: Your conversation messages are sent, via our Cloudflare Workers relay, to OpenAI (gpt-4o-mini) to generate grammar corrections, vocabulary suggestions, fluency tips, pronunciation notes, and scores in real time.
- Lessons & Learning Path: Structured lesson content grouped by level and goal is fetched from Cloud Firestore. Your position in the path β current unit/lesson, completed lessons, streak, and XP β is read from and written to Firestore so your progress unlocks the right content and is not lost if you reinstall on the same account session.
- Role-Play Missions: Your messages are sent, via our Cloudflare Workers relay, to OpenAI with a custom role-play system prompt so the AI stays in character as the specified scenario partner.
- Progress Tracking: Scores and session records stored on-device power your Progress dashboard, skill bars, and weekly streak calendar; summary totals (streak, XP, sessions, minutes) are mirrored to Firestore.
- AI Voice Responses: The AI coach's text reply is sent, via our Cloudflare Workers relay, to Google Cloud TTS to synthesise natural-sounding speech, cached locally for instant replay.
- Banner & Interstitial Ads (AdMob): Google AdMob banner ads and interstitial ads are displayed to support the free experience. Ad content is determined by Google based on contextual signals and, where personalisation is enabled, your Advertising ID (GAID).
- Rewarded Ads (AdMob): In Practice mode, roughly every 2 minutes of active back-and-forth conversation, the mic locks after the AI finishes speaking and switches to "Watch Ad to Continue" β never mid-recording, only between turns. In Lessons, a similar gate appears before the first Speaking activity of a lesson, with an explicit "Not Now" option. In both cases, watching (or briefly viewing and closing) the ad unlocks the mic again; this exists because continuing to converse with the AI coach costs us real, per-use fees (OpenAI and Google Cloud TTS) on your behalf. If a rewarded ad fails to load or show in Practice mode, the mic does not unlock for free β it stays gated while the app quietly retries loading another ad in the background, and your only way to end the wait is to tap "End Session." If a mission is in progress when the gate appears, its countdown timer is paused for the duration of the gate so you don't lose mission time waiting on an ad. No in-app currency or bonus XP is granted for watching.
- Forced / Mandatory App Updates: The app reads a shared, non-personal Cloud Firestore config document to check whether your installed version meets the minimum required version. If not, you'll see a mandatory update prompt via the Google Play In-App Updates API or the Play Store.
- Daily & Mission Reminders: Android WorkManager schedules local device notifications β no data leaves your device for this feature.
- Crash & Stability Improvements: Anonymous crash reports help us identify and fix technical issues.
- Usage Analytics: Anonymous event counts help us understand which features are most used so we can improve the app.
We do not use your data for advertising profiling, data brokering, or any purpose beyond what is listed above.
π 3. App Permissions
SpeakMate requests the following Android permissions. Each is strictly necessary. Adding Lessons, Firestore sync, and the Cloudflare Workers relay did not require any new permission beyond the existing INTERNET permission:
- π€ RECORD_AUDIO β Required for voice-to-text input. Audio is processed on-device β raw audio is never uploaded to our servers.
- π Speech Recognition Query β SpeakMate declares a
<queries> intent for android.speech.RecognitionService so Android 11+ can discover the Google Speech Recognition service. No data is collected by this declaration.
- π INTERNET β Required to communicate with our Cloudflare Workers relay (which in turn communicates with OpenAI and Google Cloud TTS), Google AdMob, Cloud Firestore (profile sync, Lessons content, and app-update config), and other Firebase services.
- π‘ ACCESS_NETWORK_STATE β Allows the app to check connectivity before API calls and before fetching the update-config document or lesson content.
- π POST_NOTIFICATIONS β Required on Android 13+ to send daily practice and mission reminders. You explicitly opt in via the Settings screen.
- π³ VIBRATE β Used for haptic feedback when the microphone starts recording.
- π RECEIVE_BOOT_COMPLETED β Required to reschedule reminder notifications after device restarts. The app also listens for
QUICKBOOT_POWERON for the same purpose.
- π’ AD_ID β Automatically added by the Google AdMob SDK (
play-services-ads) via manifest merging. Used to access your device's Advertising ID (GAID) to serve relevant personalised or contextual ads. You can opt out via Google Settings β Ads.
π 4. Third-Party Services
SpeakMate integrates with the following third-party services. Each processes data under their own privacy policies:
Cloudflare Workers (Secure Relay)
New. Your app never contacts OpenAI or Google Cloud TTS directly. Instead, requests are sent to a small relay service we operate on Cloudflare Workers, which attaches our API credentials server-side and forwards the request. Cloudflare processes this data only to relay it in transit and does not store it or use it for its own purposes.
Cloudflare Privacy Policy β
OpenAI API (gpt-4o-mini)
Powers all AI conversation, real-time feedback, post-session reviews, and role-play missions. A trimmed window of your conversation (first message + last 2 turns) is transmitted per request, via our Cloudflare Workers relay. No audio is ever sent to OpenAI.
openai.com/privacy β
Google Cloud Firestore
New in 1.2.3. Stores your first name, chosen level/goal, streak, XP, session and minute totals β keyed to a random anonymous account ID. Also hosts the shared library of Lesson content that every user reads from.
Firebase Privacy β
Firebase Authentication (Anonymous)
New in 1.2.3. Silently creates a random, anonymous user ID the first time you open the app β no email, phone number, or password is collected. This ID is only used to key your Firestore data.
Firebase Privacy β
Google AdMob
Displays banner, interstitial, and rewarded (watch-to-continue) ads to support SpeakMate's free experience. AdMob may collect your device's Advertising ID (GAID) and general device information to serve personalised or contextual ads.
Google Privacy Policy β
Google Cloud Text-to-Speech
The AI coach's reply text is sent, via our Cloudflare Workers relay, to Google Cloud TTS (Chirp3-HD voices) to generate natural-sounding speech, cached locally. No conversation history is sent β only the reply text.
Google Cloud Privacy β
Android Speech Recognition
On-device or Google-powered voice-to-text conversion. We only receive the resulting text transcript; raw audio stays on-device.
Google Privacy β
Cloud Firestore (App Update Config)
Used to enforce mandatory app version requirements. On each app launch, the app reads a single shared config document (not tied to your account) containing the current minimum required version. No personal data is transmitted or read.
Firebase Privacy β
Google Play In-App Updates API
Delivers mandatory app updates seamlessly inside the app via an IMMEDIATE update flow, governed by Google Play's terms and Google's Privacy Policy.
Google Privacy Policy β
Firebase Crashlytics
Anonymous crash reporting. Collects stack traces, device model, Android version. No conversation content included. Disabled in debug builds.
Firebase Privacy β
Firebase Analytics
Anonymous event tracking (feature usage, session counts, topic/lesson/mission selections). No personally identifiable information collected.
Firebase Privacy β
Firebase Performance
Monitors app responsiveness and network request latency anonymously. Helps detect and resolve performance bottlenecks.
Firebase Privacy β
Data transfers: OpenAI, Firebase (including Firestore and Authentication), Google AdMob, and Cloudflare are global service providers that may process data in the United States and other countries. Google Cloud TTS uses regional endpoints. When your data is processed by these services, it may be transferred internationally under their respective data processing agreements.
π 5. Lessons, Firestore & Your Progress
Version 1.2.3 introduced structured Lessons and moved part of your profile and progress from purely on-device storage into Google Cloud Firestore. This section explains exactly what changed.
How your anonymous account is created: The first time you complete onboarding, SpeakMate silently signs you in to Firebase Authentication using anonymous sign-in β no email, phone number, or password is ever asked for or collected. This creates a random ID (e.g. a1B2c3D4...) that lives in the app's private storage on your device.
What's saved under your anonymous account (users/{"{"}your-anonymous-id{"}"}) in Firestore:
- The first name you entered during onboarding.
- Your selected learning level and goal (e.g. "Beginner" / "Travel English").
- Your streak count, total XP, total completed sessions, total minutes practiced, and lesson-completed counter.
- The date you completed onboarding.
What is not sent to Firestore: your raw voice recordings, full chat transcripts, per-message AI feedback/scores, or device advertising identifier β as before. In addition, the detailed record of exactly which lessons and units you've completed and which one you're currently on is tracked entirely on-device in Room, not in Firestore; only the summary counters above (e.g. your total lesson-completed count) are synced. Note that your OpenAI/TTS API credentials are not something you hold or transmit at all β those are held solely server-side in our Cloudflare Workers relay (see Section 4 and Section 7).
Lesson content itself (the units, prompts, and exercises you complete) lives in a separate, shared part of Firestore that is the same for every user β it is general educational content, not your personal data, and is simply downloaded to your device so lessons load quickly.
Important β this was a change introduced in 1.2.3: Prior to 1.2.3, SpeakMate stated that "there is no server-side database containing your profile." That is no longer accurate as of 1.2.3 onward, including this version. The fields listed above are stored on our servers (via Google Cloud Firestore) so that your name, level, goal, and progress can be reliably kept in sync. See Section 6 for retention, and Section 9 for the self-service Delete Account & Data option that removes this record entirely.
πΎ 6. Data Storage & Retention
On-Device Storage: Your full conversation history, session records, per-message scores, mission completion status, and the detailed record of exactly which lessons/units you've completed are stored in an encrypted SQLite database (Room). Your app settings, onboarding draft, and cached lesson position are stored via Android SharedPreferences, and your avatar selection via Android DataStore. None of this local-only data is synced to Firestore.
Cloud Firestore Storage: Your name, selected level/goal, streak, XP, session totals, minute totals, and lesson-completed counter are stored on Google Cloud Firestore servers, keyed to your random anonymous account ID (see Section 5). This lets your summary stats be restored reliably even if local app data is cleared while your anonymous session is still active. The detailed, lesson-by-lesson completion record stays in Room only (see above) and is not part of this Firestore sync.
Audio Cache: TTS-generated audio files are cached on your device's internal storage. Clearable at any time via Settings β Clear Voice Cache or via Android's app storage management.
Retention Period β On-Device Data: Session records, XP, streaks, and lesson-by-lesson progress are retained until you use Delete Account & Data in Settings, or until you uninstall the app. Cached conversation transcripts are managed separately β each new Practice or Lesson session automatically clears the previous one β and, along with cached TTS audio, are fully removed by uninstalling the app or clearing its storage via Android's App Info settings.
Retention Period β Firestore Data: Retained on our servers for as long as your anonymous account is active, and afterward for backup/operational purposes, or until you delete your account (Section 9). Because sign-in is anonymous, note the following:
- Using Delete Account & Data in Settings (see Section 9) deletes your name, streak, XP, sessions, minutes, lesson-completed counter, and every other Firestore field tied to your account, then deletes the underlying anonymous Firebase account itself β plus wipes your on-device Room database (so the detailed lesson-by-lesson record goes too) β this is the complete, self-service way to remove your data everywhere.
- Uninstalling the app without first deleting your account removes your local anonymous session and your Room database (including detailed lesson progress) only. A fresh install creates a brand-new anonymous ID and a new, empty profile β your previous Firestore record is not automatically deleted and may persist on our servers unless you delete your account first (Section 9) or it is removed under our retention schedule.
OpenAI API & Google Cloud TTS (Transient, via Cloudflare Relay): Messages and reply text passed through our Cloudflare Workers relay to OpenAI and Google Cloud TTS are subject to those providers' own data retention policies. The relay itself does not log, store, or retain the content of these requests β it exists solely to attach our API credentials server-side and forward the request. We do not store copies of this content on our own servers.
App Update Config (Transient): No personal data is retained β the config document is a single shared value (minimum version number), not tied to any user or device.
AdMob Data: Data collected by Google AdMob is retained and managed by Google in accordance with Google's Privacy Policy.
Firebase Crash/Analytics Data: Anonymous crash and analytics data is retained by Google Firebase for up to 90 days.
π‘οΈ 7. Security
- Encrypted Local Storage: All on-device data is stored in an encrypted Room database protected by Android's built-in encryption.
- Firestore Access Control: Cloud Firestore security rules restrict every user document so that only the matching authenticated anonymous account can read or write it β your data is never readable by another user's session.
- HTTPS Only: All network communications, including Firestore and our Cloudflare Workers relay, use TLS/HTTPS. Cleartext traffic is explicitly disabled in the app manifest.
- API Key Security: Our OpenAI and Google Cloud TTS credentials are held exclusively server-side, in our Cloudflare Workers relay, and are never included in, downloaded to, or stored by the app itself. The app only ever communicates with our relay endpoints, which alone hold the credentials needed to call these third-party AI services.
- Signed APK: The app is signed with v1, v2, and v3 APK signing schemes to ensure integrity.
- Forced Updates: A shared Cloud Firestore config document enforces a minimum app version, always read fresh from the server (never from a stale local cache) so an outdated cached value can't be used to dodge a mandatory update.
- Minimal Data Collection: We follow the principle of data minimisation β collecting only what is strictly necessary, and keeping the most sensitive data (raw audio, full transcripts) on-device only.
- Ad Placement Policy: AdMob banner and interstitial ads comply with Google Play Ad Policy. In Lessons, the rewarded ad gate offers a visible "Not Now" option that exits the lesson without watching. In Practice mode, the gate is time-based (roughly every 2 minutes of live conversation) and only ever appears between AI turns, never interrupting your own recording; the mic stays gated until an ad is shown, and "End Session" remains available as an exit at any time.
While we take reasonable precautions, no method of transmission or storage is 100% secure. We encourage you to keep your device updated and secured with a screen lock.
πΆ 8. Children's Privacy
SpeakMate is designed for users aged 13 years and older. We do not knowingly collect personal information from children under 13. The name field during onboarding must be filled in to continue, but is unverified β you may enter any name or nickname, real or not.
Regarding Ads and Children: SpeakMate is not directed at children under 13. Google AdMob is configured to serve general audience ads in compliance with applicable laws including COPPA.
If you are a parent or guardian and believe your child under 13 has used the app, please contact us using the details in Section 13. We will take prompt steps to address any concerns, including deleting any associated Firestore record.
Users between 13β17 should have a parent or guardian review this Privacy Policy before use.
βοΈ 9. Your Rights
- Access: All your data is visible directly inside the app in the Home, Sessions, Progress, and Lessons screens.
- Local Data Removal: Uninstalling the app removes all locally stored data β conversation history, session records, per-message scores, and detailed lesson/unit progress. Your account and summary stats (name, streak, XP, sessions) remain in Cloud Firestore until you use Delete Account & Data or the record is removed under our retention schedule.
- Delete Account & Data (in-app, self-service): Go to Settings β Delete Account & Data to permanently delete your account. This removes your name, level/goal, streak, XP, sessions, minutes, and lesson-completed counter from Cloud Firestore, then deletes your anonymous Firebase Authentication account entirely β after confirming twice, since it cannot be undone. Your on-device Room database (full conversation history, session records, and the detailed lesson-by-lesson progress record) is wiped as part of the same action. It does not remove already-cached voice audio or the Google AdMob/Analytics identifiers tied to your device, which are cleared separately via Google Settings β Ads or by clearing the app's storage in Android Settings.
- Delete Account & Data (by email, if you can't use the app): If you're unable to complete deletion in-app, see Section 13 for how to request deletion by email, including which details we'll ask you for to locate your record.
- Opt-Out of Ad Personalisation: Go to Google Settings β Ads on your device to reset your Advertising ID or opt out of personalised ads. Non-personalised contextual ads will still be shown.
- Opt-Out of Analytics: You can disable Firebase Analytics via Google's device-level settings.
- Notification Control: Disable reminders at any time via Settings β Notifications or your device's notification settings.
- Microphone Access: Revoke microphone permission at any time in Android Settings β Apps β SpeakMate β Permissions. The app will still function in text-only mode.
- GDPR / CCPA: If you are in the European Economic Area or California, you have additional rights including data portability, correction, and the right to lodge a complaint with your local supervisory authority.
π° 10. Pricing & Ads
SpeakMate is free to download and use, supported by Google AdMob advertisements.
How ads work in SpeakMate:
Banner Ads β Displayed at carefully chosen positions within the app, never overlapping interactive elements or core coaching/lesson features.
Interstitial Ads β Full-screen ads shown at natural session transition points, specifically after a practice session ends and before the review screen appears. They are never shown during active coaching conversations or mid-lesson. Users can dismiss them after a short delay as required by Google Play Policy.
Rewarded Ads β In Practice mode, roughly every 2 minutes of live conversation, the mic gates behind "Watch Ad to Continue" right after the AI finishes speaking (never during your own recording). Watching or closing the ad unlocks it again; if no ad is available, the mic stays gated while a new one loads in the background rather than unlocking for free, and "End Session" is always available if you'd rather stop. In Lessons, a similar gate appears before the first Speaking activity, with a visible "Not Now" option to exit instead. This exists because continuing to chat with the AI coach costs us real OpenAI and Google Cloud TTS usage fees per turn. No bonus XP or in-app currency is awarded for watching.
- The app is completely free β all coaching, Lessons, missions, progress tracking, and features are available at no cost.
- Ad revenue helps cover API and cloud costs (OpenAI, Google Cloud TTS, Firestore, Cloudflare) and supports continued development.
- You can opt out of personalised ads at any time via Google Settings β Ads on your device. Non-personalised contextual ads will still be shown if you opt out.
- There are no in-app purchases or subscriptions in this version.
Future Changes: Features and pricing are subject to change in future versions. A future update may introduce paid features, subscriptions, or a premium ad-free tier. You will always be notified before any charges apply, and payment always requires your explicit action through Google Play.
π 11. Forced / Mandatory App Updates
SpeakMate uses a shared Cloud Firestore config document combined with the Google Play In-App Updates API to deliver a version-gated update mechanism, protecting users from running outdated or insecure app versions.
- Step 1 β Version check via Cloud Firestore: Each time you open SpeakMate (and each time the app resumes from the background while an update is pending), it reads a single shared document (
appConfig/android, field minVersionCode) β always fetched fresh from the server, never from a local cache, so an old cached value can't be used to dodge a mandatory update β and compares it to your installed version number on-device. This document is not tied to your account or identity in any way.
- Step 2 β Google Play In-App Updates (primary): If your version is below the minimum, SpeakMate attempts an IMMEDIATE update flow using the official Google Play In-App Updates API, shown directly inside the app.
- Step 3 β Fallback dialog: If the Play Core update flow isn't available, a non-cancelable dialog tells you an update is required and offers a single "Update" button that opens the Play Store listing (or your browser, if the Play Store app isn't available). The dialog cannot be dismissed by tapping outside it or pressing back β you can only proceed by tapping "Update."
- If the update flow is cancelled or fails and an update is still required, the prompt reappears rather than letting you continue on an outdated version.
- Fail-open on connectivity issues: If the version-check itself can't complete β you're offline, or there's a temporary Firestore error β SpeakMate does not block app usage. The check silently gives up for that launch rather than locking you out over a network hiccup.
Privacy note: The forced update check does not transmit or read any personal data. The Firestore document it reads is a single shared value (the minimum version number) β not tied to your anonymous account, name, or any other field described in Section 1.
We aim to minimise the frequency of forced updates and only trigger them when strictly necessary for security, stability, or compatibility reasons.
π 12. Changes to This Policy
We may update this Privacy Policy from time to time to reflect changes in our practices, app features, or legal requirements. When we make significant changes, we will:
- Update the "Last Updated" date at the top of this page.
- Display an in-app notice the next time you open SpeakMate after a material change.
Your continued use of SpeakMate after any changes constitutes your acceptance of the revised policy.
βοΈ 13. Contact Us
If you have questions, concerns, or requests regarding this Privacy Policy or how we handle your data, please reach out:
Requesting account deletion by email: We always recommend using Settings β Delete Account & Data in the app itself (Section 9) β it's instant and guaranteed to work. If you can't access the app (e.g. it's been uninstalled) and need to request deletion by email instead, please write to us at the address above and include:
- The name shown in your app profile (the one used to greet you)
- Your lessons completed count, as shown on your Home or Progress screen
- Your total XP, as shown on your Home or Progress screen
Because SpeakMate uses anonymous sign-in, we have no email, phone number, or username to look you up by β these three details are the only way we can attempt to locate and confirm the correct record before deleting it. We'll use them solely for that purpose and will not retain them afterward.