Files
Lumotia/docs/brief/research-grounded-design-audit.md
Jake ada517440a docs(brief): add research-grounded design audit
Map every recommendation in research-grounded-design-principles.md to
Kon's current code state, with two independent axes (alignment +
evidence strength) and prioritised gap tiers. Tier 1 limited to
single-PR-sized work; body-doubling, partner-sharing, and personal
acoustic adaptation recorded as out-of-product-scope, not backlog.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 16:44:12 +01:00

20 KiB

title, description, last_updated
title description last_updated
Research-Grounded Design Audit Point-in-time audit of Kon against the research-grounded cognitive-load, executive-function, and accessibility memo. 2026-04-26

Research-Grounded Design Audit — Kon vs. Cognitive-Mercy Research

Companion to research-grounded-design-principles.md.
Date: 2026-04-26. Product-code snapshot: a15167c.

Spine

Kon's design thesis is cognitive mercy: reduce working-memory load, preserve state, make return painless, avoid shame, avoid forced categorisation, and let users outsource sequencing without feeling broken. This audit judges every recommendation against that spine. Motivational-app patterns — accountability, social presence, partner sharing, streak pressure, or nudges harder than a quiet digest — are out-of-product-scope by design, not deferred.

Methodology

  • Source memo: research-grounded-design-principles.md, committed as a reference document.
  • Code evidence: prior parallel-Explore audit provided in the planning context, then direct source spot-checks against product code at a15167c.
  • Visual evidence: no screenshots committed. The file:line references below are the durable source of truth.
  • Vite/Playwright limitation: backend-dependent flows such as real model loading, live transcription, and transcript history were audited from source only.

Evidence strength is graded independently from alignment:

  • 🟢 Strong — direct Kon-relevant evidence: RCT, large meta-analysis, or established practice standard for at least one actual Kon population.
  • 🟡 Moderate — convergent evidence: adjacent populations, robust design-pattern evidence, or strong mechanism-grounded inference.
  • 🟠 Weak / emerging — single-source, small-n, transitive inference only, or active research area without consensus.
  • Contested / null — failed replications, null effects under adequate power, or live methodological debate.

Summary Table

Feature/challenge Alignment Evidence Gap tier One-line verdict
Cognitive-load lens 🟡 Cognitive mercy is the product spine: offload, preserve state, avoid shame.
Voice capture 🟢 Local Whisper, low-friction capture, raw transcript remains recoverable.
MicroSteps decomposition ⚠️ 🟢 T1 Aligned except no implementation-intention phrasing.
MicroStep step-count fixed at 3-7 ⚠️ 🟡 T2 Hard-coded range; no user granularity or mastery fade.
Buckets 🟢 Inbox/Today/Soon/Later, no numeric priority ladder.
Match my energy ⚠️ 🟡 T2 Three-state sort exists; labels/meaning are system-defined.
Local-first / privacy 🟢 Product architecture keeps core flows local.
Custom vocabulary / contextual biasing 🟢 Profile terms feed Whisper initial_prompt and LLM cleanup.
Personal acoustic adaptation 🟢 OOS Distinct from contextual biasing; out of current product boundary.
Accessibility fonts ⚠️ T1 Font picker is neutral, but Bionic copy overstates benefit.
Letter/line spacing 🟢 Live sliders cover the best-supported reading intervention.
Reduce motion 🟢 Three-option in-app control resolves system preference.
Post-collapse re-entry ⚠️ 🟡 T2 Morning triage copy is merciful; no >7-day fresh-start state.
Unintrusive dopamine loops 🟢 Fixed completion feedback, no variable-ratio reward layer.
Capture-to-action gap 🟢 Raw transcript canonical, no required categorisation at capture.
Streaks vs momentum 🟢 Streaks absent; visible progress is soft and optional.
Notifications and nudges ⚠️ 🟡 T2 Opt-in OFF, focus-suppressed, capped; no digest-batched mode.
Identity framing 🟢 Onboarding and cleanup copy avoid pathology/training framing.
Externalised time 🟢 Running ring is always visible when active.
Implementation-intention phrasing 🔴 🟢 T1 Strongest single citation in the memo; not in the MicroStep prompt.
Transition support / re-orientation 🔴 🟡 T2 No explicit "where was I?" return state after interrupted MicroSteps.
Body doubling / co-presence 🟠 OOS Outside current solo/local-first product boundary.
Coach/partner sharing loop 🟡 OOS Turns Kon toward social accountability; not a backlog item.
MicroStep mastery / scaffolding fade 🔴 🟡 T3 Requires schema/evaluation work; defer.
Honest limitations in product copy ⚠️ T1 Some user-facing copy implies certainty where evidence is contested.

