# OPIc Flow 구현 계획

## 1. 제품 목표

사용자가 난이도와 설문 주제를 선택하면 실제 OPIc 흐름에 가까운 15문항을 음성으로 듣고 영어로 답한다. 각 답변은 즉시 전사·평가되며, 시험 종료 후 전체 평가를 첫 장으로 하고 문항별 점수·키워드·개선점을 포함하는 보고서를 제공한다.

점수와 추정 등급은 공식 OPIc 성적이 아닌 학습용 지표로 명확히 표시한다.

## 2. 시험 구성

1. 자기소개 1문항
2. 선택 주제 묘사·일상·과거 경험 6문항
3. 롤플레이 3문항
4. 돌발 주제 2문항
5. 비교·의견·미래 예측 3문항

총 15문항이며 난이도에 따라 질문의 추상성, 요구 근거 수, 후속 조건을 조정한다.

## 3. 상태 흐름

`Setup → Device check → Question → Listening → Recording → Transcribing → Evaluating → Next question → Final report`

세션 상태는 Go 백엔드가 권위 있게 관리한다. 프런트엔드는 현재 문항보다 앞선 문항을 임의 제출할 수 없다.

## 4. AI 파이프라인

### 현재 MVP

- 질문 음성: Web Speech Synthesis
- 사용자 음성: MediaRecorder(WebM/Opus)
- 전사: `POST /v1/audio/transcriptions`
- 평가: `POST /v1/responses`, strict JSON Schema
- 다음 질문: 사전 구성된 OPIc 블루프린트

사전 구성 질문을 사용하면 AI가 시험 범위를 벗어나거나 문항 수를 잘못 생성하는 문제를 막을 수 있다. 답변 내용은 다음 문항을 고를 때 분기 조건으로 사용하도록 확장한다.

### Realtime 2단계

- Wails Go 백엔드가 표준 API 키로 `/v1/realtime/calls`에 SDP를 전달한다.
- Vue WebView는 `RTCPeerConnection`으로 마이크 트랙과 `oai-events` 데이터 채널을 구성한다.
- `server_vad` 또는 `semantic_vad`로 발화 종료를 감지한다.
- `input_audio_transcription` 이벤트로 실시간 자막을 표시한다.
- 모델 음성 출력은 원격 audio track으로 재생한다.
- 문항 종료마다 별도의 Responses API 평가를 수행해 점수 JSON을 확정한다.

Realtime 모델이 대화를 자연스럽게 진행하더라도 시험 문항 인덱스와 최대 15문항 제한은 앱 상태 머신이 통제해야 한다.

## 5. 평가 기준

각 문항 100점:

- 과업 수행 25
- 구체성·내용 전개 20
- 구성·연결 15
- 어휘 다양성 15
- 문법 정확성 15
- 유창성·답변 길이 10

오디오 기반 고도화 시 말하기 속도, 긴 침묵, filler, 반복, 자기 수정도 별도 feature로 저장한다. transcript만으로 발음 점수를 단정하지 않는다.

## 6. 보고서

첫 장:

- 전체 평균 점수
- 연습용 추정 등급
- 핵심 강점 3개
- 우선 개선 과제 3개
- 다음 세션 권장 난이도·주제

문항별:

- 질문과 답변 transcript
- 0–100 점수
- 핵심 키워드
- 잘한 점
- 개선점
- 개선된 예시 답변(후속 단계)

내보내기:

- 1차: 브라우저 인쇄/PDF
- 2차: Go PDF 생성 및 세션 JSON/오디오 내보내기

## 7. 인증과 보안

- ChatGPT 웹 로그인/구독은 API 인증으로 재사용하지 않는다.
- 개인용 MVP: 사용자가 OpenAI Platform 또는 Google Gemini API 키를 입력하며 메모리에만 유지한다.
- Gemini는 기능별 모델 우선순위를 두고 오류 또는 검증 불가능한 응답이면 다음 모델로 폴백한다.
- 배포용: 앱에 공용 API 키를 포함하지 않는다. 자체 백엔드에서 사용자 로그인, 사용량 제한, ephemeral Realtime 인증을 처리한다.
- 장기 로컬 저장이 필요하면 Windows Credential Manager/macOS Keychain/libsecret을 사용한다.
- 오디오는 기본적으로 평가 후 폐기하고, 사용자가 명시적으로 저장을 선택한 경우에만 로컬 암호화 저장한다.

## 8. 단계별 로드맵

### Phase 1 — 현재

- Wails/Vue 앱 골격
- 설정·시험·보고서 UI
- 15문항 상태 머신
- 녹음, 전사, 구조화 평가
- 데모 모드

### Phase 2

- Realtime API WebRTC
- VAD, 실시간 자막, 모델 음성, 끼어들기
- 답변 특징에 따른 제한된 후속 질문 분기
- 마이크/스피커 사전 점검

### Phase 3

- SQLite 세션 기록
- 오디오 파형과 침묵/filler 분석
- 개선 답변 생성과 쉐도잉
- PDF/JSON 내보내기

### Phase 4

- 사용자 계정과 서버 측 API 프록시
- 기기 간 동기화
- 평가 prompt/eval 데이터셋 및 회귀 테스트
- 비용·속도·품질 관측 대시보드

## 9. 검증 계획

- 질문 수와 순서 상태 머신 단위 테스트
- 점수 스키마 0–100 경계 테스트
- 빈 오디오, 마이크 거부, API 401/429/5xx 오류 테스트
- 25MB 오디오 업로드 제한 전 사전 차단
- 세션 완료 전 보고서 접근 차단
- 난이도별 대표 transcript를 사용한 평가 회귀 테스트
