20 KiB
Path to 9 — premium feel, power usability, habit formation
The definitive analysis (2026-07-07, v3 FINAL) · goal: 5 persona judges ≥ 9/10 · founder framing: "premium UX + power feeling → addiction"
PATH-2 panel: 5/5 ENDORSED (predicted-if-executed 8.7–9.0). v3 integrates their 7 endorsement conditions. This is the agreed, executable path.
0. Standing and method
Evidence base: 7 video-judged rounds (R13–R19), 209 recorded fixes (88 HIGH), 10 shipped
waves (P–X, merged to main 8ee7ac82), plus the 2026-05-28 addictiveness audit
(Hook-Model rubric, 7 iterations, 5.0 → 7.7). Scores: video regime avg 7.08 → 7.70
(Fable ruler), min pinned at 7.5 for three rounds. Two measured plateaus prove the
polish-wave engine is exhausted: per-round EV ≈ +0.02, and every remaining HIGH ask is
either structural or systemic — not surgical.
The panel's own definition of the gap (R19, 5/5 unanimous, verbatim): "The product has the VISUAL craft of a 9 … but the MOTION identity of a ~7. Gap to 9 is not more features or more surfaces — it's a genuine motion system." Secondary unanimous asks: a shown, signature streaming moment; killing the boot interstitial; a systemic AA floor.
What a 9 means per lens (extracted from all 7 rounds' verdicts):
| Judge | Their 9 requires | Their current ceiling-setter |
|---|---|---|
| design-director | spatial continuity, spring physics, choreographed transitions, multi-tier hover | "surfaces cut/fade instead of transforming" |
| knowledge-worker | instant feel (no boot tax, no staged arrival), interactions that telegraph | "make it feel instant"; boot + skeleton dwell on every route |
| competitor-critic | streaming rhythm at Claude/ChatGPT level + a motion language they lack | "the exact axis the video regime exposes: pure motion signature" |
| a11y-theme-parity | systemic AA tertiary tier + keyboard-first hover-reveals + hit areas | "systemic dim secondary text… weighs heaviest" (THE min-score gate) |
| brand-resonance | the hive alive on WORKING surfaces: honey responds to touch, streaming heartbeat, ambient life | "the brand goes quiet on the working surfaces" |
1. Why the founder's "addiction" framing and the judges' "motion system" converge
The Hook Model (trigger → action → variable reward → investment) says habit forms when each loop is felt. The judged deficits map directly onto the loop's felt moments:
- Action feel = the power feeling. Instant boot, sub-100ms responses to the cursor, keyboard-first paths — Fogg's "ability" term. Today's boot tax + single-tier hovers make every loop pay a toll; a power user's loop must feel FREE.
- Variable reward = the visible aliveness. Streaming heartbeat, surprise-recall ("I REMEMBER" cards), honey blooming under the cursor — the dopamine surface. Judges keep scoring exactly these as the missing "signature moments."
- Investment made visible = memory counters, growth, compounding identity — the product already OWNS this (Memory Trust 8.2, "category-defining"); it needs the loop to celebrate accrual (count-ups, growth deltas in the briefing) rather than list it.
- Triggers are mostly outside the judged surface (digests, notifications) — real for retention, invisible to this panel. They ride the roadmap but not the score.
So: the same three workstreams that raise the judged score to 9 are the ones that manufacture the addiction loop. There is no tension between the founder ask and the panel's path.
2. The path — four pillars + a phase-0 vocabulary, sequenced
PHASE 0 · THE MOTION VOCABULARY (prerequisite; ships FIRST with Pillar 4) — [PATH-1: design blocking #2]
Before ANY new motion ships (including Pillar 3's aliveness moments):
- One spring FAMILY, not one config — 2–3 named variants (
micro/standard/expressive) sharing a single physical character, tuned once, exported as motion tokens. Kills the mixed CSS-ease/duration zoo. [design non-blocking, adopted] - A motion-spec reference page — an internal demo surface where every tier (spring family, hover tiers, settle gesture, route transitions, reduced-motion mappings) is demonstrable and reviewable. The arc's single source of motion truth. [design gap]
- Reduced-motion mapping defined for EVERY tier (not just ambient): route transitions degrade to crossfade; hover keeps color/shadow, drops translate; settle gesture → instant state + color pulse; streaming caret → static cursor; count-ups → instant set. [design gap + a11y]
- Interruptibility + input-primacy as ACCEPTANCE CRITERIA [design blocking #1]: every transition is interruptible and redirectable mid-flight; navigation and input NEVER wait on an exit animation or transition completion. The motion system must never fight the instant-feel pillar — this is a per-PR checklist item, not an aspiration.
- Exit choreography in the same vocabulary: AnimatePresence exit definitions for cards, menus, modals, and route surfaces. [design non-blocking, adopted]
- RETROFIT of already-shipped motion [PATH-2 design]: inventory every prior motion pass (Wave T/U hover tiers, Wave V lift+bloom + theme crossfade, Wave W entrance stagger, onboarding/streaming breathing) on the motion-spec page, then migrate each onto the Phase-0 tokens and spring family. Acceptance: ZERO non-token durations/easings on judged surfaces — one motion dialect, not two.
- Signature-moment frequency/intensity taxonomy [brand blocking #2 + design/kw
non-blocking — 3 judges independently]:
- FULL settle (300–400ms): rare accrual milestones ONLY — memory saved (first per session), install success, agent spawned.
- MICRO variant (≤150ms, same gesture DNA): high-frequency actions — send-arm, selection.
- Per-session cooldowns on full-amplitude moments; routine actions never flourish.
Pillar 1 · THE MOTION SYSTEM (structural; the unanimous #1; est. +0.6–0.9 panel-wide)
A dedicated engineering arc, NOT lanes. Builds ON the Phase-0 vocabulary.
- Spatial continuity — a base tier everywhere + two heroes [PATH-2 design]:
(a) DEFAULT tier: a low-risk fade-through crossfade with persistent chrome
(150–200ms, Phase-0
standardspring) on ALL top-level sidebar route changes, feature-flagged, subject to the Phase-0.4 interruptibility criteria — the Settings↔Home pair is the template, not a one-off. Two morphs + five hard cuts would read as three set pieces, not a system. (b) HERO morphs (the only shared-element cases): card→workspace-open (the card grows into the surface) and Trust↔Memories tab morph. Implementation: framer-motionlayoutId+AnimatePresence mode="popLayout"scoped to these two (NOT a global router rewrite — that's the regression trap). Focus + assistive-tech spec ships INSIDE the transition component [a11y blocking #1]: on every shared-element route change, focus moves to the destination surface's primary heading/main landmark; exiting AnimatePresence trees are setinert/aria-hiddenfor their exit duration (focus and the SR virtual cursor can never land in them); route changes are announced (document.title update + a polite live region). - Multi-tier hover — "honey responds to touch": rest → hover (120–160ms: lift
2-4px + shadow + honey border-warm + glow bloom) → press (scale .98) →
focus-visible (same tier, keyboard). ONE implementation (a
hive-interactivevariant), adopted by cards, rows, chips, tiles. Can ship early (additive). - The signature gesture — commissioned as a DESIGNED MOTION ASSET [brand blocking #1]: a recognizably waggle-derived micro-choreography (brief directional waggle-run → settle, from the bee's actual figure-eight dance), prototyped and judged STANDALONE on exactly one moment (memory saved) BEFORE any propagation. Only after the panel scores the prototype does it roll out per the Phase-0 frequency taxonomy. Highest-upside, highest-kitsch-risk line in the path — treated accordingly.
- Ambient hive life: the breathing glow (already shipped on onboarding, judged "the one unambiguously signature motion") recurs as idle ambient on Home hex-glow and empty states. Amplitude discipline: ambient means BELOW attention threshold.
- Light-theme variants for every glow/bloom signature [brand]: deeper honey, tighter radius on ivory — the signatures must not vanish (or smear) in light. Kit v6 captures each signature moment in BOTH themes.
- P1/P2 seam: cache-first warm paint lands with one subtle designed micro-settle rather than a raw instant pop. [design non-blocking, adopted]
Pillar 2 · THE INSTANT POWER FEEL (perceived performance; est. +0.3–0.5, biggest for kw/competitor)
- Kill the returning-user boot tax: warm sessions land on content <1s (brand flash ≤500ms). Cache-first paint: the Home payload cache is disk-persisted and renders BEFORE the sidecar answers — the day-30 morning desktop launch is the moment that matters, not just SPA revisits. [kw gap, adopted]
- The input-during-warmup CONTRACT [PATH-2 kw]: cache-first paint must be INTERACTIVE, not just visible — (a) the composer accepts typing at paint; queued sends dispatch when the sidecar is ready (never error, never silently drop); (b) first click on any cached card either acts or shows a truthful per-element pending state — never a dead click. The §3 hard gate measures time-to-first- INTERACTION, not just time-to-content, and kit v6 records a cold-start variant (sidecar down → app start → cached paint → first send).
- The silent-refresh reconciliation CONTRACT [kw blocking]: when fresh data lands over a cache-first paint — (a) NO above-the-fold layout shift; (b) material deltas animate in via the Pillar 3.3 delta pulse instead of silently replacing content; (c) the briefing modal (reserved for ≥7-day absences — N=7, decided) renders from the SAME data source/component as the home hero cards, killing the number-drift bug class permanently. Wrong-then-corrected is worse than slow; the contract is a test, not a guideline.
- Collapse the double catch-up: the "I REMEMBER" cards land INSIDE the home hero as the first staggered entrance; the modal fires only on ≥7-day absences (same component, same data — see 2.2).
- The send-path budget [kw gap, adopted]: the single most repeated daily action (send → first token) gets an explicit instant contract — optimistic user-bubble echo, composer never locks on send, first-token latency never increased by any visual layer.
- Route-cache everything judged: chat thread, marketplace, agents join memory/ workspaces — tab returns instant, no re-skeleton. Marketplace's first-match wait keeps its purpose-built skeletons (banked residual, R17). [kw]
- Keyboard-power layer: focus-visible parity on every hover-reveal (kebab +
memory rows remain), ~40px hit areas, a ≤2-keystroke path from anywhere to
new-chat / last-workspace, and a discoverable shortcut cheat sheet (
?/ Cmd-/). [kw non-blocking, adopted] Double yield: this is also the a11y judge's #2 ask.
Pillar 3 · THE ALIVENESS LOOP (variable reward made visible; est. +0.3–0.5, brand/competitor)
- Streaming as a PIPELINE deliverable, then a visual one [competitor blocking #1]: first resolve the dev echo-provider's whole-block behavior — emit true token/chunk streaming in the judged environment, or add a render-side cadence buffer that smooths chunks into a steady visible rhythm with ZERO added latency to first token. Acceptance: recorded s04 shows continuous sub-line accretion — no multi-second block pops, no layout jank as markdown forms. THEN the branded layer: the streaming text caret — a honey glow trailing the accreting text head (this is what "bee-trail cursor" means; it is NEVER a pointer-following trail [brand blocking #3]) + a subtle thinking pulse on the bee avatar during tool-trace. Reduced-motion: static caret, no pulse. The caret never occludes text or targets. [a11y] Streaming INTERACTION contract [PATH-2 competitor]: auto-follow scroll breaks INSTANTLY on user scroll (input-primacy applied to the stream) with a "jump to latest" affordance; a visible stop control halts output immediately; the recorded s04 acceptance prompt forces hard-case progressive rendering (a code block + a list/table) — markdown formation tested where Claude's streaming craft is strongest.
- Surprise-recall as a first-class moment: when Auto Recall lands mid-chat, the memory chip blooms honey for ~600ms ("reward of the hunt", rubric dim 6 — the product's unique dopamine no competitor can copy).
- Investment celebration with an HONESTY GATE [brand non-blocking, adopted]: count-ups and "+" delta pulses bind to the exact source-of-truth number — the settled value is never floored, clamped, or estimated (regression-tested); animation intermediates must never contradict a visible sub-stat (the Wave X lesson, generalized). Briefing states what ACCRUED since last visit ("12 new memories · 2 decisions"). Accessible treatment: one polite live announcement of the settled number, never intermediate frames. [a11y]
- First-60s wow (rubric dim 3): wire the first chat message to demonstrably use the just-typed profile ("As a consultant, you'll want…") — the "it already knows me" hook.
Pillar 4 · THE AA FLOOR (systemic; unblocks the min-score judge; est. min 7.5→8+)
- Token-level tier: define a
--text-tertiarytier that is AA on EVERY surface token (bg/bg-2/surface/surface-2) in BOTH themes; migrate the ~dozen recurring offender families (top utility bar, timestamps, card meta, onboarding subtitle/ footnote, unselected chips). - Close the GENERATION vector, not just today's instances [a11y blocking #2]: (a) a lint/CI guard banning new non-token text colors (raw hex, palette classes, arbitrary values) on app surfaces; (b) contrast verification that models COMPOSITION — opacity-modified text and text over wallpaper/gradient/wash measured against effective background (a runtime axe-style pass on the judged surfaces). Token-pair math alone buys one clean round; this buys a floor.
- The AFFORDANCE floor [PATH-2 a11y]: non-text contrast (WCAG 1.4.11, ≥3:1
against adjacent effective background, both themes) for focus indicators,
input/chip borders, and state glyphs — a
--focus-ring/border tier alongside--text-tertiary, asserted in the same CI runtime pass. Explicit acceptance: Pillar 1.2's focus-visible tier passes 3:1 in LIGHT (honey-on-ivory), MEASURED. - Hit-area and focus-visible items fold into Pillar 2.7 (double-yield, one implementation).
3. Sequencing, risk, verification
Order: Phase-0 + Pillar 4 (parallel, both token-level, zero-regression) → Pillar 2 → Pillar 3 → Pillar 1 — with Pillar 1.2 (hover grammar) allowed early as additive. Amended from v1: the motion vocabulary now PRECEDES all aliveness work. [design blocking #2]
Competitive teardown at arc start [competitor non-blocking, adopted]: record the equivalent journeys on current Claude and ChatGPT (spot-check Hermes/Odyssey); extract concrete numeric targets — warm time-to-content, visible token rhythm, transition/hover timings. "At Claude/ChatGPT level" becomes measured, not remembered.
Risks: route transitions carry regression risk (scoped routes, feature-flag, the Phase-0.4 interruptibility criteria, the P1.1 focus/AT spec); streaming choreography must never delay tokens (P2.4 budget); ambient motion must never read as busy (brand: "respectful, no gratuitous movement" is currently a WIN — don't lose it).
Verification — kit v6 [design blocking #3 + competitor blocking #2 + a11y blocking #3]:
- Judges pinned
model:'fable'(ruler stability; the R19 lesson). - Per-journey sampling matched to the deliverable, disclosed in the judge brief: transition/signature/streaming journeys delivered as ≥12fps micro-filmstrips or short native-framerate clips (spring character, token cadence, and settle choreography are invisible at 2–4fps — the arc's history proves measurement failures eat rounds); 2fps contact sheets remain for static-composition journeys.
- A keyboard-only journey, recorded and judged like the mouse journeys: tab-through home → open workspace → chat send → message actions via focus → memory row actions → settings, visible focus indicators expected in every frame.
- Warm time-to-first-INTERACTION as a HARD gate: Playwright-measured, fails the round if >1000ms to interactive content / >500ms brand flash. [kw, PATH-2]
- Reduced-motion ENFORCEMENT [PATH-2 a11y]: an automated Playwright pass with
prefers-reduced-motion: reduceemulated, asserting the Phase-0.3 mappings per tier (route transitions crossfade-only; no transform animation on hover; settle → instant state; static streaming caret; count-ups set instantly), run per round like the contrast and warm-boot gates — plus one recorded reduced-motion spot-journey. - New journeys: send→stream→settle (shipped v5), card→workspace-open transition, tab-morph, warm-boot timing, cold-start-to-first-send, keyboard-only, reduced-motion spot, waggle-settle prototype (standalone, both themes).
- Side-by-side clips vs current Claude and ChatGPT [PATH-2 competitor]: streaming
- warm-launch journeys at minimum, from the arc-start teardown footage, refreshed at the 9-attempt round and delivered in the judge brief — parity/beat claims judged from paired evidence, not memory.
Success gates per round: min-of-5 ≥ 8.0 after Phase-0+P4+P2; ≥ 8.5 after P3; 9 attempt after P1. If two consecutive rounds plateau below gate → stop, re-analyze (the discipline that caught both prior plateaus).
4. What we deliberately do NOT do
- No more polish waves against the old ask lists (measured EV ≈ 0).
- No gamification-shaped addiction (streaks, badges, FOMO mechanics) — the panel would score it as noise and it contradicts the trust-first brand voice that earns the 8.2s. Addiction here = the loop feeling so good it self-reinforces, not manipulation.
- No global router rewrite; no motion on the working thread that competes with content; no pointer-following effects of any kind.
- No unreviewed propagation of the signature gesture: prototype → panel → rollout.
5. Panel disposition — AGREED (goal met)
- PATH-2 (v2): 5/5 ENDORSE — design 8.8 (high) · kw 9.0 (medium) · competitor 8.8 (high) · a11y 8.7 (high) · brand 9.0 (medium). Seven endorsement conditions → integrated in THIS v3: default route-transition tier + retrofit deliverable (design); input-during-warmup contract + first-interaction gate (kw); streaming interaction contract + side-by-side evidence (competitor); affordance floor + reduced-motion enforcement (a11y). The panel agrees on the path — v3 is the executable contract for the arc.
PATH-1 disposition (for the record)
v1 review: design 8.7 endorse · kw 8.7 endorse · competitor 8.5 endorse · brand 9.0 endorse · a11y 8.3 WITHHELD. All 12 blocking amendments integrated above (Phase-0; interruptibility; resequencing; silent-refresh contract; streaming pipeline rescope; high-framerate verification; focus/AT spec; generation-vector CI; keyboard journey; commissioned gesture; frequency taxonomy; caret disambiguation) plus 9 high-consensus non-blocking adoptions (spring family, motion-spec page, reduced-motion per tier, exit choreography, P1/P2 seam, send-path budget, disk-persisted cache, honesty gate, competitive teardown, light-theme signatures, shortcut cheat sheet).