Per-Feature Alignment

0. Cognitive-Load Lens

  • Doc recommends: treat working memory, initiation, sequencing, and time perception as variable capacity; design Kon as an external cognitive system rather than a training app.
  • Kon does: current product framing and this audit's spine are cognitive mercy: offload decisions, preserve state, avoid shame, and allow long-term use without implying the user should graduate from the tool.
  • Visual: code-only.
  • Verdict: aligned, 🟡 moderate evidence, no gap.
  • Notes: this is the load-bearing interpretation for all feature-specific rows below.

1. Voice Capture

  • Doc recommends: one-gesture capture, local processing, support for fragments, and transcript drafts that never block saving.
  • Kon does: first-run copy says "Press the button. Start talking. That's it." (FirstRunPage.svelte); raw Whisper output is explicitly treated as source of truth and recoverable in preview (preview/+page.svelte, preview/+page.svelte).
  • Visual: code-only.
  • Verdict: aligned, 🟢 strong evidence, no gap.
  • Notes: severe expressive aphasia remains an honest limitation in the memo, not a current product claim.

2. MicroSteps

  • Doc recommends: 3-7 concrete steps, user edit/reject/override, implementation-intention phrasing, user-controlled granularity, and scaffolding fade.
  • Kon does: the system prompt requires 3-7 concrete physical micro-steps (prompts.rs); users can decompose, check off, edit, and give feedback (MicroSteps.svelte, MicroSteps.svelte).
  • Visual: code-only.
  • Verdict: ⚠️ partial gap, 🟢 strong evidence, T1/T2/T3 split.
  • Gap detail: implementation-intention phrasing is missing from the prompt and is the strongest single Tier 1 opportunity. User-adjustable count is Tier 2; mastery fade is Tier 3.

3. Buckets

  • Doc recommends: Inbox/Today/Soon/Later, no numeric priorities, Today as the working surface, and no overdue-shame launch state.
  • Kon does: the Tasks page defines All/Inbox/Today/Soon/Later and avoids P1-P4 style priorities (TasksPage.svelte).
  • Visual: code-only.
  • Verdict: aligned, 🟢 strong evidence, no gap.
  • Notes: the audit did not inspect a rendered drag flow, but the structural bucket model matches the memo.

4. Match My Energy

  • Doc recommends: quick high/medium/low energy input, skip without penalty, tasks at or below current energy, and user-defined energy meanings.
  • Kon does: the Tasks page includes current-energy controls and a Match my energy sort (TasksPage.svelte, TasksPage.svelte, TasksPage.svelte). Energy labels are fixed as High/Medium/Zero (EnergyChip.svelte).
  • Visual: code-only.
  • Verdict: ⚠️ partial gap, 🟡 moderate evidence, T2.
  • Gap detail: users cannot redefine what each label means for their body, which weakens the Jason energy-envelope grounding.

5. Local-First / Privacy

  • Doc recommends: local-only defaults, no transcript-content telemetry, no required account, and privacy perception surfaced clearly.
  • Kon does: model and transcription paths are local-first in the current architecture; profile vocabulary is resolved locally before transcription (transcription.rs, transcription.rs).
  • Visual: code-only.
  • Verdict: aligned, 🟢 strong evidence, no gap.
  • Notes: the memo correctly labels direct local-first-vs-cloud disclosure evidence as transitive rather than RCT-backed.

6. Custom Vocabulary / Per-Profile Language

  • Doc recommends: first-class user vocabulary, low-friction learning, local persistence, and corrections feeding future recognition.
  • Kon does: profile terms are joined into Whisper initial_prompt (mod.rs); Whisper passes that prompt through to set_initial_prompt (whisper_rs_backend.rs); cleanup appends custom vocabulary spellings (llm_client.rs); the viewer can learn terms from edits (viewer/+page.svelte).
  • Visual: code-only.
  • Verdict: aligned for contextual vocabulary, 🟢 strong evidence, no gap.
  • Boundary: personalised acoustic adaptation is separate from contextual biasing and is explicitly out-of-product-scope research for now.

