- ProblemSet.audioUrls Json? (영어 듣기 mp3 배열)
- Problem 에 bodyText/choices/answerNumber/passageId/needsReview 추가
- Problem @@index([passageId]) 로 역방향 조회 보장
- 신규 Passage 모델 (공통 지문 [N~M] 분리용)
- examRound 추가 거부 — 기존 examType 이 이미 'sat'|'mock-june'|'mock-sept'|'academy' 커버
- .gitignore 에 data/kice/ (저작권 자료)
migration: 20260411183246_kice_text_fields
shadow DB INDEX 권한 이슈는 mariadb 에서 GRANT 로 해결
backend/package.json
- Add 'postinstall: prisma generate' — fresh pnpm install now produces
a usable @prisma/client without a manual step.
- Add engines.node >= 20 and packageManager pnpm@9.12.0.
frontend/package.json
- Same engines + packageManager pin.
frontend/next.config.js
- output: 'standalone' enabled for PM2's .next/standalone/server.js
pattern (reduces production bundle size, removes runtime node_modules
dependency for the web process).
frontend/.env.example (new)
- Documents NEXT_PUBLIC_API_URL as a BUILD-TIME variable.
ecosystem.config.js (new)
- PM2 config for reloop-api (cwd=backend, script=dist/main.js, port
3001) and reloop-web (cwd=frontend, script=.next/standalone/server.js,
port 3000, HOSTNAME=0.0.0.0). max_memory_restart=512M each with
separate error/out log files.
README.md (new)
- Root deploy guide: stack, env vars table (backend + frontend),
local dev quickstart, prod deploy steps (rsync → pnpm install
--frozen-lockfile → prisma migrate deploy → build → copy .next/static
and public into standalone → pm2 start), reverse proxy mapping,
pm2 ops. Also covers Cluster F items: 'Dev VM 에서 prisma migrate
dev --name init' for migrations and 'pnpm install' for lockfile
generation.
.gitignore
- Ignore .claude/state/session* + .claude/state/*.lock +
.claude/sessions/ (ephemeral harness runtime metadata).