Problem
An empty frontend/ makes the frontend quality gate (#9) unverifiable and hides the React+TS posture from users.
Proposed solution
npm create vite@latest frontend -- --template react-ts (resolves to React 19.2.x, Vite 6.x, TS 5.x as of April 2026). Pin React to ^19.2.0. Set engines.node = ">=24.0.0" in frontend/package.json. Add eslint.config.js (flat config) with eslint-plugin-react, eslint-plugin-react-hooks, @typescript-eslint, max-warnings 0. Add .prettierrc, .prettierignore, vitest.config.ts (jsdom + setup file). Add tsconfig.json with strict: true. NPM scripts: dev, build, preview, lint, format, format:check, check (tsc --noEmit), test (vitest).
Acceptance criteria
Priority rationale
Critical: anchors the chosen frontend stack and makes #9's frontend jobs runnable.
Depends on
#1
Problem
An empty
frontend/makes the frontend quality gate (#9) unverifiable and hides the React+TS posture from users.Proposed solution
npm create vite@latest frontend -- --template react-ts(resolves to React 19.2.x, Vite 6.x, TS 5.x as of April 2026). Pin React to^19.2.0. Setengines.node = ">=24.0.0"infrontend/package.json. Addeslint.config.js(flat config) witheslint-plugin-react,eslint-plugin-react-hooks,@typescript-eslint, max-warnings 0. Add.prettierrc,.prettierignore,vitest.config.ts(jsdom + setup file). Addtsconfig.jsonwithstrict: true. NPM scripts:dev,build,preview,lint,format,format:check,check(tsc --noEmit),test(vitest).Acceptance criteria
npm installsucceeds on Node 24.npm run build,npm run lint,npm run check,npm run testall exit 0.engines.node = ">=24.0.0"enforced inpackage.json.^19.2.0.Priority rationale
Critical: anchors the chosen frontend stack and makes #9's frontend jobs runnable.
Depends on
#1