Data & security

Effective October 23, 2026 · Version 2026-10-23

This page is CodeBreeder LLC’s written data retention policy and information security program for Study Desk, as described in our Privacy Policy.

Data retention policy

We keep personal information only as long as it is needed to run Study Desk, then delete it. A cleanup job runs every hour and removes expired data in small batches, so a large backlog can take a few hours to clear.

DataWhereKept forThen
Parent email and consent recordOur database (Cloudflare D1)While the account is in useDeleted when the parent deletes the account, or automatically 2 years after the last sign-in
Sign-in codes (hashed) and hashed network addressOur database10 minutes to useDeleted by the hourly cleanup
Sessions (hashed), device names, last usedOur databaseUp to 180 daysDeleted on sign-out, account deletion, or expiry. For a device marked “sign out and erase”, see the erase record below.
Encrypted family sync copyOur database (Cloudflare D1)While the account is in useDeleted when the parent deletes the account or starts sync over, or with an inactive account after 2 years. Each new copy replaces the previous one, which is kept for devices still downloading it and removed by the hourly cleanup once it is an hour old (normally within two hours; longer only if a cleanup backlog builds up). Starting sync over replaces the copy at once with an empty one that only the new family key can write to. An upload that is never published (the device stopped, or the account was deleted meanwhile) is refused and its parts are removed by the hourly cleanup once they are an hour old.
Link codes (family key locked with a one-time code)Our database10 minutesDeleted when used, or by the hourly cleanup
Random ids of the family’s sync copies (the current one and any from before starting sync over)Our databaseWhile the account is in useWhen the account is deleted, every one of them is marked deleted (below), so even a device that still holds an id from before starting over erases itself
Random id of a deleted sync copyOur database2 yearsLets other devices know to erase themselves; contains nothing else
Weekly summary email textPassed through, not stored by usOnly while it is sentHandled by Resend under its terms
Daily study helper countsOur database35 daysDeleted by the hourly cleanup
Spoken answers and dictation (short recordings, only while the microphone button is on)Passed through, not stored by usOnly while the request runsTurned into text by Cloudflare Workers AI (a parent’s dictation from Parent view by OpenAI only with zero data retention; a child’s recording never). Neither the recording nor the text is kept.
Homework photos and text sent to the study helperPassed through, not stored by usOnly while the request runsHandled under the AI provider’s own terms
Speech audio for card words (only when natural voice is on; made by Workers AI, or by OpenAI only with zero data retention)Cloudflare cache, labeled by a hash of the words, and the deviceUp to 1 year in Cloudflare’s cache; on the device until the device is erasedThe cache copy expires. It is the spoken words of the card, so it holds whatever the card says.
Consent linksOur database (hashed)7 daysDeleted when used or by the hourly cleanup
Erase record: a hash of the erased device’s old session and of its random device idOur database1 yearDeleted by the hourly cleanup
Feedback a parent sends (message, kind, optional rating, app version, device type; linked to the account, which gives the email) and our replyOur databaseUntil handled, then 1 year from that dayDeleted by the hourly cleanup; when the account is deleted, hidden at once and removed with it
Error reports (kind of error and code location only, app version, device type, screen; no message text and no account)Our database90 days after last seenDeleted by the hourly cleanup
Tester results and notes (invited testers only)Our databaseUntil testing endsDeleted when testing ends for that account, or when the account is deleted
Shared weekly study totals (sums per subject across sharing families)Our databaseWhile usefulThe sums don’t record which family sent what; a week can be shared until 14 days after it begins, and admins see it only after that and only when at least five families shared it. The one-way code that marks a family’s week as sent is deleted after 8 weeks.
Admin sign-ins (hashed) and the admin logOur databaseSign-ins 12 hours; log 1 yearDeleted by the hourly cleanup
Students, cards, progress, PINThe family’s devices (readable) and our database (encrypted only)Until the parent removes the student, erases the device, or deletes the accountErased from every synced device and from the encrypted copy

Information security program

Responsibility

Frandy Slueue, for CodeBreeder LLC, is responsible for this program. It is reviewed at least once a year and whenever Study Desk changes how it handles data.

Collect less

Protect what we keep

Service providers

We use Cloudflare (hosting, database, Workers AI, and turning children’s spoken answers into text), OpenAI (natural voice and a parent’s dictation, used only once OpenAI approves zero data retention for our account), DeepSeek (study helper for parent text), and Resend (email). OpenAI’s terms don’t allow children’s personal data without zero data retention, and card words or a dictation can hold a child’s name, so until that approval is in place nothing goes to OpenAI. Children’s recordings are never sent to OpenAI. Each receives only what its job needs, as listed in the Privacy Policy. We review their security and privacy terms before use and at each yearly review.

Testing and updates

Changes are checked with automated tests, including checks that no student details reach the server in readable form, and with an independent code review before they are released. Dependencies are pinned to exact versions and updated on purpose.

How we operate (not enforced by the code)

The Cloudflare account that runs Study Desk uses two-factor sign-in, and only its owner can reach the database. We review our providers’ security and privacy terms before using them and once a year. These are our own practices; the code above can’t enforce them.

If something goes wrong

If we learn of unauthorized access to personal information, we will stop it, find out what happened, tell affected parents by email without unreasonable delay, and notify authorities where the law requires. Report a security problem to frandyslueue@gmail.com.