What we've shipped
A running log of every meaningful change to FlexFingers.
- Week 5 · 2026-04-27
Improve mode, multi-provider auth, diagnostic engine
- New /improve route surfaces the keys, bigrams, and fingers actually slowing you down — not just a global accuracy %
- Engine now records per-bigram (key-pair) latencies, persisted to a new session_bigram_stats table
- Bug fix: practice sessions now save (session_type was rejected by the DB CHECK constraint)
- Bug fix: per-character stats are now actually written to session_key_stats — adaptive drills finally have data to feed on
- Sign in with Google or GitHub OAuth, or get a one-time email link — no more GitHub-only login
- QWERTY / Dvorak / Colemak finger maps so the per-finger heatmap matches the layout you actually use
- Week 4 · 2026-04-22
E2E tests, CI, docs, analytics
- Playwright e2e suite (warmup-anon real, auth/session/RLS scaffolded behind env flags)
- GitHub Actions CI: typecheck, lint, vitest on every PR (Playwright deferred to manual)
- @vercel/analytics + posthog-js wired up behind a consent gate; warmup_started, warmup_completed, drill_started, insight_viewed events
- README rewrite with architecture diagram, env setup, migration flow, and testing notes
- Public /changelog so the case study has a running log
- Week 3 · 2026-04-21
Landing, settings, onboarding, accessibility
- Marketing landing with live demo, feature grid, how-it-works, footer
- Onboarding card on first warmup; settings page for theme + preferred context
- axe-core + keyboard-nav e2e against /, /warmup, /warmup/summary, /privacy
- OG image route for shareable session summaries
- Week 2 · 2026-04-14
Readiness scoring + adaptive drills
- Per-context baselines (rolling mean + stdev) refreshed by an edge function
- Readiness score from your last session vs. baseline (z-score, 0-100)
- Adaptive drill picker that targets the keys/contexts you've struggled with
- Streaks, session history, and the insights view
- Week 1 · 2026-04-07
Typing engine + warmup MVP
- Headless TypingEngine + zero-rerender TypingSurface (refs + rAF, 10Hz LiveStats)
- Seeded per-context word/snippet packs (general, code-js, code-py, prose, markdown)
- /warmup route with URL-driven context + duration; summary screen with WPM, accuracy, consistency
- Supabase schema: profiles, sessions, baselines, drills, streaks + RLS policies