146 Commits

Author SHA1 Message Date
reloop
dbe1a22a05 fix: RELOOP-2026-MATH 프리미엄 문제집 복구
premium-high-math.ts 신규 생성 (고1-3 종합 20문제)
PREMIUM_EBOOK_MAP/PREMIUM_CODES 복구

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-20 19:07:47 +09:00
reloop
f618341255 fix: 샘플 문제집 — 미리보기 안내 삭제 + 문제 번호 스크롤바 추가
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-19 20:28:27 +09:00
reloop
9e2bddcb62 feat: 2022 개정 교육과정 학기별 샘플 문제집 12권 (180문제)
기존 11권(middle/high/ksat/premium) 전면 삭제,
학기별 12권으로 재구성 (m1-1 ~ h3-2, 각 15문제)
중1~고3 × 1학기/2학기, 2022 개정 수학 교육과정 기반

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-19 20:23:39 +09:00
reloop
39980078b5 fix: BMC 캔버스 SVG 렌더링 수정 + report.md 삭제
BMC를 width/height 명시 + 단순 구조로 재작성 (렌더링 호환성)
report.md 삭제 (구글 독스로 이관)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-19 20:05:29 +09:00
reloop
ee296bf88e docs: 시장성 도식 3종 추가 — 포지셔닝맵, CJM, B2B 네트워크
포지셔닝 맵: 문제풀이 특화도 × 복습 자동화 (ReLoop 독점 영역)
Customer Journey: 인지→탐색→가입→학습→유료전환→충성 6단계
B2B 네트워크 효과: 학원채택→학생유입→학부모리포트→재계약 선순환

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-19 19:55:16 +09:00
reloop
711d753fdc docs: 보고서 도식 6종 SVG 생성
실현가능성: BMC 캔버스, 3단계 마일스톤, As-Is vs To-Be 플로우
기술성: 기술 아키텍처, 경쟁사 비교표, 복습 엔진 작동 원리

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-19 19:53:32 +09:00
reloop
cde8a6b49a docs: TAM-SAM-SOM 도식 + PEST 분석 이미지 삽입
SVG로 제작, report.md 목적/필요성 탭에 삽입
TAM 51억$ / SAM 2조원 / SOM 52억원
PEST: 정치(AI교과서), 경제(사교육비29.2조), 사회(AI학습340%↑), 기술(SM-2+망각곡선)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-19 19:41:38 +09:00
reloop
420610a41d docs: ALGORITHM/README/report 최신 상태 반영
- 가격 2,900원 통일, 기능 게이트 문서화
- 코드 규모 45,641줄/71 API/15 모델/26 페이지
- 실현가능성/시장성 섹션 전면 재작성
- 2022 교육과정 프리셋, 학교 관리 4대 기능 반영

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-19 19:39:35 +09:00
reloop
3648da69b9 docs: add forgetting curve figure for report 2026-04-19 19:30:02 +09:00
reloop
1873c65a02 feat: 가격표 2,900원 리뉴얼 + 티어 전환기 + 기능 게이트
가격표: Free/Pro(2,900)/School(학생당 2,900) 3-tier, 비교표 재구성
프로필: 프로토타입용 Free/Pro/School 자유 전환 버튼
기능 게이트: Free 과목 3개, 복습 큐 10개, 마스터리 경로 차단

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-19 19:06:57 +09:00
reloop
b59cc8fd57 chore: PsProblem/백준 연동 데드코드 전면 제거
PsProblem, PsBookmark, PsSyncState 모델 3개 삭제.
User.bojHandle, StudyLog.psProblemId FK 삭제.
12곳 psProblemId: null 쿼리 필터 제거.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-19 18:41:31 +09:00
reloop
b27417a10e feat: 학교 관리 4대 기능 — 개인과제, 복습과제, 풀이상세, 선생님 노트
Backend:
- Assignment에 type(new/review), targetUserIds, teacherNote 필드 추가
- 학생 목록에서 targetUserIds 기반 개인 과제 필터링
- GET /assignments/:id/submissions/:userId/details 엔드포인트 (문제별 시간/필기/정오)

