# frontend/src 전 파일 ledger

## 기준

- `hotspot`: 대형 화면/컴포넌트이면서 LOC 또는 품질 부채가 집중된 파일
- `review`: 중간 이상 복잡도이거나 제품 플로우상 중요한 파일
- `support`: 얇은 hook/UI/타입/보조 파일

## 품질 부채 집중 구간

`any`와 broad `catch`가 함께 많은 파일은 아래 여섯 곳이다.

| file | `any` | `catch(` | note |
|---|---:|---:|---|
| `frontend/src/components/episode/EpisodeStills.tsx` | 21 | 17 | 최대 debt 밀집 지점 |
| `frontend/src/pages/Entities.tsx` | 5 | 15 | page orchestration + 느슨한 응답 처리 |
| `frontend/src/pages/ProjectDetail.tsx` | 7 | 6 | 업로드/분석 orchestration |
| `frontend/src/components/episode/EpisodeWorldGuide.tsx` | 8 | 4 | any suppression 누적 |
| `frontend/src/components/shared/PipelineStepsPanel.tsx` | 3 | 4 | run panel + config editor 결합 |
| `frontend/src/pages/PromptManager.tsx` | 1 | 6 | broad catch 중심 |

## ledger

| file | LOC | class | note |
|---|---:|---|---|
| frontend/src/App.tsx | 244 | review | - |
| frontend/src/api/client.ts | 45 | support | - |
| frontend/src/components/episode/EpisodeActionBar.tsx | 147 | review | react-query, any, component |
| frontend/src/components/episode/EpisodeHeader.tsx | 81 | review | any, component |
| frontend/src/components/episode/EpisodeStills.tsx | 515 | hotspot | react-query, any=21, catch=17, lint:exhaustive-deps, component |
| frontend/src/components/episode/EpisodeWorldGuide.tsx | 360 | hotspot | react-query, any=8, catch=4, component |
| frontend/src/components/layout/AppShell.tsx | 24 | support | component |
| frontend/src/components/layout/Sidebar.tsx | 172 | support | component |
| frontend/src/components/layout/Topbar.tsx | 38 | support | component |
| frontend/src/components/shared/ActivityFeed.tsx | 128 | support | component |
| frontend/src/components/shared/AngleEditor.tsx | 320 | review | component |
| frontend/src/components/shared/GenerationStatusPanel.tsx | 133 | support | lint:unused-vars, component |
| frontend/src/components/shared/ImageGallery.tsx | 258 | review | component |
| frontend/src/components/shared/ImageGalleryModal.tsx | 436 | review | lint:set-state-in-effect, lint:unused-vars, modal |
| frontend/src/components/shared/LLMConfigPanel.tsx | 172 | review | any, component |
| frontend/src/components/shared/MemberList.tsx | 180 | review | any, component |
| frontend/src/components/shared/PipelineProgress.tsx | 303 | review | component |
| frontend/src/components/shared/PipelineStepsPanel.tsx | 463 | hotspot | any=3, catch=4, run-all/config-editor, component |
| frontend/src/components/shared/SceneVariationCard.tsx | 1606 | hotspot | giant-component, any=3, lint:unused-vars, component |
| frontend/src/components/ui/Badge.tsx | 36 | support | component |
| frontend/src/components/ui/Button.tsx | 28 | support | component |
| frontend/src/components/ui/Input.tsx | 25 | support | component |
| frontend/src/components/ui/Modal.tsx | 49 | support | component |
| frontend/src/components/ui/Table.tsx | 55 | review | any, component |
| frontend/src/components/ui/ToastContainer.tsx | 28 | support | component |
| frontend/src/components/ui/Tooltip.tsx | 61 | support | component |
| frontend/src/hooks/api/mutations/useAnalyzeEpisode.ts | 19 | support | react-query, legacy-analyze-api, analysis-path-mismatch, hook |
| frontend/src/hooks/api/mutations/useCreateEpisode.ts | 57 | review | react-query, any-error-shape, hook |
| frontend/src/hooks/api/mutations/useCreateProject.ts | 26 | support | react-query, hook |
| frontend/src/hooks/api/mutations/useMemberMutations.ts | 45 | support | react-query, hook |
| frontend/src/hooks/api/mutations/usePlanningDocMutations.ts | 48 | support | react-query, hook |
| frontend/src/hooks/api/mutations/useShotToggle.ts | 106 | support | react-query, hook |
| frontend/src/hooks/api/mutations/useStillMutations.ts | 184 | support | react-query, hook |
| frontend/src/hooks/api/useActivities.ts | 32 | support | react-query, hook |
| frontend/src/hooks/api/useEntities.ts | 21 | support | react-query, hook |
| frontend/src/hooks/api/useEpisode.ts | 19 | support | react-query, hook |
| frontend/src/hooks/api/useEpisodesList.ts | 27 | support | react-query, hook |
| frontend/src/hooks/api/useEpisodesProgress.ts | 40 | support | react-query, hook |
| frontend/src/hooks/api/useGenStatus.ts | 22 | support | react-query, hook |
| frontend/src/hooks/api/useMembers.ts | 17 | support | react-query, hook |
| frontend/src/hooks/api/usePlanningDoc.ts | 28 | support | react-query, hook |
| frontend/src/hooks/api/useProgress.ts | 39 | support | react-query, hook |
| frontend/src/hooks/api/useProject.ts | 17 | support | react-query, hook |
| frontend/src/hooks/api/useProjectList.ts | 24 | support | react-query, hook |
| frontend/src/hooks/api/useProjectSummary.ts | 17 | support | react-query, hook |
| frontend/src/hooks/api/useScreenplay.ts | 19 | support | react-query, hook |
| frontend/src/hooks/api/useStillImages.ts | 75 | support | react-query, hook |
| frontend/src/hooks/api/useStills.ts | 45 | support | react-query, hook |
| frontend/src/hooks/api/useWorldGuide.ts | 27 | review | react-query, any, hook |
| frontend/src/hooks/api/useWorldRules.ts | 40 | support | react-query, hook |
| frontend/src/hooks/useApi.ts | 26 | review | any, hook |
| frontend/src/hooks/useAuth.ts | 28 | support | hook |
| frontend/src/hooks/useEventSource.ts | 24 | support | unused-sse, lint:set-state-in-effect, no-callers, hook |
| frontend/src/hooks/useToast.ts | 42 | support | hook |
| frontend/src/i18n/en.json | 22 | support | - |
| frontend/src/i18n/ko.json | 280 | review | - |
| frontend/src/i18n/useI18n.ts | 12 | support | - |
| frontend/src/main.tsx | 25 | support | react-query |
| frontend/src/pages/Dashboard.tsx | 197 | review | any, page |
| frontend/src/pages/Entities.tsx | 1258 | hotspot | react-query, any=5, catch=15, page |
| frontend/src/pages/EpisodeDetail.tsx | 149 | review | run-all-analysis-entry, any=3, catch=3, page |
| frontend/src/pages/Episodes.tsx | 269 | review | legacy-analyze-entry, any=2, page |
| frontend/src/pages/ExportStudio.tsx | 534 | review | catch-heavy, page |
| frontend/src/pages/ImageReview.tsx | 456 | review | catch-heavy, page |
| frontend/src/pages/Login.tsx | 126 | support | page |
| frontend/src/pages/NotFound.tsx | 49 | support | page |
| frontend/src/pages/ProjectDetail.tsx | 360 | hotspot | any=7, catch=6, page |
| frontend/src/pages/PromptManager.tsx | 277 | review | any=1, catch=6, page |
| frontend/src/pages/admin/ActivityLog.tsx | 122 | support | page |
| frontend/src/pages/admin/Users.tsx | 310 | review | any=2, catch=3, page |
| frontend/src/styles/global.css | 757 | review | - |
| frontend/src/types/episode.ts | 135 | review | any |
| frontend/src/types/project.ts | 24 | support | - |
| frontend/src/vite-env.d.ts | 6 | support | - |
