ChIC — Charité Imaging Classification: a Vue 3 + Vite SPA that classifies Polycystic Liver Disease progression.
Read AGENTS.md first. It holds the architecture map, conventions, and the load-bearing invariants you must not break. This file only lists the few things worth repeating up front.
- Stack: Vue 3 (mixed Options + Composition API), Vite 6, Chart.js 4, plain JavaScript. ESLint (flat config) + Prettier + Vitest.
- Install
npm ci· devnpm run dev(port 8137) · buildnpm run build· testnpm test. npm run lintis check-only (eslint .);npm run lint:fixauto-fixes. Alsonpm run format:check/format, andnpm run typecheck(vue-tsc, advisory).- Verify changes with
npm test+npm run build+ a manual check in the dev server. CI (ci.yml) runs lint + format:check + typecheck + test + build.
src/App.vue(~550 ln) is still the hub — root component and only route; most state lives insrc/composables/. Most changes touch it; keep it under the 600-LOC cap.- Classification lives in one place:
src/domain/classification.js(fed byCONFIG). Both the interactive and import paths callclassify(). Change the model there only — don't fork a second copy (that was a fixed bug). - Chart datasets are order- and label-sensitive.
ChartDisplay.vuepaints class bands via dataset array order + fractionalorder+ relativefill:'+1'/'-1', and finds series by the magic labels'Patient Data'/'Selected Point'. Don't reorder datasets or rename those labels.
Make the smallest change that fits the existing pattern. Don't add dependencies, formatters, or CI unless asked — the agreed roadmap is in docs/RECOMMENDATIONS.md.