Public release log

Every release, dated.

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.

Last updated 2026-07-03 · complete per-release record in RELEASES.md

v7.x — Launch + hardening

Active series · production hardening, analytics backend, affiliates, security. Condensed below — every individual release is dated in RELEASES.md.
v7.13.26–282026-06-16

Production-hardening trilogy

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.

v7.13.14–252026-06-02 → 06-03

Security round 2, affiliates live, analytics briefings

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.

v7.13.0–132026-05-26

Security + performance sweep

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.

v7.0–7.122026-05-08 → 05-25

The big 3D + UX line

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.

v6.x — Pro tier + commerce

Pro infrastructure, persona theming, native iOS shell
v6.122026-05-01

Fairness layer · public principles, About, hobbyist tier

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 MonoGeist Mono across all surfaces. Less aggressive slab terminals, pairs better with the Fraunces warmth.

v6.112026-05-01

Doc + content audit, generic defaults, legal stubs, accessibility pass

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.

v6.102026-04-30

Local repo rename: ThrowStudio → cinemap

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.

v6.92026-04-30

User-settable stand height

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.

v6.82026-04-30

Human-eye 3D FOV + bookshelf-on-stand support

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.

v6.72026-04-30

Persona-themed cinematic screen + Cine Map After Dark

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.

v6.62026-04-30

Cone-toggle covers 3D beam · view-tab INP fix

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.

v6.52026-04-30

Seat toolbar (Center + Arc) + cinematic camera cleanup

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).

v6.42026-04-30

Pro Preview fallback + Take Me There cinematic

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.

v6.0–v6.32026-04

Pro tier infrastructure, user-gear wizard, real PDF export, repo source-of-truth

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.x — Stability + craft

Foundational — geometry, persona quiz, cone toggles, share URLs

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.

Full release history with commit hashes and per-release detail lives in RELEASES.md on GitHub. This page is curated; the repo is the source of truth.