Frontend:
- 과제 생성: 유형 토글(새문제/복습) + 개별 학생 지정 + 선생님 해설 노트
- 과제 상세: 학생 클릭 → 풀이 상세 모달 (문제별 시간, 정오, 필기 이미지)
- 학생 뷰: 완료된 과제에 선생님 해설 노트 표시

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-19 18:25:36 +09:00
reloop
b27d9a4240 feat: 캘린더 Quick Add — 날짜 클릭 후 바로 학습 기록 등록
DayPanel 헤더에 '+' 버튼 추가, 클릭 시 인라인 폼 펼침.
과목/태그/제목/결과/난이도 5필드로 투두리스트 스타일 간편 등록.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-19 18:10:49 +09:00
reloop
eca67cfd07 fix: auto-create subjects for review registration 2026-04-19 17:52:17 +09:00
reloop
132a7e397a feat: 시험 시작 전 타이머 설정 화면 추가
- 문제집 진입 시 시작 화면에서 시험 시간을 설정할 수 있음
- 빠른 선택: 30분/60분/100분/120분 버튼
- 직접 입력: 1~300분 숫자 입력
- 시작 버튼 클릭 후 카운트다운 시작 (집중모드)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-19 16:56:31 +09:00
reloop
5db1520e67 feat: 2022 개정 교육과정 수학 프리셋 — 과목 생성 시 단원 자동 배치
- backend: curriculum-presets.ts에 중1~고3 + 공통수학/대수/미적분/확통/기하 단원 데이터
- backend: subjects.create() 시 과목명이 프리셋에 해당하면 태그 자동 createMany
- frontend: 과목 생성 모달에 교육과정 프리셋 칩 13개 추가
  (중1수학~고3수학, 공통수학1/2, 대수, 미적분I/II, 확통, 기하)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-19 16:51:33 +09:00
reloop
aa3ab3a1a7 feat: 문제집 탭 통합 — 프리미엄/내 문제집/샘플 3섹션 구조
- exams 페이지를 3개 섹션으로 재구성:
  1. 프리미엄 문제집 (B2B 코드 등록)
  2. 내 문제집 (PDF 업로드 + 크롭 + 직접 등록)
  3. ReLoop 샘플 문제집
- SideNav에서 'PDF 문제집' 항목 제거, 문제집 탭으로 통합
- 빈 섹션에 안내 메시지 + 아이콘 표시

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-19 16:28:24 +09:00
reloop
e6f54d1dc4 feat: 문제집 풀이 — 번호 스크롤 네비 추가
- 답안 패널 위에 가로 스크롤 번호 칩 바 추가
- 현재 문제는 인디고 글로우, 답안 완료는 보라색, 표시(★)는 주황
- 문제 전환 시 현재 번호로 자동 스크롤 (smooth center)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-19 16:23:49 +09:00
reloop
59da6a3578 feat: 과목 삭제 기능 — 연관 데이터 트랜잭션 정리
- backend: subjects.service.remove()를 트랜잭션으로 변경
  (reviewSchedule → studyLog → skillSnapshot → subject 순서 삭제)
- frontend: 과목 카드에 삭제 버튼 + 확인 다이얼로그 추가

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-19 16:19:35 +09:00
reloop
629f2465e0 feat: 태그 수정/삭제 API + 2D 그라데이션 색상표
- backend: tags PATCH 엔드포인트 추가 (태그 이름 수정 가능)
- frontend: 과목 색상 선택을 HSL 기반 2D 그라데이션 피커로 교체
- 프리셋 10색 빠른 선택 + 캔버스 드래그 + HEX 직접 입력

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-19 16:14:36 +09:00
reloop
f5214d20b2 feat: 과목 제한 해제 — 수학 외 자유 과목 추가 가능
- backend: ALLOWED_SUBJECT_NAMES, @IsIn() 삭제, 모든 서비스에서 name:'수학' 필터 제거
- frontend: purgeNonMath 제거 (대시보드 안정화), 과목 생성 가드 삭제
- defaultSubjectColor에 영어/국어/과학/사회/한국사 색상 추가

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-19 16:08:48 +09:00
reloop
aa270be659 refactor: 랜딩 페이지 현재 기능에 맞게 전면 리뉴얼
- PS(Solved.ac) 관련 내용 전부 제거
- SM-2 + 에빙하우스 하이브리드 알고리즘 강조
- PDF 자동 크롭 문제집 기능 추가
- 캔버스 필기모드 작동 원리 반영
- 태그별 숙련도 추적 설명 업데이트
- FAQ: Anki 비교, 학교/학원 활용, 과목 확장 계획
- 요금제: Pro 9,900원, School 학생당 5,500원
- 통계 수치: 324+ 문제, 12 ebook, 75 API
- Hero phrases: PDF 관련 문구 추가, PS 문구 제거

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-19 14:22:23 +09:00
reloop
e8b8c4b6e2 feat: 문제집 점프 네비 + 학교 PDF 과제 + ALGORITHM.md 업데이트
1. 업로드 문제집 뷰어에 문제 번호 점프 스트립 추가
   - 스크롤 가능한 번호 버튼, 풀이/등록 상태별 색상 구분
