A+ Tracker PRD v0.1 (P0 Scope)

Scope

P0 (3개월 내 출시) 범위. 초등 1~6학년 한정. 5개 핵심 기능 — 학생 등록 / 학습지 자동 생성 / 학생 앱 답안 입력·채점 / 오답노트 / 월간 학부모 리포트.

Not Yet Decided

미해결 결정 (mathflat-clone-service-plan §11 Open Questions) 중 PRD 영향:

  • 외주 강사 수학 정확성 검수 프로세스 (콘텐츠 풀 schema 영향)
  • 학부모 결제 vs 원장 결제 (P1) — 데이터 모델 사전 분리 여부

1. 핵심 사용자 시나리오

1.1 Critical Path — “원장 첫 학습지 발송 (10분)“

#단계화면데이터 변화
1회원가입 (이메일 + SMS 인증)/signupAccount 생성
2공부방 정보 입력 (이름·주소)/onboarding/academyAcademy 생성
3학생 1명 등록 (이름·학년·학부모 번호)/onboarding/studentStudent, Parent 생성 + 6자리 학습 코드 발급
4첫 학습지 만들기 (단원→난이도→문항수→자동 추천 12제→발송)/worksheets/newWorksheet + WorksheetItem×12 생성
5학생에게 SMS로 학습 코드·앱 다운로드 링크 발송(백그라운드)Notification 1건

1.2 학생 첫 풀이 (5분)

#단계화면데이터 변화
1앱 다운로드 + 전화번호 + 학습 코드 입력(앱)Session 발급
2홈 → “오늘 풀어야 할 학습지 1개” 클릭(앱) home
312문항 답안 입력 (객관식 1탭)(앱) worksheet/:idSubmission 생성
4제출 → 즉시 정오답 + 정답률 표시(앱) result/:idSubmissionItem×12, Submission.score 산출

1.3 학부모 월간 리포트 수신 (수동성)

#단계트리거
1매월 1일 03:00 KST 배치Cron (Supabase Edge Function)
2학생별 정답률·단원 성취도 집계SQL → MonthlyReport 행 생성
3Claude Sonnet API 호출 (정량 데이터를 프롬프트에 주입, 자연어 코멘트 생성)LLM call (학생 1명 ≈ 600 입력 토큰 / 300 출력)
4카카오 알림톡 + 앱 내 PDF 동시 발송알림톡 템플릿 monthly-report-v1

2. 데이터 모델 (PostgreSQL 1차 안)

Account (원장 계정)
  id, email, phone, password_hash, created_at
  status: enum(active, suspended)

Academy (공부방 = 결제 단위)
  id, owner_account_id → Account
  name, address, business_registration_number?
  plan: enum(free, starter, pro)  ← P0은 모두 'free' (베타 무료, §10 결정 4)
  student_count_cap: int
  created_at

Student
  id, academy_id → Academy
  name, grade: enum(E1..E6, M1..M3)  ← P0은 E1~E6만
  current_unit_id → Unit (현재 진도)
  learning_code: char(6)  ← 6자리 영숫자 (예: M3K7Q2), 학원 내 unique
  parent_phone: text
  status: enum(active, paused, withdrawn)

Parent (학부모 — Student와 N:1)
  id, student_id → Student
  phone, name?
  consent_alimtalk: boolean (카톡 수신 동의)

