Codoku privacy policy
Last updated: 20 October 2026.
Codoku is a mobile app for practising data structures and algorithms in Python. This page says what the app stores about you, why, where it lives, and how to see or delete it. There is no advertising and no third-party analytics; the only services that handle your data are the ones named below.
Who runs Codoku
Codoku is run by its owner, reachable at hello@codoku.app. That address is also the sender of the app's sign-in e-mails.
Before you create an account
You can take the first lesson without an account. Until you sign in, your answers to the three setup questions, your progress in that lesson and a short list of step events stay on your phone only. Nothing is sent to our servers.
When you create an account, three things are uploaded once: your three setup answers, the finished first lesson, and the step events, so your progress counts from the start. If you finish the lesson and open the app 30 or more days later without an account, the finished lesson is reset on the phone and nothing is uploaded.
Creating an account
You sign in one of three ways. We store what each one gives us and nothing more.
| Method | What we receive |
|---|---|
| E-mail code | your e-mail address |
| Sign in with Apple | the identifier Apple assigns to you for Codoku, the e-mail Apple shares or relays, and your name once at first sign-in |
| Sign in with Google | your Google account's identifier, e-mail address and name |
A name from Apple or Google is offered as your display name; you can change it. Sign-in sessions are kept in your phone's secure storage, not in the app's ordinary files. A session token lasts one hour and renews itself while you use the app; signing out ends it.
We e-mail you when a sign-in method is added to or removed from your account and when your e-mail address changes, so a change you did not make is visible to you.
What we store while you use the app
Everything below is tied to your account. Each row is readable by you alone from the app; the service that runs the app, and the owner through the project's administrative credentials, can read any row, and use that access only to run the service and to answer your requests.
| Group | What | Why |
|---|---|---|
| Profile | time zone, daily goal, reminder time, interview date, chosen goal and level, your track, the dates you created the account and finished setup | to schedule your lessons and reminders |
| Public profile | username, display name, avatar colour, the date you joined, the date you last changed your username, whether your activity heatmap is shown | to show you in the app |
| Lessons | each lesson or practice session, the exercises in it, every answer you give and whether it was correct | to grade, to pick what you practise next, and to show your progress |
| Progress | per-lesson completions, per-unit tips seen, skill strength, daily activity, streak and streak freezes, XP and crowns, this week's XP, an 84-day activity heatmap, how often each exercise was served to you and missed, the expiry of any XP boost | to run the path, the streak and the stats on your profile |
| Reports | exercises you report, the reason and your note | to fix the content |
| Events | eight named app events, for example session_completed and app_opened, each with up to 1 KB of context such as the setup step, your level, a first-try score and the time |
to see which parts of the app are used |
| Request counts | how many times you called each server route in the current window | to enforce the per-route limits |
Three tables for a future social feature (share links, follows, blocks) exist in the database but nothing writes to them today; the feature is switched off.
The sign-in service records the IP address and browser or app identifier of each sign-in in its own logs. Beyond that we store no location, no contacts, no device identifier and no advertising identifier.
How long we keep it
| Data | Kept for |
|---|---|
| Profile, lessons, progress, reports | until you delete your account |
| Events | 365 days, then deleted nightly |
| Request counts | 48 hours, then deleted nightly |
| Username hold after a change or a deletion | 30 days, then released nightly |
| Sign-in logs | by the sign-in service; the app does not delete them |
| Revocation-failure record (below) | not deleted; your account's internal id and nothing else |
| Nightly run record | not deleted; counts only, no account data |
| Server function logs | by the hosting platform for its log retention period |
Nightly processing
A job runs at 03:00 UTC every night. In order, it:
- Deletes request counts older than 48 hours, and writes to its log the internal id of any account that reached the daily username-check ceiling.
- Releases username holds older than 30 days.
- Counts accounts that asked for an e-mail code 7 or more days ago and never entered it; nothing is deleted.
- Deletes events older than 365 days.
- Reads the sign-in service's audit log for password changes in the last 72 hours and writes the internal ids of those accounts to its log; the app sets no passwords, so any such change is a sign of misuse.
- Recomputes profile statistics for accounts with a lesson completed in the last day.
- Finishes any account deletion the app could not complete, one hour or more after the request.
- Records one row of counts for the run, with no account data.
The server function also writes a log line for each failed request, holding a request id, the route and the error, and never your e-mail address.
Reminders
Reminders are scheduled on your phone by the app. No push token is created and no reminder passes through our servers. To stop them, turn off notifications for Codoku in your iPhone's Settings app.
Where your data lives
Your account and everything above are stored in a Supabase project in the us-west-1 region of Amazon Web Services, Northern California. Sign-in e-mails are sent through Resend from hello@codoku.app. Apple and Google see only the sign-in exchange, as their own policies describe.
When you disconnect Apple, or delete an account that has Apple connected, the app asks you to sign
in with Apple once more and our server makes two calls to appleid.apple.com: one to exchange that
sign-in for a token, one to revoke it, which ends Codoku's access to your Apple ID. The token lives
only for those two calls and is not stored. Each call gives up after five seconds.
The release rehearsal that runs before each deploy reads a copy of the lesson content tables with a role that cannot read accounts, profiles, answers or any other table named under "What we store". The deploy itself runs with administrative access, as any update to the service must, and uses it to apply schema changes, load content, and create and reset one test account that belongs to us.
Sharing
We share your data with no one. There are no advertisers, no data brokers and no analytics vendors. The services above process data on our behalf to run the app and nothing else.
Your choices
- Change your display name or username, or connect and disconnect Apple and Google, under Profile, Account; disconnecting Apple makes the revocation call described above.
- Turn reminders off for Codoku in your iPhone's Settings app.
- Delete your account under Profile, Account, Delete account.
Deleting your account
Deletion starts the moment you confirm it and usually finishes in the same request.
- If you signed in with Apple, the app first asks Apple to revoke Codoku's access to your Apple ID.
- Your profile is marked for deletion and disappears from the app at once.
- Your username is held for 30 days so no one else can take it, then released.
- Your sign-in is deleted, and with it every row tied to your account.
If step 4 fails, the nightly job retries it from one hour later until it succeeds. Two things outlive deletion: the 30-day hold, which stores the username itself and nothing else, and, if the revocation request to Apple failed for any reason, whether Apple refused it or the call could not complete, one row holding only your account's internal id, kept so we know Apple's access may still stand. That row is never deleted and links to nothing else. You can also remove Codoku yourself under Sign in with Apple in your Apple ID settings.
An account that requests an e-mail code and never enters it holds only the e-mail address; the nightly job counts such accounts but does not yet delete them.
Children
Codoku is not directed at children under 13 and does not knowingly collect information from them.
Changes
When this policy changes, the date at the top changes and the app shows the new text on its next open of this page.