spreadlab/web
Justin Visser 0e3a14a0b3 web: playback, slice 4 of M3
usePlayback drives one global round on a rAF timer: 700 ms per round at
1x, speed pill cycling 0.5/1/2, play-once autoplay after the first load,
no looping; at the final round the play button becomes replay. Under
prefers-reduced-motion there is no autoplay, the page settles on the
final round, and the cadence slows to 1000 ms.

The PlayerBar is the mockup's centered pill with a native range
scrubber (one tick per round, aria-valuetext, seeking pauses) and the
global keyboard map: Space toggles, arrows step, Home/End jump; text
inputs and native control handling are left alone. A single polite live
region announces run updates, pauses, scrub releases, and the final
state.

Nodes reached in the current round pop in (scale 0.6 to 1, 250 ms
ease-out) with a small deterministic stagger so each round reads as a
wave. Per Justin's feedback the panel percentage and reached count now
follow the playhead instead of sitting on the final outcome; the hero
keeps the final numbers, since its sentence claims outcomes.
2026-06-10 17:15:38 +02:00
..
.vscode web: scaffold Vue 3 + Vite app (create-vue, lean options) 2026-06-10 12:55:43 +02:00
public web: scaffold Vue 3 + Vite app (create-vue, lean options) 2026-06-10 12:55:43 +02:00
src web: playback, slice 4 of M3 2026-06-10 17:15:38 +02:00
.editorconfig web: scaffold Vue 3 + Vite app (create-vue, lean options) 2026-06-10 12:55:43 +02:00
.gitattributes web: scaffold Vue 3 + Vite app (create-vue, lean options) 2026-06-10 12:55:43 +02:00
.gitignore web: the dashboard page, slice 3 of M3 2026-06-10 16:55:14 +02:00
.oxlintrc.json web: scaffold Vue 3 + Vite app (create-vue, lean options) 2026-06-10 12:55:43 +02:00
.prettierignore web: sim store, URL state scheme, debounced parallel runs (M3 slice 2) 2026-06-10 16:36:26 +02:00
.prettierrc.json web: scaffold Vue 3 + Vite app (create-vue, lean options) 2026-06-10 12:55:43 +02:00
env.d.ts web: scaffold Vue 3 + Vite app (create-vue, lean options) 2026-06-10 12:55:43 +02:00
eslint.config.ts web: scaffold Vue 3 + Vite app (create-vue, lean options) 2026-06-10 12:55:43 +02:00
index.html web: the dashboard page, slice 3 of M3 2026-06-10 16:55:14 +02:00
package-lock.json web: the dashboard page, slice 3 of M3 2026-06-10 16:55:14 +02:00
package.json web: the dashboard page, slice 3 of M3 2026-06-10 16:55:14 +02:00
README.md web: scaffold Vue 3 + Vite app (create-vue, lean options) 2026-06-10 12:55:43 +02:00
tsconfig.app.json web: scaffold Vue 3 + Vite app (create-vue, lean options) 2026-06-10 12:55:43 +02:00
tsconfig.json web: scaffold Vue 3 + Vite app (create-vue, lean options) 2026-06-10 12:55:43 +02:00
tsconfig.node.json web: scaffold Vue 3 + Vite app (create-vue, lean options) 2026-06-10 12:55:43 +02:00
tsconfig.vitest.json web: sim store, URL state scheme, debounced parallel runs (M3 slice 2) 2026-06-10 16:36:26 +02:00
vite.config.ts web: parity page renders the three-scenario comparison from live data 2026-06-10 13:47:01 +02:00
vitest.config.ts web: scaffold Vue 3 + Vite app (create-vue, lean options) 2026-06-10 12:55:43 +02:00

web

This template should help get you started developing with Vue 3 in Vite.

VS Code + Vue (Official) (and disable Vetur).

Type Support for .vue Imports in TS

TypeScript cannot handle type information for .vue imports by default, so we replace the tsc CLI with vue-tsc for type checking. In editors, we need Volar to make the TypeScript language service aware of .vue types.

Customize configuration

See Vite Configuration Reference.

Project Setup

npm install

Compile and Hot-Reload for Development

npm run dev

Type-Check, Compile and Minify for Production

npm run build

Run Unit Tests with Vitest

npm run test:unit

Lint with ESLint

npm run lint