This site's own Mirror Test — live

Radical Transparency

A site that teaches you to flip products over should survive being flipped. This page is the second dashboard — the whole engine, in plain English. If anything here ever stops being true, that's a bug report we want.

What we will never do

  • ✕ No streaks, no guilt loops, no re-engagement notifications. Progress persists; the site never nags.
  • ✕ No manufactured scarcity, no countdowns, no “only 3 badges left.”
  • ✕ No third-party ad trackers, no cookies for tracking, no fingerprinting.
  • ✕ No selling or sharing of anything you type. Worksheets never leave your browser.
  • ✕ No account requirement. The whole course works logged-out, forever.

Where your data lives

  • Your progress, worksheets, Canvas, teardowns: localStorage in your browser. We have no copy.
  • Your credential: a self-describing token in the badge URL you choose to share. Minting sends nothing to us.
  • The Wall (opt-in): handle + rank, in service memory (not yet a database — it can reset on redeploy).
  • GHOST conversations: sent to the Claude API to generate the reply; not stored by this site.
  • Analytics: PostHog (US cloud), cookieless, with a random anonymous id stored in your localStorage. Delete it below any time.

Every event this site can send

The complete list, enforced by a type in the source (lib/analytics.ts). There is nothing beyond what you see here.

$pageview which page was viewed (path only — never query strings)
module_complete a module was marked complete (which one)
mirror_pass / mirror_fail a Mirror Test attempt (which test, which attempt number)
calc_used a calculator was touched (which equation)
assignment_saved a field assignment was filed (which one, how many characters — not the text)
canvas_export the Canvas was exported (how many fields were filled — not their contents)
boss_won a boss fight was won (which boss)
weird_played the weird game finished (score)
teardown_created a teardown card was minted (which pattern — never the app name)
case_generated a cost-of-inaction brief was generated (no numbers)
oath_signed the Oath was signed (not the name)
portrait_shared a portrait card was downloaded (heal % + crack count)
badge_minted a credential was minted (rank + index)
linkedin_add_clicked the add-to-LinkedIn button was clicked
wall_joined a handle joined the wall (rank only)
ghost_asked GHOST was asked a question (never the question itself)

Why track at all? To find where the course loses people and fix it — the funnel, not the person. Block it with any content blocker; the site works identically.

Your localStorage, live

This is read directly from your browser right now — the actual bytes, not a description of them.

di_progress_v1your whole course record (progress, worksheets, canvas, teardowns)— not set
di_anon_idthe random anonymous analytics id— not set

Found rot under our gradient? Flip us over. Or go run the test that matters: Mirror Test 14 is this site →