The full record of what's shipped, in order, with what changed and why. The repo's RELEASES.md is the source of truth — this page is the readable mirror.
FIX Stripe webhook idempotency reordered — a transient database blip during checkout can no longer lose a paying customer's license (Stripe's retry now genuinely re-processes).
FIX Data durability: corrupted local data is backed up before recovery instead of deleted; oversize data can no longer be overwritten by defaults; wall-art images are downscaled and excluded from scenario snapshots so auto-save can't silently die on browser quota.
FIX Share-link XSS closed at a single sanitize chokepoint; CSP no longer allows unsafe-eval; 3D view renders on-demand (stops idle GPU burn on mobile).
SHIP Daily analytics report always sends (a silent phone now means broken, not quiet); milestone alerts deduplicate properly.
SHIP Affiliate links across 27 markets with per-retailer buy buttons; Amazon UK tag live; in-app affiliate panel + setup tooling.
SHIP Traction briefings: daily digest + hourly spike alerts (push + email), referral attribution, affiliate-click breakdown.
FIX XSS hardening round 2 (custom gear + scenario names), SRI hashes on CDN scripts, share-link hardening with hash-fallback for detailed builds.
FIX Stored XSS via share/embed links killed; CSP enforced (was report-only).
FIX THX/SMPTE screen-size double-aspect inflation corrected.
SHIP Perf: persistent WebGL renderer + texture cache, render-scoped compute() memo (3-4× → 1× per frame). Gear-card provenance chips (verified/source). Human-voice pass on all public pages.
SHIP Scene-graph 3D renderer, seated first-person view with "take me there" cinematic, dispersion cones, wall art, animated screen rise/fall, solid couches with contact shadows, unified verdict alert box, one-tap fixes, left-rail reorganization.
Dozens of releases — the complete dated record lives in RELEASES.md.
SHIP Public principles page with 10 hard commitments (no commission-ranked gear, no dark patterns, no data sale, plain pricing, public scoreboard) — written so you'd notice if we broke them.
SHIP About page with the founder story (Austin, two filmmakers, why this exists). Real name, real email, real reachable.
SHIP Public changelog page (this one) — every release dated and described, mirrored from the repo's RELEASES.md.
SHIP Hobbyist tier €4/mo — non-commercial alternative to Pro for enthusiasts. Retired in v6.23: everything it offered (solver, theater seating, 9.2.6 layouts) moved into the free tier instead. Correction kept here per principle #10 — we don't silently rewrite history.
SHIP Free tier expanded: up to 7.2.4 Atmos layouts (was 5.2.4), unlimited local scenarios (the prior "save 1" cap was promised on the landing but never enforced — the landing now matches reality).
SHIP Typography: swapped JetBrains Mono → Geist Mono across all surfaces. Less aggressive slab terminals, pairs better with the Fraunces warmth.
SHIP Generic starter defaults — new visitors no longer land on Jared's personal BHK-212 cinema. Plain 6000×3500×2700 mm room, 5.1.2 layout, no gear pre-selected.
SHIP Legal stub pages live: /privacy, /terms, /refund, /affiliate-disclosure. Branded, honest about being placeholders. Unblocks the App Store privacy-policy URL requirement.
SHIP README.md rewrite, CLAUDE.md sync, api/README.md — all internal docs caught up to v6.10 reality.
FIX SNAPSHOT_KEYS completeness: cabinet_id, room_rotated, side_zoom, plan_zoom, side_pan, plan_pan were silently absent; saved scenarios now restore zoom + pan + cabinet selection.
FIX Autosave-on-unload: pagehide + beforeunload listeners flush the 3-second debounce so quick tab-closes don't silently drop edits.
FIX SVG accessibility: #svg_side and #svg_plan got role="img" + descriptive aria-label.
Renamed working directory from Code/ThrowStudio/ to Code/cinemap/ so the filesystem matches the GitHub repo + brand canon. git worktree repair against each Claude worktree fixed gitdir pointers.
SHIP L/R stand height is now adjustable. Speaker Placement modal's Mount column shows an inline mm input — type your real stand height and the 3D scene matches. Auto-default puts the tweeter at ear height.
FIX Distortion-free 3D camera. Replaced the default 50° vertical FOV (which barrel-distorted at room edges) with a calibrated pipeline: 35° vertical for overview (~50 mm full-frame lens), and seat FOV computed from actual screen geometry so the screen subtends ~55% of the vertical view — meaning the screen looks the same angular size in the render as it would to your real eyes from the listening position.
SHIP Bookshelves used as L/R no longer sit on the floor. Auto-detected: any L/R speaker shorter than 750 mm gets put on a stand sized so the tweeter lands at ear height.
SHIP "Take Me There" now shows a different now-playing image on the projection screen for each of the 8 personas (Measurementalist gets a frozen REW chart, Vibe Engineer gets a zen garden, Black-Level Monk gets pure black with a single pinhole star, etc.).
SHIP "After Dark" pill in topbar flips the entire app to a dark cinema-room theme. Persists in state.theme, travels in share URLs.
FIX "Cones" layer toggle now also gates the projector beam pyramid + eye-to-screen sightlines in 3D (previously only side+plan). Behavior is consistent across all four views.
PERF View-tab clicks (Split / Side / Plan / 3D) no longer block paint with a synchronous Three.js rebuild. INP dropped from ~880ms to <50ms on click.
SHIP Floating toolbar in 3D pane after Take Me There: ● Center snaps gaze back to the screen center over 600 ms; ↻ Arc runs a slow ±30° head-turn auto-pan over 6 seconds (forward → right → forward → left → forward).
SHIP When Stripe isn't configured, clicking any plan tier activates that tier locally with a PREVIEW-* license. Full Pro features immediately; once Stripe lands, the same button starts real checkout.
SHIP "Take Me There" animates camera from orbit → seated at MLP over 1.8s, then projector "warms up" with screen-emissive flicker, then speakers do an L→C→R→surrounds→heights→sub sound-check bounce.
SHIP End-to-end Pro tier scaffolding: license model, 5 Vercel serverless endpoints (/api/checkout, /api/license, /api/portal, /api/webhook, /api/spec-fetch), upgrade modal, feature-tier map. Every endpoint 503-graceful when Stripe env vars missing.
SHIP User-submitted gear via paste-URL spec-fetch wizard (Claude reads the manufacturer page, returns structured specs).
SHIP Real PDF export (replacing browser print dialog). LiDAR + visionOS roadmap detail in docs/ios-roadmap.md.
SHIP Repo-side source of truth: RELEASES.md + BACKLOG.md.
v5 was the consolidation phase: the geometry engine took its current form, the persona quiz shipped, dispersion cones became a first-class layer, share URLs went hash-encoded, the print sheet expanded to 6 pages. Detail in the repo's RELEASES.md.