7. Accessibility: Fonts, Bionic Reading, Spacing, Motion

  • Doc recommends: honest framing for OpenDyslexic/Lexend/Bionic, adjustable size/spacing, no italics for extended reading, and prefers-reduced-motion plus an in-app control.
  • Kon does: font picker, font size, letter spacing, line height, transcript size, Bionic toggle, and reduce-motion control are present (AccessibilityControls.svelte); defaults and DOM application include Lexend, Atkinson, OpenDyslexic, 16px, 1.5 line-height, Bionic off, and reduce motion system (preferences.svelte.ts, preferences.svelte.ts).
  • Visual: code-only.
  • Verdict: ⚠️ partial gap, contested for branded font/Bionic claims, 🟢 strong for spacing/motion, T1 honest-copy fix.
  • Gap detail: "Bold the first few characters of each word for faster scanning" overstates a contested/null evidence base (AccessibilityControls.svelte).

Per-Challenge Alignment

A. Post-Collapse Re-Entry

  • Doc recommends: a fresh-start state after >7 days away, one-tap backlog bankruptcy, no overdue counts, and no catch-up framing.
  • Kon does: morning triage is optional, capped at three, and explicitly avoids overdue/failed framing (MorningTriageModal.svelte, MorningTriageModal.svelte). Copy says "Yesterday's open items. The rest can wait." (MorningTriageModal.svelte).
  • Visual: code-only.
  • Verdict: ⚠️ partial gap, 🟡 moderate evidence, T2.
  • Gap detail: there is no special >7-day return detection, fresh-start copy, or Inbox bankruptcy action.

B. Unintrusive Dopamine Loops

  • Doc recommends: fixed-schedule, completion-contingent feedback; no variable-ratio reward, streak pressure, surprise confetti, or forced sound.
  • Kon does: focus-timer completion is deterministic and brief (focusTimer.svelte.ts, focusTimer.svelte.ts); task completion dispatches plain state/events rather than a reward loop (page.svelte.ts).
  • Visual: code-only.
  • Verdict: aligned, 🟢 strong evidence, no gap.
  • Notes: completion sound exists for the focus timer; general sound cues default off in settings (page.svelte.ts).

C. Capture-To-Action Gap

  • Doc recommends: optimise time-to-first-syllable, allow nameless/untyped thought dumps, preserve in-progress state, and keep original transcript canonical.
  • Kon does: raw transcript recovery is explicit (preview/+page.svelte); auto-title prompt treats speech as data, not instructions, and does not invent facts (prompts.rs); task extraction omits non-commitments rather than forcing categorisation (prompts.rs).
  • Visual: code-only.
  • Verdict: aligned, 🟢 strong evidence, no gap.
  • Notes: real hotkey/lock-screen performance was not measured in this docs-only audit.

D. Streaks Vs Momentum

  • Doc recommends: no streak counters, no streak-loss framing, no leaderboards, and any progress shown over softer ranges.
  • Kon does: settings define no streak mechanic; momentum sparkline is optional and separate from the "N today" badge (types/app.ts); defaults keep the sparkline on but not a consecutive-use metric (page.svelte.ts); design docs explicitly prohibit streak-shaming (design-principles.md).
  • Visual: code-only.
  • Verdict: aligned, 🟢 strong evidence, no gap.
  • Notes: "N today" is same-day completion acknowledgement, not a streak.

E. Notifications And Nudges

  • Doc recommends: silent, batched, user-controlled notifications; no push by default; compassionate language; OS quiet-hour respect.
  • Kon does: nudges default off (page.svelte.ts); nudge suppression requires enabled/unmuted, no document focus, and under 3/hour (nudgeBus.svelte.ts, nudgeBus.svelte.ts); morning nudge copy is gentle (nudgeBus.svelte.ts).
  • Visual: code-only.
  • Verdict: ⚠️ partial gap, 🟡 moderate evidence, T2.
  • Gap detail: the current bus is immediate-triggered with caps; it does not offer a 1-3 daily digest batching mode.

F. Identity Framing

  • Doc recommends: capability/scaffolding language, no cure/training framing, no pathology onboarding, and user work visible as mastery evidence.
  • Kon does: first-run copy is minimal and non-pathologising (FirstRunPage.svelte); cleanup prompt frames AI as translator, not editor, preserving the user's meaning (llm_client.rs); raw transcript remains available as the user's own words (preview/+page.svelte).
  • Visual: code-only.
  • Verdict: aligned, 🟢 strong evidence, no gap.
  • Notes: rebrand work is unrelated to this audit.

