Skip to main content
CodeFlow

Last updated · May 8, 2026

Cookies & Storage Policy

CodeFlow doesn't set cookies. The site does keep a small amount of state in your browser's localStorage so your work survives a reload. Here's every entry, why it exists, and how to clear it.

1 · Cookies versus localStorage

A cookie is a small piece of data your browser sends back to the server on every request to that site. Servers use cookies for sessions, login, and advertising tracking.

localStorage is similar in that it lives in your browser, but it is never sent to a server with a request. The CodeFlow site can read its own keys in your browser; nobody else can. We use only localStorage.

Why this matters: under the EU ePrivacy Directive (the “Cookie Law”) and South Africa's POPIA, “strictly necessary” storage required for a feature you asked for does not require consent. The entries listed below are essential to the features that create them, so we rely on legitimate interests (GDPR Art. 6(1)(f)) without a consent prompt.

2 · What we store, key by key

Every entry is created the first time you use the relevant feature.

codeflow:progress:v1

Tracks which lessons you've completed and the last act you were on (so we can show a “you left off here” cue). JSON object — small.

Created by: src/hooks/useProgress.ts. Reads: any concept page. Lifetime: until you clear browser storage.

codeflow:focus-mode

Whether you've toggled focus mode on. A single boolean.

Created by: src/lib/focus-mode.tsx (FocusModeProvider). Reads: every page. Lifetime: until you clear browser storage.

codeflow:playground:v1

The source code you've typed into the Playground, per language tab. Stored so reloading /play doesn't lose your work. JSON object.

Created by: src/lib/playground/use-playground-state.ts. Reads: only /play. Lifetime: until you clear browser storage.

codeflow:library:clicks:v1

A rolling tally of the last 200 outbound book-link clicks you made on /library — book slug, store, timestamp. Stored locally so we can see which recommendations are useful; we do not transmit this anywhere.

Created by: src/components/library/BookCard.tsx (trackClick handler). Reads: nothing reads it automatically — it's available for you to inspect via localStorage.getItem('codeflow:library:clicks:v1'). Lifetime: until you clear browser storage.

codeflow:library:disclosure-ack

Whether you've dismissed the per-page affiliate disclosure that previously sat on /library. Legacy — the site-wide notice banner now covers this; the key is harmless if present and ignored if absent.

Created by: src/components/library/AffiliateDisclosure.tsx (component currently unused). Lifetime: until you clear browser storage.

codeflow:data-notice-ack

The version of the privacy/terms notice you last acknowledged via the “Got it” button on the site-wide banner. A small integer string. When we update the policy materially, we bump the version number and you'll see the banner again, marked “Updated”.

Created by: src/components/legal/DataNoticeBanner.tsx. Reads: the same component on every page (banner suppressed on /privacy, /terms, /cookies). Lifetime: until you clear browser storage.

Total: six named entries. None of them are cookies; none of them are sent to our servers; none of them include personally identifying information beyond what you typed yourself (e.g. into the Playground).

3 · Third-party storage by page

When you open certain pages, third-party services we embed may set their own cookies or storage on your browser. We are not in control of those, but they only load when you visit the relevant page.

When you visit …… you may receive storage fromTheir policy
/play (any tab)CodeSandbox / Sandpack iframecodesandbox.io/legal/privacy
/play Python tabjsDelivr CDN (Pyodide)jsdelivr.com/privacy-policy
/libraryOpen Library / Internet Archive (book covers)archive.org/terms
After clicking “Buy on …” on /libraryAmazon or Manning (you leave our site)Amazon · Manning
Any pageVercel (hosting, sees your IP for routing)vercel.com/legal/privacy-policy

We do not use Google Analytics, Facebook Pixel, or any behavioural-tracking script. Fonts are self-hosted via next/font, so the site does not contact fonts.googleapis.com at runtime.

4 · How to manage or clear

You can clear everything in this list whenever you want. The data lives in your browser, not on our servers, so clearing it from your side is the complete operation.

The fastest way:

  • Browser settings — open your browser's privacy/cookies settings and choose “Clear site data” (or the equivalent) for the CodeFlow domain.
  • DevTools — open Developer Tools, go to the “Application” tab (Chrome / Edge) or “Storage” tab (Firefox / Safari), expand Local Storage, find the CodeFlow origin, and delete any of the keys listed in §2.
  • Incognito / Private window — opens with no stored data and discards everything when you close the window.

You can also block all storage globally in most browsers, but that will break parts of CodeFlow (your progress and Playground source won't survive a reload).

5 · Questions

Questions about anything on this page: anointtech@gmail.com

See also the Privacy Policy and Terms of Service.