2. 학교 > 새 과제에 PDF 업로드 기능 추가
   - 문제 PDF + 해설지(선택) 업로드 → 이미지 크롭 → ProblemSet 자동 생성
   - 생성된 문제집이 드롭다운에 자동 추가되어 바로 과제 배정 가능
3. ALGORITHM.md 알고리즘 변경사항 반영
   - easeFactor 필드 분리 설명
   - intensity SM-2 배율 (strict×0.7, relaxed×1.4)
   - 망각곡선 안전장치 (P<30% 시 간격 축소)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-17 20:04:49 +09:00
reloop
eeb94db8e7 feat: 알고리즘 개선 + 태그 활용 강화
알고리즘:
- SkillSnapshot 필드 분리: s0(기억강도 0~1) + easeFactor(EF 1.3~4.0)
- SM-2에 intensity 배율 반영 (strict×0.7, moderate×1.0, relaxed×1.4)
- 망각곡선 보정 통합: SM-2 간격 후 예상 P<30%면 안전 간격으로 축소
- SM-2에서도 s0(기억강도) 업데이트하여 두 모델이 항상 동기화

태그 활용:
- 복습 세션에 태그 필터 칩 (특정 단원만 집중 복습)
- 복습 완료 요약에 태그별 통계 (어려움/보통/쉬움 카운트)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-17 17:38:42 +09:00
reloop
85caf9b71d feat: 복습 후 태그 추가 프롬프트 + 캘린더 완료 항목 정렬
1. TagPrompt 공통 모달: 복습/문제풀이 후 태그 선택/생성 가능
   - 복습 페이지: 난이도 선택 후 태그 없는 문제에 자동 프롬프트
   - 업로드 문제집: 자기평가 후 태그 프롬프트
   - 새 태그 생성 기능 (입력 + 즉시 적용)
2. 백엔드: PATCH /study-logs/:id에 tagId 업데이트 지원
3. 캘린더 day panel: 완료 항목 아래로 정렬 + 취소선 + 투명도

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-17 17:17:06 +09:00
reloop
b975889c2e docs: 창업경진대회 제출 보고서 (report.md)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-17 14:40:28 +09:00
reloop
90bccfbd66 remove: 프로필 학년/등급 섹션 삭제
GradeCardCarousel, 현재등급/목표등급 배지, 관련 state/함수 모두 제거.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-17 10:52:29 +09:00
reloop
2c40372570 docs: 복습 알고리즘 상세 설명서 (ALGORITHM.md)
SM-2 하이브리드와 에빙하우스 망각곡선 두 경로의 수식, 상수,
의사결정 분기, 페르소나/강도 효과를 코드 레벨에서 설명.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-17 10:45:09 +09:00
reloop
a1ba2ca5fa fix: ESLint unescaped entity 수정
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-17 10:34:29 +09:00
reloop
2467c6c8ac feat: 업로드 문제집 전용 뷰어 페이지 (/exams/uploaded/[id])
이미지 기반 문제 뷰어: 필기모드, 5지선다 답안, 정답확인, 메모,
난이도 자기평가→복습큐 등록. 기존 sample-ebook은 텍스트 기반이라
별도 페이지 필요.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-17 10:33:47 +09:00
reloop
683e41be72 fix: eraser 아이콘 Icon 컴포넌트에 등록
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-17 10:19:15 +09:00
reloop
58719e329e feat: 문제풀이 UI 통일 + PDF→문제집 + 통계탭 삭제
- 통계 탭 삭제 (프론트 페이지/차트/네비 항목, 백엔드 stats 모듈은 대시보드용으로 유지)
- PDF 문제 분리 → 문제집 생성으로 변경 (ProblemSet + Problem 레코드)
  - ProblemSet에 sourceType, uploadedByUserId 추가
  - POST /problem-sets/create-from-pdf 엔드포인트
  - GET /problem-sets/my-uploads, DELETE /problem-sets/:id
  - exams 페이지에 '내가 만든 문제집' 섹션
