# Phase 8 Kickoff: Dual-Run Frontend (Legacy + React) ## Purpose Define how to run the current legacy frontend and the incoming React frontend side-by-side during migration kickoff. ## Frontend Paths - Legacy frontend: served by `src/server.js` at `http://localhost:8787/` - React frontend (target): expected in `frontend-react/` (Vite default expected at `http://localhost:5173/`) ## Commands - Legacy dev server: `npm run frontend:legacy:dev` - Legacy start (non-watch): `npm run frontend:legacy:start` - React dev (stub-aware): `npm run frontend:react:dev` - React quality stubs: - `npm run frontend:react:lint` - `npm run frontend:react:test` - `npm run frontend:react:build` - `npm run frontend:react:check` If `frontend-react/package.json` does not exist, lacks the requested script, or `frontend-react/node_modules` is missing, React commands exit successfully with a deterministic skip message. ## Side-by-Side Local Run 1. Terminal A: `npm run frontend:legacy:dev` 2. Terminal B: `npm run frontend:react:dev` 3. Verify legacy UI responds on `http://localhost:8787/` 4. Verify React command behavior: - pre-scaffold: skip message (expected) - post-scaffold: starts actual React dev server ## Milestone Kickoff Checklist (`#37`, `#38`) - [x] `#37` React migration kickoff commands are exposed in root `package.json`. - [x] `#37` Dual-run operational doc exists for legacy + React side-by-side local execution. - [x] `#37` CI includes a React-path quality command (`frontend:react:check`) that is safe before scaffold and active after scaffold. - [x] `#38` Deterministic command wiring established for React quality gates (`lint/test/build`) via a single stub-aware runner. - [x] `#38` Legacy and React paths are explicitly separated in command names to reduce migration ambiguity.