spreadlab/web
Justin Visser 2f21248c20 web: sim store, URL state scheme, debounced parallel runs (M3 slice 2)
useSimStore is the one reactive module singleton from the spec: panels
over a shared base config, runs debounced 400 ms, one POST /api/scenario
per panel in parallel, results swapped in atomically only when every
request succeeds. Failures keep the last good results; engine 400s are
routed to an inline validationError, everything else to the banner
message. Stale in-flight responses lose to newer runs per panel.

URL state follows spec section 7 (readable params, repeated panel=,
focus index, full fallback to the preset on any malformed part) and is
covered by round-trip and rejection tests. The study copy and initial
panels live in the deepfake-school preset module; formatPct is the
single percent-rounding rule.

The vitest tsconfig now keeps lib at ES2022 like the app config, and
prettier skips the tygo-generated src/types (drift guard stays green).
2026-06-10 16:36:26 +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: sim store, URL state scheme, debounced parallel runs (M3 slice 2) 2026-06-10 16:36:26 +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: scaffold Vue 3 + Vite app (create-vue, lean options) 2026-06-10 12:55:43 +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: parity page renders the three-scenario comparison from live data 2026-06-10 13:47:01 +02:00
package-lock.json web: scaffold Vue 3 + Vite app (create-vue, lean options) 2026-06-10 12:55:43 +02:00
package.json web: scaffold Vue 3 + Vite app (create-vue, lean options) 2026-06-10 12:55:43 +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