G. Literature-Surfaced Gaps

  • Externalised time: Kon has a persistent focus timer that survives window close/reopen (focusTimer.svelte.ts, focusTimer.svelte.ts) and a visible running ring with controls (FocusTimer.svelte). Verdict: aligned, 🟢 strong.
  • Implementation intentions: MicroStep prompt does not request if-then plans (prompts.rs). Verdict: 🔴 missing, 🟢 strong, T1.
  • Transition support: there is no explicit "where was I?" re-orientation on return to an interrupted MicroStep. Verdict: 🔴 missing, 🟡 moderate, T2.
  • Body doubling: evidence is emerging, but the feature would move Kon away from solo/local-first cognitive mercy. Verdict: OOS, 🟠 weak/emerging.
  • Coach/partner loop: evidence is stronger for severe EF impairment, but the product shape becomes social accountability. Verdict: OOS, 🟡 moderate.

Corrections From Prior Internal Audit

  1. Bionic Reading copy overstates the evidence. AccessibilityControls.svelte says "Bold the first few characters of each word for faster scanning" (AccessibilityControls.svelte). The memo treats Bionic Reading evidence as contested/null. The toggle can stay, but the copy should soften. Captured as Tier 1 #2.

Minor UX Notes Not Driven By The Memo

  • MicroStep Just Start timer launch hover-reveals. The running timer ring itself is always visible, so externalised time remains aligned. The launch affordance hides until row hover (MicroSteps.svelte), which drifts from Kon's internal no-hover-to-reveal rule. This is a small CSS follow-up, not a research-memo gap.

Prioritised Gaps

Tier 1 — Single-PR Sized

  1. Implementation intentions in MicroStep prompt — update prompts.rs so decomposition includes at least one cue-anchored "when X, then Y" step. This is the strongest evidence-to-effort item in the memo.
  2. Honest accessibility-font + Bionic copy — soften AccessibilityControls.svelte and add a short note under the font picker that font choices are personal preferences with contested evidence.

Tier 2 — Multi-Component

  1. Re-entry / fresh-start trigger after long absence — detect >7-day absence in the shell or morning triage flow; switch copy to "Welcome back. This week starts fresh."; offer one-tap Inbox bankruptcy.
  2. Notifications digest mode — add an opt-in digest mode with 1-3 user-set times alongside the immediate nudge bus. Defaults remain OFF.
  3. User-adjustable MicroStep count — expose granularity preference and thread it through the decomposition prompt.
  4. "Where was I?" MicroStep re-orientation — show the just-completed step and next step when returning to an interrupted decomposition.
  5. User-defined energy meaning — let users edit labels and descriptions for High/Medium/Zero.

Tier 3 — Roadmap / Schema Work

  1. MicroStep mastery / scaffolding fade — track completion patterns and offer to fold familiar routines back into single tasks. Requires schema work and evaluation.

Out-Of-Product-Scope Research Projects

  • Body doubling / co-presence layer. Outside Kon's current solo/local-first product boundary; would push the app toward social accountability.
  • Coach / partner sharing loop. Same product-boundary issue, even where the evidence is stronger for severe EF impairment.
  • Personal acoustic adaptation / per-user model fine-tunes. Distinct from contextual vocabulary; requires opt-in data, evaluation, and storage design before it could belong in product.

Out-of-product-scope by design, not deferred.

Honest-Copy Items

  • Bionic Reading: change "for faster scanning" to preference-based wording.
  • Accessibility font picker: add one sentence that OpenDyslexic/Lexend/Bionic evidence is contested and the picker is for comfort/preference.
  • Match my energy: if surfaced in product explanation, ground it in Jason's energy-envelope model; mention spoon theory only as a communication metaphor.

Open Questions For Jake

  • Keep this audit docs-only, or eventually surface a short methodology line in an in-app About/Methodology screen?
  • Fold Tier 1 into v0.1 work, or queue it immediately after v0.1?

Next Actions

  • Tier 1 items each get a focused follow-up plan.
  • Tier 2 items get a brief design conversation before plan-writing.
  • Tier 3 stays on roadmap.
  • Out-of-product-scope items are not picked up unless the product boundary is intentionally reopened.