- 문제 풀이 UI 통일
  - DrawingCanvas 공통 컴포넌트 추출 (필기모드)
  - 복습 페이지에 필기모드(캔버스+펜색상) 추가
  - 다시풀기 페이지에 필기모드+메모 추가
  - 처음풀기 페이지 난이도 슬라이더→3버튼(H/M/E)+SM-2 연동

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-17 10:17:12 +09:00
reloop
da7dba0c0c fix: 크롭 이미지 URL을 API 서버 기준으로 해석 + 복습 시 사용자 등록 문제 이미지 표시
- import-pdf: resolveUploadUrl로 이미지 src를 API 서버 도메인으로 변환
- review: currentProblem이 null이어도 StudyLog.imageUrl이 있으면 이미지 표시
- getOne API: correctAnswer, imageUrl 필드 응답에 추가
- api.ts: StudyLogDetail에 imageUrl 필드 추가

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-17 09:45:31 +09:00
reloop
2b9111a3f7 feat: PDF 이미지 크롭 방식 문제 분리 + 해설지 정답 자동 태깅 + 복습 정답 표시
14. PDF 문제 분리
- OCR 텍스트 파싱 → bbox 기반 이미지 크롭(pdftoppm)으로 전면 교체
- 해설지 PDF 동시 업로드 시 pdftotext로 정답 표 자동 파싱
- StudyLog에 correctAnswer, imageUrl 컬럼 추가 (migration)
- 프론트: 크롭 이미지 미리보기 + 정답 자동/수동 배정 UI

15. 복습 시 정답 표시
- 복습 카드에 "정답 보기" 버튼 추가 (클릭 시 정답 번호 표시)
- ProblemSet answerNumber + StudyLog correctAnswer 양쪽 소스 지원
- 캘린더 일별 보기에도 answerNumber 포함

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-17 09:35:08 +09:00
reloop
8ede8efbec feat: 프로필 알고리즘 설명 + 시험목표 삭제 + PDF 파싱 버그 수정 + README 재작성
- 프로필 학습설정에 현재 페르소나/강도 기반 복습 알고리즘 설명 카드 추가
- 시험 목표/집중 단원/BOJ 핸들 섹션 제거
- PDF 문제 분리: codex Vision OCR → pdftotext 텍스트 파싱으로 교체 (운영서버 호환)
- README.md 전면 재작성 (최신 기능 반영)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-17 09:14:50 +09:00
reloop
f87563270e fix: PDF 문제 분리 메뉴 위치 개선 — 문제집 바로 아래로 이동 + 문제집 페이지에 진입 버튼 추가
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-17 09:02:50 +09:00
reloop
45cb02f3fc feat: 밀린 복습 자동 이월 + 페르소나 재계산 + PDF OCR 문제 분리
- 복습 큐 조회 시 하루 이상 밀린 pending 항목을 오늘 09:00 KST로 자동 reschedule
- 페르소나/학습강도 변경 시 모든 pending 복습 스케줄을 새 설정 기반으로 재계산
- PDF 모의고사 업로드 → Codex Vision OCR로 문제별 분리 → 태그 배정 → 선택적 복습 큐 등록

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-17 08:50:32 +09:00
reloop
8aa87ed257 feat: SM-2 + 페르소나 하이브리드 복습 알고리즘
- SM-2 Easiness Factor + 페르소나별 망각속도 보정 (senior 1.3x ~ crammer 0.6x)
- 최초 학습(iter=0): hard=1d, medium=3d, easy=7d 차등 간격
- 2회차~: 반복할수록 간격 증가 (6 × EF^(iter-1) × pf)
- hard → EF 하락 + 간격 리셋(1일), easy → EF 상승 + 간격 확대
- EF 는 SkillSnapshot.s0 에 저장 (태그별 개인 학습 용이도)
- 프론트 3버튼에 SM-2 기반 동적 간격 미리보기 표시
- 기존 PersonaForgetService.schedule/updateS0 유지 (selfDifficulty 없는 경우 fallback)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 15:31:47 +09:00
reloop
25092bf680 feat: 문제집 삭제 + PS/국어 데이터 완전 제거
- DELETE /study-logs/by-prefix: 문제집 삭제 시 관련 StudyLog+ReviewSchedule cascade 삭제
- POST /study-logs/purge-non-math: PS studyLog + 비수학 subject 일괄 삭제
- dashboard/reviews/study-logs 쿼리에 psProblemId:null + subject:'수학' 필터 추가
- 카탈로그: ebook 카드 삭제 버튼 + 경고 confirm + 숨기기/복원
- 대시보드 마운트 시 1회 자동 purge (localStorage flag)
2026-04-16 14:23:02 +09:00
reloop
942e4b95c2 feat(ebook): 수능 수학 샘플 문제집 5권 (공통 수Ⅰ·Ⅱ + 선택 기하·미적분·확통)
- [수능] 수학Ⅰ 22문항: 지수·로그, 삼각함수, 수열
- [수능] 수학Ⅱ 22문항: 극한·연속, 미분, 적분
- [수능] 기하 15문항: 이차곡선, 벡터, 공간도형
- [수능] 미적분 15문항: 급수, 합성함수미분, 치환·부분적분
- [수능] 확률과통계 15문항: 순열조합, 조건부확률, 정규분포·신뢰구간

