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 clickedwall_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 setdi_anon_idthe random anonymous analytics id— not setFound rot under our gradient? Flip us over. Or go run the test that matters: Mirror Test 14 is this site →