Privacy Policy (Public Beta)

Last updated: March 1, 2026

This Privacy Policy explains what information Fluent Thai collects, how it's used, and the choices you have.

TL;DR

  • No account required. We don't ask for your name or email to use Fluent Thai.
  • We do collect usage and learning data to run the product (e.g., saving progress, generating your plan, fixing mistakes) and to improve it.
  • We don't sell your data.
  • Your learning progress is automatically backed up to our server so it can survive browser data clearing. Cross-device sync is also available via a pairing flow.
  • You can selectively reset local data via Settings > Troubleshooting, and you can request deletion of server-stored data associated with your device.

1) What we collect

A. Device and basic request information

When you use the site, we receive standard information that your browser and network send to any website, including:

  • IP address (processed by Cloudflare for security and delivery)
  • User agent (browser/OS), and basic device/platform signals
  • Referrer URL (the page that linked you to Fluent Thai, if any)
  • Timestamps of activity
  • Timezone information (sent by the client to keep day-boundaries and “today” features consistent)

We use this for site operation, security, debugging, and analytics.

B. Product analytics (usage events)

We collect event-based analytics about how the product is used, such as:

  • Which pages/apps you open, and navigation events
  • Session start/end and approximate duration
  • App/round interactions (e.g., starting a round, submitting an answer, completing a round)
  • Performance signals (e.g., correct/incorrect, scores, counts, timing/latency)
  • Audio playback health (e.g., play errors, missing assets, autoplay blocked)
  • Feature interactions (e.g., tips, coach hints, onboarding steps)
  • Diagnostics events (e.g., data recovery, manifest health checks, troubleshooting resets)

These events may include identifiers for the exercise/item you interacted with (to understand what's working and what isn't).

C. Learning and progress data (to provide features)

To power features like spaced repetition, error review, assessments, daily plans, coaching tips, and data backup/recovery, we store:

  • Spaced repetition state (cards/items reviewed, scheduling info, review history)
  • Mistake/error tracking (what was missed, counts, and status for review workflows)
  • Assessments / calibration results (scores and answers where applicable)
  • Daily session / plan state (today's plan blocks, completion status, results)
  • Skill/progress summaries used for the dashboard
  • Activity history (streaks, minutes practiced, sessions completed)
  • User profile and preferences

Learning data is stored both locally in your browser and server-side. The server copy acts as a backup so your progress can be restored if you clear your browser data.

D. Cross-device sync / pairing

If you choose to pair devices, we use a pair code flow to link multiple devices to the same internal user record so that supported data (e.g., SRS progress and other dashboard-critical state) can sync across those devices. Pairing does not require an email address.

Even without pairing, your data is backed up to the server for recovery purposes. Pairing additionally enables real-time sync across devices.

2) Identifiers we use (and why)

A. Device identifier

Fluent Thai generates a random device identifier stored in your browser's localStorage. This identifier is also persisted in a cookie (__ft_device_id, 2-year expiry, SameSite=Lax) as a durability fallback. If your localStorage is cleared, the cookie allows your device to be recognized so your backed-up data can be restored.

The device identifier is used to:

  • Keep your progress consistent on a single device
  • Associate analytics and learning state with your device
  • Enable data backup and recovery
  • Support pairing/sync when you opt in

This identifier is not your name and does not, by itself, tell us who you are.

B. Session identifier

We also use session-level identifiers to group activity into sessions (for example, when you return after being idle). Session identifiers may change more frequently than the device identifier.

3) Cookies and local storage

Fluent Thai uses:

  • A device ID cookie (__ft_device_id) to maintain your device identity if localStorage is cleared. This cookie contains only the random device identifier and expires after 2 years.
  • localStorage to store preferences, learning state, audio cache, and session data. This is the primary storage for your app experience.
  • sessionStorage for short-lived state like health-check throttles and recovery flags (cleared when you close the tab).

To manage your local data, use the Troubleshooting page in Settings. You can selectively reset specific parts of the app (audio cache, today's session, daily plan, coach notes, or SRS data) without losing everything. Backed-up data will be restored automatically.

4) Server-side data backup

Your learning progress is automatically backed up to our server. This includes settings, skill progress, spaced repetition state, error bank, activity history, and profile data. Backup happens in the background when you use the app.

If your browser data is cleared but your device ID cookie is preserved, backed-up data is automatically restored on your next visit. If both localStorage and cookies are cleared, a new device identity is created and previously backed-up data remains on the server (it can be manually linked upon request).

5) Where data is stored and processed

Fluent Thai runs on Cloudflare infrastructure. Depending on feature flags and configuration, your analytics and learning data may be stored/processed in:

  • Cloudflare Workers / Pages (application runtime)
  • Cloudflare D1 (database for product state, backups, and analytics)
  • Cloudflare Analytics Engine (aggregated analytics storage)
  • Cloudflare R2 (audio files, event archival / logs)

We don't sell your data and we don't share it with third-party advertisers.

6) How we use information

We use collected information to:

  • Provide core functionality (sessions, progress, review, plans, tips/coaching)
  • Back up and restore your learning data
  • Maintain and secure the service
  • Diagnose bugs and improve quality (including audio/content correctness)
  • Measure product performance and improve recommendations over time

7) Data retention

Retention varies by data type:

  • Analytics may be retained for trend analysis and product improvement.
  • Learning state is retained as long as needed to provide features (and as long as your device remains active or paired), unless you request deletion.
  • Server-side backups are retained to enable data recovery. They are deleted upon request.

We aim to retain only what is necessary for product operation and improvement.

8) Your choices and rights

A. Manage local data

Use the Troubleshooting page in Settings to selectively reset specific parts of the app. Each option shows exactly what will be cleared and what will be preserved. Backed-up data is restored automatically after a reset.

B. Opt out of pairing/sync

Pairing is optional. If you don't pair, you can still use Fluent Thai on a single device. Your data is still backed up for recovery purposes.

C. Request deletion

Because we store learning and analytics data server-side keyed to your device (and/or paired user record), you can request deletion of the data associated with your device(s). Contact us at privacy@fluent-thai.com and include:

  • The fact you want data deletion, and
  • The devices you used (and whether you paired devices)

(We may ask for a simple verification step to ensure you control the device(s) in question.)

9) Beta limitations

Fluent Thai is in Public Beta. During this period:

  • Data backup and recovery are best-effort. We work to ensure reliability but cannot guarantee zero data loss.
  • If both your cookies and localStorage are cleared simultaneously, your device identity is lost and backed-up data cannot be automatically restored (manual recovery may be possible upon request).
  • Sync between devices is eventual, not real-time. Changes appear on your other device the next time you open the dashboard.

10) Changes to this policy

We may update this policy as the product evolves. We will update the “Last updated” date at the top of this page.

11) Contact

Questions or requests: privacy@fluent-thai.com