수능 실제 난이도 분포 반영 (공통 8/10/4, 선택 5/7/3).
자체 창작 문제, 수학적 정확성 셀프체크 완료.
2026-04-16 14:08:02 +09:00
reloop
915deb5d72 feat(ebook): 필기모드 — Canvas 오버레이, 펜 색상 3종, 문제별 localStorage 영속화
- 필기모드 토글: ON=그리기+보이기, OFF=숨기기+아래 요소 클릭 가능
- 마우스/터치 모두 지원, touch-action: none 으로 스크롤 방지
- 펜 색상: 빨강/파랑/검정 전환
- 지우기: 현재 문제 필기 초기화 (confirm)
- 페이지 전환/재방문 시 필기 복원 (localStorage per problem)
2026-04-16 13:56:24 +09:00
reloop
21a048b017 feat: QR/코드 ebook 등록 + 직접 문제 등록 + PDF 업로드 + 시연용 문제집
- 코드 입력 → 프리미엄 ebook(55문항) 등록, localStorage 영속화
- 직접 문제 등록 → POST /study-logs → 복습 캘린더 자동 배치
- PDF 업로드 → backend uploads/problems/, 카탈로그에 PDF 카드 표시
- 시연용 인쇄 문제집 HTML (A4 10페이지, 표지+정답표)
- 데모 등록코드: RELOOP-2026-MATH, DEMO-B2B-001

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 13:47:57 +09:00
reloop
cf16243e96 feat(ebook): 풀이 진행상황 유지 + 처음부터 다시 풀기 + 복습 등록 복원
- 마운트 시 GET /study-logs 로 이미 등록된 문제 복원 (registeredProblems)
- selectedAnswers/revealed/pageIndex localStorage 영속화
- '처음부터 다시 풀기' 버튼 (복습 등록은 유지, 풀이만 초기화)
- 진행률 표시: 풀이 N/30 · 복습 등록 N/30
- title 형식에 문제 번호 포함 ([grade] #N question)
2026-04-16 13:29:27 +09:00
reloop
3070f3308a fix: sample-ebook 자기 평가 텍스트 JSX 아포스트로피 이스케이프 2026-04-16 12:30:19 +09:00
reloop
256d42dbd8 feat: 3단계 자기 평가 복습 스케줄 (어려움1d/보통7d/쉬움30d) + 샘플 ebook → StudyLog 연동
- backend study-logs: selfDifficulty 필드 추가, 고정 간격 스케줄링 (1/7/30일)
- backend reviews submit: selfDifficulty 전달 → 다음 복습 고정 간격
- frontend sample-ebook: 정답 확인 후 3단계 평가 → POST /study-logs → 복습 캘린더 등록
- frontend review: 정답/부분/오답 4버튼 → 어려웠어/괜찮았어/쉬웠어 3버튼으로 교체
- sample data: 180문항 전부 difficulty 책정 (문항별 easy/medium/hard)
2026-04-16 12:24:41 +09:00
reloop
21c31a07dc feat: 복습 문제 삭제 기능 (잘못 누른 경우 대응)
- backend: DELETE /reviews/:id 엔드포인트 + 소유권 확인 후 hard delete
- 캘린더 패널: 각 복습 항목 옆 빨간 "삭제" 버튼, confirm 후 낙관적 제거 + 셀 카운트 갱신
- 복습 풀이 큐: ActionGrid 하단 "이 문제 삭제" ghost 버튼, 삭제 후 다음 문제로 전환
- pending/done/skipped 상태 무관하게 삭제 허용
2026-04-16 11:59:14 +09:00
reloop
07be0c581a chore: PS 데이터 잔재 전면 제거 + 국어 통계 차단 확인
- backend study-logs: psProblemId input/include/응답매핑/검증 제거
- frontend study-logs/[id]: PS 전용 렌더링(PsTypeBadge, TierBadge, BOJ 링크,
  normalizePsTags, getTierColor 등) 전부 제거, problem null 시 fallback 유지
- frontend study/history: PS 뱃지 렌더링/헬퍼 제거
- frontend onboarding: GoalType 'ps' 항목, BOJ 핸들 연결 UI, 관련 state 제거
- frontend api.ts: GoalType 'ps', psProblem 타입, getBojTierLabel 제거

국어 통계는 backend stats.service 의 name='수학' 필터로 이미 차단 확인.
Prisma schema 의 PsProblem/PsBookmark 모델은 유지 (마이그레이션 없음).
2026-04-16 11:52:04 +09:00
reloop
03ce2c64fd feat(prototype): 중1~고3 샘플 ebook 6권 + PS 제거 + 복습캘린더 + 태그 삭제
### 샘플 ebook (대회 시연용 B2B 데모)
- /exams 카탈로그: API 호출/필터 제거, EBOOK_LIST 기반 6카드 정적 렌더
- /exams/sample-ebook/[id] 동적 라우트: 중1~고3 수학 6권 × 30문항 + 해설
- 교육과정별 단원 커버 (중1: 정수·일차방정식 ~ 고3: 극한·벡터)

### PS (Solved.ac) 도메인 제거
- backend: PsModule/PsService/PsController/SolvedAcClient 전체 삭제, app.module 정리
- frontend: /ps 라우트, PsTabs, SideNav/BottomNav PS 항목, api.ts PS 타입 전부 제거
- onboarding: ps.sync() 호출 제거

### 복습큐 → 복습캘린더
- backend: GET /reviews/calendar?year&month, GET /reviews/day?date API 추가
- frontend: 대시보드 "오늘 복습 큐" 카드 → ReviewCalendar 위젯 교체
  - 월간 7열 그리드, 날짜 클릭 시 해당일 복습 목록 인라인 패널
  - 밀린 날 warning / 완료 날 success / 오늘 하이라이트
  - 0건이면 "쉬어가자" 안내

### 태그 삭제 기능
- subjects/page.tsx: 태그 행 × 아이콘 → ConfirmDialog (danger) → DELETE /tags/:id
- 낙관적 업데이트 + 실패 시 롤백

backend tsc + frontend tsc 클린.
2026-04-16 10:44:55 +09:00
reloop
57cd305166 fix(backend): tsconfig exclude 'prisma' 가 src/prisma 까지 차단 — 항목 제거
기존 exclude 패턴 'prisma' 는 backend/prisma/ 스키마 폴더를 제외하려는 의도였지만,
TypeScript exclude glob 이 경로 어디서든 'prisma' 디렉터리를 매칭해서 src/prisma/ 도
함께 제외됨. 그 결과 nest build 가 PrismaModule 을 dist/prisma.module.js 로 평탄화
emit 하면서 app.module 의 './prisma/prisma.module' require 가 런타임에 깨졌음.

이전 배포는 tsbuildinfo 캐시가 살아있던 덕에 우연히 정상 트리로 emit 되어 가려져
있었고, 오늘 클린 빌드 시 노출. 'prisma' 폴더의 .ts 파일들은 어차피 include
'src/**/*' 에 안 잡히므로 exclude 자체가 불필요. 항목 제거로 해결.
2026-04-16 10:03:15 +09:00
reloop
674fdfcf3d feat(prototype): 수학 단일 과목 잠금 + 샘플 ebook 데모 + B2B QR 비전 문서
- 백엔드 read-side 필터: subjects/stats/problem-sets findMany 에 name='수학' / subjectName='수학' 고정
- 백엔드 write-side 가드: subjects.controller @IsIn(['수학']) for create/update
- 프론트 subjects: 클라이언트 검증으로 수학 외 입력 차단
- 프론트 exams: 카탈로그 맨 앞에 [샘플] 수능 수학 미리보기 ebook 데모 카드 항상 노출 (4분기 모두)
- 신규 페이지 /exams/sample-ebook: 종이책 펼침 two-page spread, 5문항 (이차함수/등차/극한/확률/정적분), 키보드 ←→ nav, 정답 확인+해설, B2B 비전 안내 박스
- docs/b2b-qr-physical-book.md: 종이책 QR → 앱 ebook + 망각곡선 복습 큐 자동 연동, 출판사 라이선스 모델 미래 스펙

데이터는 DB 보존 (soft filter), '수학' 한 단어 sed 로 풀 수 있음.
백엔드 tsc build / 프론트 tsc + lint 클린.
2026-04-16 09:56:57 +09:00