All 5 files reduced below 500 LOC (hard cap) by extracting sub-components: - training/page.tsx: 780→278 LOC — imports existing _components/, adds BlocksSection - control-provenance/page.tsx: 739→145 LOC — extracts provenance-data.ts, ProvenanceHelpers, LicenseMatrix, SourceRegistry - iace/[projectId]/verification/page.tsx: 673→164 LOC — extracts VerificationForm, CompleteModal, SuggestEvidenceModal, VerificationTable - training/learner/page.tsx: 560→216 LOC — extracts AssignmentsList, ContentView, QuizView, CertificatesView - ControlDetail.tsx: 878→311 LOC — adds ControlSourceCitation, ControlTraceability, ControlRegulatorySection, ControlSimilarControls, ControlReviewActions siblings Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
admin-compliance
Next.js 15 dashboard for BreakPilot Compliance — SDK module UI, company profile, DSR, DSFA, VVT, TOM, consent, AI Act, training, audit, change requests, etc. Also hosts 96+ API routes that proxy/orchestrate backend services.
Port: 3007 (container: bp-compliance-admin)
Stack: Next.js 15 App Router, React 18, TailwindCSS, TypeScript strict.
Architecture (target — Phase 3)
app/
├── <route>/
│ ├── page.tsx # Server Component (≤200 LOC)
│ ├── _components/ # Colocated UI, each ≤300 LOC
│ ├── _hooks/ # Client hooks
│ └── _server/ # Server actions
├── api/<domain>/route.ts # Thin handlers → lib/server/<domain>/
lib/
├── <domain>/ # Pure helpers, zod schemas
└── server/<domain>/ # "server-only" logic
components/ # App-wide shared UI
See ../AGENTS.typescript.md.
Run locally
cd admin-compliance
npm install
npm run dev # http://localhost:3007
Tests
npm test # Vitest unit + component tests
npx playwright test # E2E
npx tsc --noEmit # Type-check
npx next lint
Known debt (Phase 3 targets)
app/sdk/company-profile/page.tsx(3017 LOC),tom-generator/controls/loader.ts(2521),lib/sdk/types.ts(2511),app/sdk/loeschfristen/page.tsx(2322),app/sdk/dsb-portal/page.tsx(2068) — all must be split.- 0 test files for 182 monolithic pages. Phase 3 adds Playwright smoke + Vitest unit coverage.
Don't touch
- Backend API paths without updating
backend-compliance/in the same change. lib/sdk/types.tsin large contiguous chunks — it's being domain-split.