# pages 레이어

한 라우트 = 한 슬라이스. 화면을 **배치·조립**하는 층이다.

## import 경계

- 가능: widgets · features · entities · shared
- 금지: app, **다른 page 슬라이스**(cross-slice 위반)

## 여기 두는 것

- `pages/<route>/ui/<Route>Page.tsx` — Suspense 진입점 + 배치
- 그 화면에서만 쓰는 패널·다이얼로그(`ui/`), 그 화면의 파생·직렬화 로직(`model/`)
- 슬라이스 공개 API는 루트 `index.ts` 하나

## 두지 않는 것

- 두 화면이 쓰게 된 UI → `widgets/`로 승격
- 서버 데이터 정의(queryOptions·mutationOptions)와 도메인 타입 → `entities/<도메인>/api/`

## 자주 나는 실수

- **다른 page의 파일을 직접 import** — cross-slice 위반이다. 공통이면 widgets·entities·shared로 내려 승격한다.
- **필터·검색·정렬·페이지를 `useState`로** — URL(nuqs)이 기본이다. useState면 새로고침·공유·뒤로가기에서 증발한다.
- 한 번에 다 만들기 — 첫 사이클은 데이터가 보이는 최소 화면에서 끊는다.

## 더 보기

`.claude/skills/start-feature/SKILL.md` · `fsd-router/SKILL.md`
