Skip to content
SpeakFlora logoSpeakFloraSearch

Last updated September 7, 2026

Privacy Policy

SpeakFlora is a language-learning website and mobile app with a free 100-Chapter core journey. An account is required to learn so progress and Ranking activity cannot be mixed between people using the same device. SpeakFlora does not show advertising, sell personal information, or use learning activity to build advertising profiles.

Learning data

Your completed lessons, stars, Topic Journey completion, saved phrases, Coach schedule, streak, and onboarding preferences are stored locally first so the app remains responsive and can continue offline. When you are signed in, these records are also synchronized to your SpeakFlora account so an app update or another device can restore them. Sync events use an account ID, random installation ID, content ID, timestamps, and the minimum learning-state fields needed to merge progress without lowering stars or awarding XP twice.

SpeakFlora also synchronizes the topic IDs you select under “What interests you?”, your explanation language, and compact AI learning signals consisting only of a scenario ID, correction category, severity, and timestamp. This keeps feedback and recommendations consistent across your devices. Learning sync does not contain microphone recordings, speech transcripts, conversation messages, authentication tokens, or your email address. Changes made offline remain in an account-scoped outbox until the server accepts them.

Optional Ranking account

If you join Ranking, SpeakFlora stores your email address, a securely hashed password, account sessions, public display name, selected SpeakFlora avatar, optional country visibility, friend relationships, and server-accepted weekly XP. Your email is never shown on the public leaderboard. Country is optional and appears only when you enable it.

Ranking remains separate from learning-progress sync. Only eligible XP events created after you join affect weekly Ranking, such as first-time lesson completion, distinct review items within the daily cap, one Daily Challenge, and completed Topic Journeys. Synchronizing a local XP total does not add it to Ranking. You can hide your Ranking profile, sign out all devices, or delete your account; account deletion also removes cloud learning progress through the same account relationship.

Legacy rewards and future Premium features

SpeakFlora previously prepared account-scoped Petal wallets, Journey Passes, and subscription entitlement records. These records are retained for integrity and account deletion but Petals are not currently issued or required to open Chapters. XP and Ranking progress are not reduced or exchanged for learning access.

SpeakFlora does not currently require a subscription for its 100-Chapter core journey. If optional Premium tools are introduced later, mobile purchases may be processed by Apple or Google and managed through RevenueCat. SpeakFlora would receive the store product identifier, purchase status, expiration time, and account ID needed to restore access, but not your full card number.

Microphone and recordings

Speaking exercises request microphone access only after you choose to record. One short recording is sent securely to the SpeakFlora backend, where Cloudflare Workers AI performs speech recognition first. If a Home or Class pronunciation check is uncertain, mismatched, or unavailable, the recording and target text may be sent to Microsoft Azure Speech for pronunciation assessment. Pronunciation recordings, transcripts, target sentences, match metrics, and scores are not sent to OpenRouter. SpeakFlora does not request Azure audio logging and does not write the recording, transcript, or Azure score to a user profile, D1, R2, analytics, or application logs. The audio is processed for the request and then discarded.

The speaking check decides only whether to continue, retry, or offer a self-check. No numeric pronunciation score is shown or stored. It is a learning aid rather than a clinical, identity, or certified language assessment, and SpeakFlora does not claim to identify or certify an individual Vietnamese tone.

For an enabled single-word check, the result indicates whether the word was heard clearly enough to continue or should be tried again. If both speech services remain uncertain, the app does not mark the word wrong and offers another attempt or self-check. You can deny microphone access and continue using the speaking fallback without a score.

AI conversations

In an AI conversation, Cloudflare Workers AI transcribes each short recording and generates a Vietnamese reply. The reply text is sent to Viettel AI to create speech in your selected voice; a device voice may be used only if cloud speech fails. SpeakFlora uses Cloudflare-hosted text models for both the primary response and model fallback. AI conversation recordings, recognized text, recent conversation context, and generated replies are not sent to OpenRouter or another external text-model provider.

