← Back to AI Learn World

Privacy policy

Effective 2026-10-20

This is a learning tracker. It records what you're studying, how long you spend, and the notes you write — that's what it's for. This page explains what we collect, why, where it lives, and how you can take all of it back or delete it.

Who we are

This service is built and run by Michael Chen, an individual, who is the data controller under the GDPR and Taiwan's Personal Data Protection Act. Contact: [email protected].

What we collect

  • Your account: email address, display name, your profile photo, and the account identifier Google gives us. These come from the Google account you choose to sign in with — we have no passwords and have never collected any. The profile photo is stored as the link Google gives us, and is shown by loading it from Google (see below).
  • What you put in: nodes and groups on your board, learning materials and their URLs, learning units, notes and "blockers", bookmarks, projects (including any repository URL you enter), and which recommended sources you've hidden from a Skill's Follow list. Notes and blockers are free text — we store whatever you write.
  • Your learning activity: every time you update progress, check off a unit, write a note, start and stop the timer, or log time spent reading a source you follow, we record a timestamped event (for reading, also which Skill and which source). This means your activity can be reconstructed as "what you studied, on which day, at what time, for how long" — that's exactly how the analytics page is built.
  • Interview practice: if you connect your own AI (such as Claude or ChatGPT), we store which app you connected, when, and when it last used the connection. When your AI runs a mock interview, it sends back the questions it asked, your answers as it recorded them, its feedback, and the level it gave each answer. Once an interview is finished you can delete its transcript on the Interview page; the levels stay, so your practice history keeps working. Practice records have a storage limit per account (300 KB in total on the free plan); you'll see a reminder on the Interview page as it fills up, and deleting transcripts frees space.
  • Interview stations and titles: the mock interviews at each Interview station are run by your own connected AI. For every question it sends back an assessment (a score, which key points your answer covered, and any failure codes), together with the transcript of that question. We store these with the session, and they count toward the practice-record storage limit above. Once an interview is finished you can delete its transcript; the assessments stay, and so do your titles. An interview you leave unfinished is kept if you have already answered a question, and is marked incomplete once its day ends. We also record the titles and ranks you reach (worked out from your practice, with the date and a snapshot of what they were based on), the routes you choose, and your main career.
  • Challenge and review answers: each round you start on the Challenge page or in a review records its topic and tier, which questions it showed you, and when it started and finished. Your browser checks each answer, and for each question we store when you answered it, whether you got it right, whether you used a hint, how long you took (time with the tab in the background isn't counted, and anything over 30 minutes is cut to 30), and the predicted chance that you'd get it right. What you answered is stored only when the answer is wrong, up to 1 KB; correct answers aren't stored, since the question already has them. Rounds you leave unfinished are kept too once you've answered at least one question, because reviews are scheduled from every answer; a round with no answers is deleted after a day. Which tiers you've passed or made solid, your medals, and when each question is next due for review are all worked out from these answers rather than stored separately.
  • Question difficulty and your ability estimate: for each topic we keep an ability estimate, updated the first time you answer each question, and use it to pick new questions at the right difficulty for you. Each question's difficulty is estimated from everyone's first answers combined; that number belongs to the question, isn't linked to you, and stays when you delete your account.
  • Question reports: if you use “Report a problem with this question”, we store which kind of problem you picked, the note you wrote (if any, up to 500 characters), your answer at that moment (if you had one, up to 1 KB), and your interface language. We read reports to fix questions, and the screen we read them on doesn't show who sent them.
  • Academy lessons: while you read a lesson, we record your reading progress — which sections you reach, how long you spend on each, and whether your answers were right or wrong (in the “Try it” exercises, the prerequisite check, and the end-of-lesson practice) — and we use it only to improve the lessons. We also save where you stopped and the state of the lesson's figures so you can pick up where you left off, and your mastery level for each lesson. “Start this lesson over” deletes the saved state; the reading record and mastery level stay.
  • Project missions: when you submit a file to a mission, the server scores it and then discards it. We don't store the file itself — only the score, whether you passed, the time, and a SHA-256 fingerprint of the file (used to spot the same file submitted by different accounts). We also keep a counter of how many times you submitted to each mission each day, to enforce the daily limit. When you clear your learning record, today's counter stays (so clearing can't reset your daily limit) and the counters for earlier days are deleted. If you write a reflection (what you did and why), we store it, along with whether you chose to make it public. Public reflections are shown to other people who have passed the same mission, next to your League name (the generated nickname, or your account display name if you turned on “Use my display name in the league”) and the repository link you gave. Your works are the GitHub repository links you add, with a name and one line for projects you create yourself, and the result of the last README check. Your submissions and private reflections are not visible to anyone else.
  • Weekly League: the first time you earn League XP, we add you to the weekly League automatically, unless you opted out before that. You get a generated nickname and an avatar color, and we count the League XP you earn each week from your learning (lessons, interview practice, mission submissions and reflections, timer time, and a small daily bonus for your first activity of the day). Groups of up to 30 are made of people in the same tier (Bronze League to Diamond League), and your tier moves up or down with your weekly rank. Others in your group can see only your League name, avatar color, this week's League XP, your rank, and your tier (everyone in a group shares the same tier). By default your League name is the generated nickname, so others never see your real name, photo, or GitHub account. If you turn on “Use my display name in the league” in Settings, people in your group see your account display name instead. If you turn it off, you get a new nickname, but people in your group this week may still recognize you from your League XP and rank. Your photo, email, and GitHub account are never shown. We also keep your tier, weekly results and medals, and any record that you were disqualified from the standings. You can leave the League in Settings at any time; leaving hides you from the standings but keeps your entries and results.
  • Time zone, streak, and daily limit: your browser sends its time zone (for example “Asia/Taipei”) when you open Challenge, so that “a day” means your own calendar day — for solid tiers, reviews, your streak, and the daily limit. Challenge and review answers count toward your streak. To stop abuse, each account can save up to 1,000 answers a day.
  • Timer state: while a timer is running, your browser checks in once a minute so your hours stay accurate across devices and closed tabs. That also means we know you're active during that period.
  • Sign-in device: each sign-in records the User-Agent string your browser sends (your operating system and browser version, roughly), used to tell your sessions apart.
  • Page-load timings: while you're signed in, your browser reports how long pages took to load and respond (the standard "Core Web Vitals" numbers), which page it was (never the full address), and — from our network provider — your country. These carry no identity: no account, no IP address, nothing that links them back to you. We use them to find out whether the site is slow in your part of the world.
  • Preferences: interface language, items per page, and various display toggles. (Your light/dark theme, color palette, button style, font, and sidebar state stay in your browser and are never sent to the server.)

What we don't do

Every item below can be verified in the source code:

  • We don't record your IP address in our logs. Our own server never writes it down, and there are no HTTP access logs. To stop abuse, the server does count requests per IP address in memory only (rate limiting); that count is never saved and is dropped after a few minutes of inactivity. (Providers that carry the connection — see below — necessarily see it.)
  • No advertising and no advertising profiles. No Google Analytics, no ad pixels. We measure how fast the site is — load times, with no identity attached — and we keep the records described below, used to find bugs and to decide what to recommend. None of it is used for ads, sold, or shared.
  • No tracking cookies. There's one strictly necessary cookie that keeps you signed in — see below.
  • We don't sell, rent, or trade your data, and we don't use it for advertising.
  • No third-party fonts. We serve our own font files, so opening a page doesn't hand your IP address to a font provider.
  • Our logs never contain your name, email, or IP address. When a request fails or is unusually slow, we log which kind of request it was, what went wrong, and your account ID (a random identifier) — so a bug you ran into can be traced and fixed. We also log the moments where the app gets in your way — an action it refused, a search that found nothing, leaving with unsaved changes, confirming or cancelling a deletion on your learning map — plus one record per day that you opened the app. These carry your account ID, the page, your language, whether your screen is narrow, and only the family of your browser and operating system (for example “Safari on iOS”), never the full browser string. Search words are kept (the first 60 characters) because they show what you wanted to learn but couldn't find. On the Explore page we also record which rows came into view, which cards you opened, and which official links you followed; and for your queue, what you added to it, removed from it, or placed on your board — so we can tell which recommendations are useful. The browsing records carry the same account ID and page details as above, plus which catalog item it was and which row it was in; the queue records carry your account ID, which catalog item it was, and, when placed, the random IDs of the items it created on your board. None of them contain anything you typed. All of these logs are deleted after 30 days.

Why we're allowed to process this (legal basis)

  • Performance of a contract: your account, your content, your learning record, and your preferences are what the service is — without them there's nothing to show you.
  • Legitimate interests: the sign-in device string and the strictly necessary cookie, used to keep you signed in and your account secure; the anonymous page-load timings, used to keep the site fast; and the records described above, used to find and fix bugs and to decide which courses to recommend.

We don't rely on consent for any of this — it isn't an optional extra, it's the service itself. That's also why there's nothing here for you to consent to.

Who else touches your data

We use these providers to run the service. They process data on our instructions:

  • Google (Firebase Authentication): handles sign-in. You sign in through Google's own window, so Google knows you signed in here. All we receive is your email address, display name, and profile photo.
  • Google (profile photo): your avatar is loaded straight from Google's image servers (googleusercontent.com) by your browser. This means Google sees your IP address whenever your avatar is shown. If you'd rather it didn't, sign in with an account that has no photo — we then show your initial instead, and nothing is loaded from Google.
  • Supabase: database hosting. This is where your data actually lives.
  • Cloudflare: the entry point for traffic, and the encryption in front of it. Cloudflare necessarily sees your IP address, even though this service doesn't record it. We also use Cloudflare Web Analytics, which measures page-load speed and visits by country without cookies and without building a profile of you.
  • Google Cloud: the machine this service runs on, and where our server logs are stored (Google Cloud Logging).
  • Sentry: crash diagnostics for the app's interface. When something breaks in your browser, Sentry receives the technical details we need to fix it — the error type, the stack trace, the page, and your browser version. No identity is attached (we never send who you are), and it's configured not to store your IP address. Like Cloudflare, Sentry's servers necessarily see the connection, but they're set not to keep it. If your device is set to an Asian time zone, Sentry also receives a timeline of how each page loaded — which requests it made (addresses only, with anything after "?" removed) and how long each took — so we can tell where the delay was. Same rules: no identity, no IP stored. This data is held in the United States.
  • Google Forms (Academy beta feedback): the beta feedback form for a lesson is hosted on Google Forms, so opening it leaves this site and what you write there goes to Google under its own privacy policy. The form is prefilled with a random feedback code that lets us match your answers to your reading record here. No name or email is sent, and neither is your reading record; the matching happens only on our side.

The AI you connect is not one of our providers. You choose it and you have your own account with it. During a mock interview, everything you say goes to that AI company under its own privacy policy. We give it only the interview questions and their scoring notes, and it can only save practice results — it can't read your board, notes, blockers, or study time.

There are four outbound requests that only you can trigger: importing a YouTube playlist, importing a course page you paste in, connecting an AI app that publishes its details at a web address (Claude and ChatGPT do), and checking the README of a public GitHub repository you linked to a project mission. Our server fetches that URL, not your browser — the other site sees us, not you. For an AI app, the page we fetch only tells us its name and where it may send you back after you approve. For the README check we call GitHub's public API without signing in, so it sees only the repository name; private repositories can't be checked.

Where your data lives

Our server and database are both in the United States. If you use this service from the European Economic Area, the UK, or elsewhere, your data is transferred to and processed in the US. Firebase, which handles sign-in, is likewise operated by Google in the US.

We're in the US because the free compute tier we run on is only offered there, and putting the database on another continent would make every query cross an ocean — noticeably slower, without changing the fact that the code itself runs in the US.

Crash diagnostics go to Sentry, which likewise holds them in the United States.

How long we keep it

  • Your account and content: until you delete your account. We don't delete your data because you haven't signed in for a while — a learning record is meant to accumulate over years.
  • League data (nickname, the display-name setting, tier, weekly League XP, results, medals, and any disqualification record): kept until you delete your account. Clearing your learning record removes your weekly League XP, standings, results, and medals and puts you back in Bronze League, but keeps your League profile (nickname, the display-name setting, and a cutoff time, so older activity no longer counts) and any disqualification record; those are removed only when you delete your account. All of it is included in the data export.
  • Mission submissions, reflections, and works: kept until you delete your account, except that clearing your learning record removes your submissions and reflections (and the League XP they earned), but keeps today's daily submission counter (it only records how many times you submitted today, and clearing can't reset the daily limit); the counters for earlier days are deleted. Your works and their repository links stay until you delete them or your account. All of it is included in the data export.
  • Sessions (including the device string): cleared automatically after 30 days.
  • Page-load timings: deleted automatically after 30 days.
  • Server logs: deleted automatically after 30 days. They can't be deleted one person at a time, so after you delete your account, logs that mention your account ID may remain for up to 30 days. They're operational records, so they aren't part of the data export.
  • Backups: we back up the database daily and keep 14 days of them. So after you delete your account, your data may still exist in backups for up to 14 days before rotating out. That's so we can recover from a failure.

Your rights

  • Get all of your data: Settings has "Download all my data", which gives you a JSON file with your account, notes, learning record, bookmarks, projects, mission submissions, reflections and works, preferences, your whole board, the courses and paths you added to your queue from Explore, your interview practice (including station assessments), titles, interview preferences and connected AI apps, and your Challenge and review answers, question reports, ability estimates, and time zone. No request to write, nothing to wait for.
  • Correct it: your display name is editable in Settings, and your content is editable any time.
  • Delete it: Settings can delete your entire account. That removes everything listed above, along with the identity Google holds for this service. Deletion is permanent and there's no trash bin. To confirm it's really you, this asks you to sign in again.
  • Clear just the learning record: Settings also has "Clear learning record", which removes your hours and activity events, your mission submissions and reflections, and your weekly League XP, standing, results, and medals, but keeps your notes, progress, and board, and your mission works (your repository links). It does not remove your interview practice records: you can delete their transcripts one session at a time on the Interview page, and the rest (levels, assessments and results) is removed when you delete your account. Your titles and interview preferences stay too. Challenge and review answers stay too; they're removed only when you delete your account. Academy reading records stay too (reading events, saved lesson state, mastery levels, and feedback codes); they're removed when you delete your account. Your League profile (nickname and the display-name setting) and any League disqualification record stay too, and are removed when you delete your account.
  • If you think we're handling your data badly, email us. You also have the right to complain to the data protection authority where you live.

One honest caveat: if you ever edited the shared recommendation catalog as an admin, the audit record of those edits is kept, but the fields pointing at you are cleared — what remains can no longer be traced back to you.

Cookies and browser storage

We use one cookie: ailw_session, which remembers that you're signed in. It's HttpOnly (JavaScript can't read it), only sent over an encrypted connection, and ends when you close your browser — unless you choose "Keep me signed in", which keeps it for 30 days.

Your browser also keeps a few things in its own storage on this device:

  • Your settings: your light/dark theme, your color palette, button style, and font (including the Japanese font), whether the sidebar is collapsed, the interface language you picked, and whether the “All your learning” section on the analytics page is open. Your language is also saved to the server once you sign in, so you don't have to pick it again on another computer; the rest never leaves this device.
  • Challenge: which Challenge celebrations you've already seen, how many progress dots you've seen light up, and whether Skills has a new medal to show, kept separately for each account that signs in on this browser; and whether sound is on or off, which is one setting for this browser. This never leaves this device.
  • Your trial map: if you try the learning map before signing in, the map and the lessons you marked done are kept in this browser under ail.guest.v1. We don't receive it. When you sign in, it's copied into your account if your account has no map yet, then removed from this browser.
  • A copy of your pages: the last data shown on your learning map, courses, projects, and analytics pages, plus your materials and totals, so a page can appear right away while fresh data loads. It's a copy of what the server already has, and it's deleted when you sign out.
  • The daily-open record: the date this browser last sent the once-a-day “opened the app” record described above, so it's sent only once a day.
  • Sign-in: Firebase, which handles sign-in, keeps its own record of your sign-in in this browser until you sign out.
  • Academy lessons: normally a lesson saves where you stopped and the state of its figures to your account. If a lesson can't reach the site (for example, it doesn't hear back from it within a few seconds), it keeps them in this browser instead, under academy-pos- and academy-state- followed by the lesson's code, along with the lesson's own language and theme. “Start this lesson over” clears them. This never leaves this device.
  • Admins only: which sections of the catalog admin page are collapsed or expanded.

Because none of our cookies are for tracking or analytics, this site doesn't need a cookie consent banner.

If you're under 18

This part is written for younger users, so we'll keep it plain.

You can use this service if you're 13 or older. Plenty of people start teaching themselves to code online in their teens — this tool was built for exactly that.

Three things worth knowing:

  • What you write is only visible to you. There are no profiles, no followers, no comments, and nowhere that shows your notes or your learning map to anyone else. Unless you export a file and hand it to someone yourself, nobody sees it. The one exception is a project-mission reflection, which is private unless you choose to make it public.
  • We won't sell your data or use it for ads. There are no ads here at all, and nothing that follows you around other websites.
  • You can take everything with you, or delete all of it, whenever you want. Settings has one button to download all your data and another to permanently delete your account. You don't have to ask us or wait for approval.

If your parents want to know what this service does, this whole document is the answer — they're welcome to read it, or to email [email protected] and ask.

The legal note: our basis for processing your data is performance of a contract and legitimate interests, not consent, so GDPR Article 8 on children's consent doesn't apply here. We also don't do the marketing profiling or child-directed marketing that Recital 38 is concerned with. If we learn that someone under 13 has created an account, we delete the account and its data.

Changes to this document

When we change it, we update the effective date at the top. If a change materially affects your rights, we'll tell you the next time you sign in.


Terms of service →