Unit (단원 마스터)
  id, grade, subject (math), parent_unit_id?
  name, order_index
  level: int(1~3)  ← 학년 / 대단원 / 소단원 (3뎁스, UX 결론 #4)

Question (문항 마스터)
  id, unit_id → Unit
  type: enum(multiple_choice, short_answer, descriptive)
  difficulty: enum(low, mid, high)
  body_md: text (LaTeX 포함 markdown)
  choices: jsonb (객관식만)
  answer: text (정답 — 객관식은 인덱스, 단답형은 정확 값)
  source: enum(self_made, ai_variant, public_link)  ← §10 결정 1·3
  source_question_id?: int (AI 변형의 원본)
  public_link_url?: text (외부 링크 보조 학습용)
  created_by: text (제작자 식별)
  reviewed_by: text? (검수자)
  reviewed_at: timestamp?

Worksheet (학습지)
  id, academy_id, created_by_account_id
  title, target_unit_ids: int[]
  difficulty_mix: jsonb  e.g. {low: 4, mid: 6, high: 2}
  question_count: int (P0 max 80, UX 결론 #5)
  auto_grade: boolean
  created_at

WorksheetItem (학습지 ↔ 문항 N:N)
  id, worksheet_id, question_id, order_index

Assignment (학습지 발송 = 학생별 인스턴스)
  id, worksheet_id, student_id
  assigned_at, due_at?
  status: enum(pending, in_progress, submitted, graded)

Submission
  id, assignment_id, submitted_at
  score: numeric (자동채점 ON일 때 즉시 계산)
  graded_by: enum(auto, manual_qr, manual)  ← UX 분석 §2.2 3경로

SubmissionItem
  id, submission_id, question_id
  student_answer: text
  is_correct: boolean?  (manual인 경우 nullable until graded)
  manual_score?: numeric  (서술형 부분점수)
  handwriting_image_url?: text (필기·풀이 사진)

WrongAnswerSet (오답노트 — 자동 생성)
  id, student_id
  period: enum(weekly, monthly, exam_prep)
  generated_at
  question_ids: int[]

MonthlyReport
  id, student_id, month: date
  metrics: jsonb (단원별 정답률, 학습 시간, 출제 학습지 수)
  ai_comment: text  ← Claude Sonnet 생성, 발송 전 원장 검수 필수 (§10 결정)
  reviewed_by_owner: boolean
  sent_at: timestamp?

Notification
  id, recipient_phone, channel: enum(sms, alimtalk, push)
  template_id, payload: jsonb
  status: enum(queued, sent, failed)

데이터 모델 결정 근거:

  • Question.source enum — §10 결정 1·3 직접 반영
  • MonthlyReport.reviewed_by_owner — §10 결정 (정량은 템플릿, 정성은 AI + 원장 검수) 직접 반영
  • Unit.level 3뎁스 — UX 결론 #4 반영
  • learning_code 6자리 — 매쓰플랫 패턴 카피
  • 학년 enum에 M1~M3 미리 정의 — P1 중등 확장(§3.2) 사전 준비

3. 핵심 API 윤곽 (FastAPI)

POST   /api/auth/signup                        회원가입
POST   /api/auth/login                         로그인
POST   /api/auth/sms-verify                    학생 전화번호 + 학습 코드 인증

POST   /api/academies                          공부방 생성
GET    /api/academies/me                       내 공부방 정보

GET    /api/students                           학생 목록
POST   /api/students                           학생 등록
PATCH  /api/students/:id                       학생 정보 수정
GET    /api/students/:id/report/monthly        학생 월간 리포트 조회

GET    /api/units?grade=E3                     단원 트리 조회 (3뎁스)
GET    /api/questions?unit_id=...&difficulty=mid&limit=20    문제 추천

POST   /api/worksheets                         학습지 생성 (자동 추천 또는 수동)
GET    /api/worksheets/:id                     학습지 상세
POST   /api/worksheets/:id/assign              학생들에게 발송 → Assignment N건 생성

GET    /api/assignments?student_id=me          학생: 내 할 일
POST   /api/assignments/:id/submit             학생: 답안 제출
GET    /api/submissions/:id                    제출 결과 조회

GET    /api/wrong-answer-sets?student_id=...   오답노트 조회 (자동 생성된 최근 것)
POST   /api/wrong-answer-sets/regenerate       강제 재생성

POST   /api/reports/monthly/preview            (원장) 월간 리포트 미리보기 + AI 코멘트
POST   /api/reports/monthly/:id/send           (원장) 검수 후 카카오 알림톡 발송 트리거

POST   /api/llm/comment                        내부 — Claude Sonnet 자연어 코멘트 생성

4. 화면 흐름 5종 (P0)

4.1 원장 — 학습지 만들기 화면 (가장 중요)

┌────────────────────────────────────────────┐
│  학습지 만들기                              │
├────────────────────────────────────────────┤
│ 1. 학년 [E1▼] 단원 [분수의 덧셈 ▼]          │
│ 2. 난이도 비율    상 [▮▮  ] 중 [▮▮▮▮▮  ] 하 [▮▮▮ ] │
│ 3. 문항 수        [12]      (1~80)           │
│ 4. 자동채점       [ON ●]                     │
│ 5. ────────────────────────                 │
│    추천된 12문항 (편집 가능)                 │
│    ☰ 1. 1/2 + 1/3 = ?           [난이도 중] │
│    ☰ 2. ...                                 │
│    ☰ 3. ...                                 │
│    [ + 문제 추가 ]  [ ↻ 다른 문제로 새로고침 ] │
│ 6. ────────────────────────                 │
│ [ 미리보기 PDF ] [ 학생에게 발송 ▶ ]         │
└────────────────────────────────────────────┘

매쓰플랫 5뎁스 단원 트리 → 3뎁스 평면화 (UX 결론 #4). 첫 학습지 10분 내 발송 가능.

4.2 학생 앱 — 답안 입력 화면

[헤더] 분수의 덧셈 (12/12 풀이중)        [⏸]
─────────────────────────────────────
문제 7. 다음을 계산하시오.
        1/2 + 1/3 = ?

  [ ① 1/5 ]   [ ② 5/6 ]
  [ ③ 2/5 ]   [ ④ 1/6 ]
  [ ⑤ 6/5 ]

[ 풀이 메모 ✏️ ]                   [ 다음 ▶ ]
─────────────────────────────────────
●●●●●●○ ░░░░░  진행률 7/12

객관식 1탭 입력. 풀이 메모는 옵션 (스타일러스 또는 사진 업로드).

4.3 학생 앱 — 오답노트 화면

[탭] 학습지 │ 오답노트 │ 기록 │ MY
─────────────────────────────────
오답노트 — 최근 30일

  📝 분수의 덧셈 (오답 4문제)
     [ 다시 풀기 ]

  📝 도형의 둘레 (오답 2문제)
     [ 다시 풀기 ]

  📝 시험대비 모아보기 (오답 8문제)
     [ 다시 풀기 ]

매쓰플랫 패턴 카피 — 자동 생성, 학생은 “다시 풀기” 1탭.

4.4 원장 — 월간 리포트 검수 화면

[학생: 김초희] 2026년 4월 리포트
─────────────────────────────────
[정량 — 자동]
  - 학습지 출제: 8건
  - 평균 정답률: 78%
  - 단원별: 분수 65% 🟡 / 도형 92% 🟢 / 측정 60% 🔴
  - 출결: 16/16 (100%)

[AI 코멘트 — Claude Sonnet 생성]  ✏️ [ 수정 ]
─────────────────────────────────
초희가 이번 달은 도형 단원에서 강한 모습을 보였습니다.
다만 분수와 측정 단원에서는 ...

[ 발송 취소 ]   [ ✓ 검수 완료 → 학부모에게 발송 ]

원장 검수 게이트 = §10 결정 (정량은 템플릿, 정성은 AI + 검수)을 화면으로 강제.

4.5 학부모 — 알림톡 수신 (앱 외부)

[카카오 알림톡]
[A+ Tracker by 미경]

초희 학부모님께
2026년 4월 학업 보고서가 도착했습니다.

📊 평균 정답률 78%  (전월 대비 +5%)
✅ 출결 100%

[ 자세히 보기 → 앱 ]

5. P0 비기능 요건

항목목표치
동시 사용자 (선생님)100 (베타 100곳)
학습지 생성 응답 시간< 3초 (12문항 추천 + DB 생성)
AI 리포트 생성 시간< 30초 / 학생 1명
AI 리포트 환각률 (사실 오류)< 1% (원장 검수 통과 기준)
알림톡 발송 성공률≥ 99% (실패는 SMS fallback)
모바일 앱 로그인< 5초 (인증 + 학원 매칭)

6. 의도적 미구현 (P0)

매쓰플랫 보유 기능P0 미구현 사유도입 시점
QR 종이 학습지카메라 스캔 라이브러리 시간 부족P1
출결 키오스크 모드통합 출결로 시작P1
풀이 동영상콘텐츠 제작비 (§10 결정)미정 (외부 큐레이션 대체)
전국 석차데이터 부족 (UX §5)데이터 충분해질 때까지 (P3+)
중·고등 콘텐츠P1으로 분리 (§10 결정 2)P1 (중1~중3) / 고등은 미정
학습지 150문항 상한초기 부하 안전선 80P2에서 상향

7. 외부 의존성

서비스용도위험
Anthropic Claude API리포트 자연어 코멘트, 채점 보조API rate limit, 비용 (단위 경제 모델 §5 참고)
카카오 비즈메시지 (NHN Toast)학부모 알림톡템플릿 사전 승인 (영업일 7~14일), 발신프로필 등록
토스페이먼츠(P1) 정기결제P0은 베타 무료라 미사용
SupabaseDB + Auth + Edge Functions + Storage한국 리전 부재 (Singapore) — latency 50ms+
Vercel선생님 웹 hosting무료 hobby tier 기준 P0 OK
EAS (Expo)학생/학부모 앱 빌드·배포iOS App Review 평균 2~3일

8. 다음 단계 (PRD v0.2 → v1.0)

  • 외주 강사 검수 프로세스 PRD 추가 (§11 Open Q 입력)
  • 학부모 결제 흐름 사전 데이터 모델 분리 검토 (P1 영향)
  • 베타 가입 페이지 와이어프레임 (GTM 연계)
  • 알림톡 템플릿 5종 사전 작성 + 사전 승인 신청
  • 단원 트리 마스터 데이터 시드 (E1~E6 단원 ~120개)
  • AI 변형 1제→3제 프롬프트 엔지니어링 + 검수 자동화 워크플로우