AI Gateway caching is disabled for personal conversations and raw prompt and response payload logging remains disabled. SpeakFlora may retain operational metadata such as model name, token count, estimated cost, error status, and latency. Conversation recordings and generated audio are not retained. Conversation text remains on the device for the 24-hour resume window and is not part of learning-progress sync, unless you separately opt in to the native-app quality program described below.

In the iOS or Android app, you may separately choose to help improve AI conversation quality. If you allow this, SpeakFlora stores recognized speech text, including text rejected as a likely speech-recognition error, and the opening and final AI replies shown to you for up to 30 days. We also store the scenario, turn number, moderation or failure stage, request ID, model and prompt revision, and limited speech evidence such as recording duration, byte count, bounded sound levels, voiced duration, speech-detection result, and speech-recognition confidence. This quality record does not include audio, generated speech, translations, coach hints, authentication tokens, system prompts, hidden controls, or private model reasoning.

Quality records use a pseudonymous account reference and are sent through a retryable processing queue to a separate encrypted database. Automated review checks for loops, irrelevant or generic replies, inappropriate gratitude, hidden-control leakage, and conversation continuity. Per-conversation text and analysis are deleted after 30 days. Non-identifying daily aggregates contain no conversation text and may be kept for up to 400 days. Choosing “Not now” creates no conversation-content record and does not limit learning. You can turn sharing off or delete saved conversation text at any time in Settings.

If you deliberately use “Report AI response,” the reported response and the context needed to investigate it may be retained for up to 90 days. Reporting is a separate user action and does not enable routine conversation-quality sharing.

Notifications and offline audio

Local reminders are scheduled on your device. If you separately enable smart push reminders in the installed app, SpeakFlora uses Firebase Cloud Messaging and Apple Push Notification service to deliver them. We store an encrypted device messaging token, notification preferences, timezone, and a minimal summary of synced learning activity to choose and suppress reminders. Notification delivery records are kept for up to 30 days. Notifications never contain recordings or conversation text. You can pause or disable reminders in Settings; notification opens and subsequent learning are measured only with your separate analytics consent. Account deletion removes linked notification data. Messages already accepted for delivery may still arrive after you switch a setting.

Audio packs you request are downloaded from SpeakFlora media hosting and stored in the app's private data directory until you delete them or uninstall the app.

Analytics and technical logs

The public website may use Google Analytics and Cloudflare Web Analytics to understand aggregate page usage and reliability. Those scripts are disabled in the iOS and Android app build.

You can opt in to anonymous product-quality analytics from Settings. This is off unless you enable it and can be disabled again at any time. The app may then share recommendation activity plus app session, lesson or chapter start and completion, AI completion or failure, translation ready or timeout, and aggregate pronunciation outcomes. Events contain a random event ID, a server-hashed installation identifier, platform, app and build version, level, lesson or chapter ID, outcome or error code, and a coarse duration bucket. They do not contain recordings, transcripts, translation text, email addresses, account IDs, or user IDs. SpeakFlora keeps raw event data for up to three months and may retain non-identifying daily aggregates for up to thirteen months.

The installed app also offers a separate “Share anonymous diagnostics” setting, which is off by default. If you enable it, Firebase Crashlytics may process a crash stack trace and routine app or device reliability information. SpeakFlora adds only app version, build number, a fixed screen category, and a fixed audio lifecycle state; it does not attach your identity, recording, transcript, translation, or conversation content. SpeakFlora does not include Firebase Analytics, and disabling diagnostics stops future Crashlytics collection subject to the SDK applying that choice on the next app launch.

Hosting and media providers may process routine technical information such as IP address, request time, device or browser type, and requested URL for security and service delivery.

Children

SpeakFlora is intended for a general audience aged 13 and older and is not directed to children under 13. We do not knowingly create Ranking accounts for children under 13.

Your choices

You can remove saved phrases and downloaded audio inside the app, disable anonymous analytics or anonymous diagnostics, turn off AI conversation-quality sharing, delete saved AI conversation text, revoke microphone or notification access in system settings, hide your Ranking profile, or delete your SpeakFlora account. Deleting the account removes its server-side learning events, AI conversation consent, raw conversation-quality records, per-session analyses, and any legacy reward, pass, or entitlement records.

Contact

Questions about privacy can be sent to support@speakflora.com.