기능 백로그 (v1.0)

각 카드는 한 PR 안에 끝나는 작은 단위입니다 (이상적으로 변경 200 LOC 미만). 위에서 아래로 쌓아 조립합니다. 한 카드 머지 후 다음 카드로 이동. 상태 변경: 카드의 class="feature"class="feature col-todo|doing|done"으로 옮기거나, 부모 컬럼을 변경.

백로그 카드 양식

📋 Todo25
F-001
iOS 프로젝트 부트스트랩 (SwiftUI, iOS 16+)
기반
참조 · 의존 · 수용 조건

참조: spec §6.1

의존: 없음

  • Xcode 프로젝트 생성, 빌드 성공
  • iOS 16+ 시뮬레이터 빈 화면 표시
  • SwiftLint 기본 룰 설정
  • README.md에 빌드/실행 안내 1줄
F-002
디자인 토큰 (색·폰트·간격)
기반
참조 · 의존 · 수용 조건

참조: ux.html 톤 가이드, docs/styles.css CSS 변수

의존: F-001

  • Color+Tokens.swift에 styles.css의 CSS 변수 매핑
  • 다크 모드 자동 전환 (system)
  • SwiftUI Preview에서 라이트/다크 둘 다 확인
F-003
Card / Collection SwiftData 모델
데이터
참조 · 의존 · 수용 조건

참조: spec §4.3

의존: F-001

  • Card / Collection / Dialogue / Tone enum 정의 (spec 4.3 그대로)
  • Collection ↔ Card 다대다 관계 (cardIDs 배열)
  • "전체 씨앗" 시스템 컬렉션 자동 시드
  • 유닛 테스트: 카드 1개 생성·다중 컬렉션 소속·삭제
F-004
백엔드 POST /translate Mock (Cloudflare Worker)
백엔드
참조 · 의존 · 수용 조건

참조: spec §4.2

의존: 없음 (병렬 가능)

  • Cloudflare Worker 또는 로컬 Node 서버에 mock 엔드포인트
  • 요청: text + targetLang + tone, 응답: 외국어/발음/카테고리/톤/대화/mp3(base64 placeholder)
  • 한국어 1문장 입력 시 항상 같은 mock 응답 반환
  • cURL 한 줄로 테스트 가능 (README 예시)
F-005
하단 탭바 골격 (Home / Collections / Friends / Me)
네비 P02
참조 · 의존 · 수용 조건

참조: ux 메뉴 트리

의존: F-001, F-002

  • SwiftUI TabView 4개 탭
  • 각 탭은 빈 화면 + 제목 라벨
  • 탭 아이콘 SF Symbols (커스텀 일러스트는 v1.1)
F-006
홈 화면 골격 + 빈 상태
참조 · 의존 · 수용 조건

참조: spec §4.4, ux P02

의존: F-003, F-005

  • 헤더(아바타·타이틀·+ 버튼) + 빈 상태 카피
  • 씨앗 0일 때 "안녕! 같이 첫 씨앗 담아볼까요?" + 큰 + 버튼
  • 씨앗 N개일 때는 placeholder 카드 목록 (다음 카드에서 진짜 데이터)
F-007
볼주머니 위젯 + 일일 카운트
참조 · 의존 · 수용 조건

참조: spec §4.9

의존: F-003, F-006

  • 10개 슬롯 dot 표시 + 햄스터 마스코트 (정적 SVG 또는 PNG)
  • 일일 카운트 UserDefaults 또는 SwiftData 저장
  • 자정 리셋 (사용자 로컬 시간)
  • 카운트 변경 시 0.3초 ease-out 애니메이션
F-008
씨앗 카드 행(Row) 컴포넌트
참조 · 의존 · 수용 조건

참조: ux P03

의존: F-002, F-003

  • 외국어 17pt · 발음 13pt · 카테고리 칩 · 언어 깃발 + 미니 재생 버튼
  • 탭 시 콜백
  • 일본어·스페인어·영어 폰트 폴백 처리
F-009
+ 액션 시트 (Input 진입)
참조 · 의존 · 수용 조건

참조: ux P06

의존: F-006

  • + 탭 시 시트: 타이핑 / 스크린샷 / 음성 / 새 주머니 / 취소
  • 볼주머니 가득 시 입력 옵션 회색 + 메시지
  • 오프라인 시 새 씨앗 옵션 회색 + 메시지
F-010
타이핑 입력 화면
참조 · 의존 · 수용 조건

참조: ux P06a

의존: F-009

  • 멀티라인 텍스트 필드 + placeholder
  • 언어/톤 셀렉터 시트
  • 텍스트 있을 때 "완료" 활성
  • helper text: "여러 문장도 괜찮아요…"
F-011
Processing 화면 + 진입 연결
참조 · 의존 · 수용 조건

참조: ux P09

의존: F-010

  • 풀스크린 모달 + 햄스터 채워지는 애니메이션
  • "볼주머니에 담는 중…" 카피
  • 5초 후 취소 버튼 등장
F-012
/translate 실 호출 + 응답 파싱
백엔드
참조 · 의존 · 수용 조건

참조: spec §4.2

의존: F-004, F-011

  • URLSession 또는 async/await
  • mp3 base64 → 파일 시스템 저장
  • Card 인스턴스 생성 + Collection 자동 분류 (1차: "전체 씨앗"만)
  • 일일 볼주머니 카운트 +1
  • 에러 시 재시도 토스트
F-013
Card Detail 골격 (외국어·발음·한국어)
참조 · 의존 · 수용 조건

참조: ux P05

의존: F-003, F-008

  • 언어 라벨 · 외국어 30pt · 발음 17pt · 한국어 15pt
  • 주머니 소속 칩들 + "주머니에 담기" + 버튼 (다음 카드)
  • 뒤로가기 + ⋯ 버튼 (다음 카드에서 시트 연결)
F-014
내 표현 듣기 (단일 mp3 + 단어 하이라이트)
참조 · 의존 · 수용 조건

참조: spec §4.6

의존: F-013

  • AVAudioPlayer 재생 + 정지
  • 재생 중 외국어 토큰별 시각 하이라이트 (CJK 2-3자 단위 / Latin 단어 단위)
  • 버튼 ▶ → ■ 토글
F-015
대화 맥락 표시 + 대화 전체 듣기
참조 · 의존 · 수용 조건

참조: spec §4.6

의존: F-014

  • 3턴 대화 (상대-나-상대), "나" 줄 시각 강조
  • 3개 mp3 순차 재생 (delegate 체인, 0.8초 간격)
  • 현재 줄 강조 + "재생 중" 배지 (파형 SVG)
  • 중간 정지 가능
F-016
Actions Sheet + Delete Confirm
참조 · 의존 · 수용 조건

참조: ux P05a

의존: F-013

  • ⋯ → Actions Sheet (씨앗 정보 미리보기 + 액션 그룹)
  • "씨앗 삭제" → Delete Confirm
  • 삭제 시 모든 Collection에서 제거 + 카드 자체 삭제
F-017
주머니에 담기 시트 (다대다 토글)
참조 · 의존 · 수용 조건

참조: spec §4.3 다대다

의존: F-003, F-016

  • 주머니 목록 + 체크박스 + 색상 도트
  • "여러 주머니에 동시에 담을 수 있어요" 안내
  • 토글 시 즉시 반영 (낙관적 업데이트)
F-018
Categories Sheet (다중 분류)
참조 · 의존 · 수용 조건

참조: spec §4.2 카테고리

의존: F-013

  • 8개 카테고리 다중 체크
  • "여러 분류에 동시에 담을 수 있어요" 안내
  • 씨앗 상세에 칩으로 반영
F-019
새 주머니 만들기 시트
참조 · 의존 · 수용 조건

참조: ux P08

의존: F-003, F-009

  • 이름 30자 제한, 색상 6개, 표지(자동/아이콘/사진)
  • 미리보기 타일
  • 저장 시 Collection 생성 + 홈에 반영
F-020
Collection Detail 화면 + 전체 재생
참조 · 의존 · 수용 조건

참조: ux P04

의존: F-008, F-014

  • 주머니 메타 헤더 + 인라인 이름 편집
  • "전체 재생" 버튼 (씨앗 사이 간격)
  • 씨앗 행 리스트 → 탭 시 Card Detail
  • ⋯ → 편집/공유/삭제 시트
F-021
2단 필터 + 전역 검색
참조 · 의존 · 수용 조건

참조: spec §4.7

의존: F-008

  • 언어·카테고리 칩 (AND, 재탭 해제, 초기화 버튼)
  • 검색 화면: 외국어/발음/한국어/주머니명 매칭, 강조 표시
  • 결과 0 빈 상태 카피
F-022
스크린샷 입력 — Source Sheet + Detect
참조 · 의존 · 수용 조건

참조: ux P06c

의존: F-009

  • Source Sheet: PHPicker · UIImagePickerController · 클립보드
  • Detect: 다크 뷰어 + OCR 오버레이 (1차: 백엔드 mock OCR 사용)
  • 영역 토글 + 전체 선택/해제
  • "다음" 버튼으로 Confirm 진입
F-023
스크린샷 입력 — Confirm + 일괄 처리
참조 · 의존 · 수용 조건

참조: ux P06c3

의존: F-012, F-022

  • 담을 씨앗 미리보기 + 일괄 옵션(언어/톤/카테고리)
  • 항목별 삭제
  • 완료 시 N개 동시 변환 → "N개 씨앗을 담는 중…"
  • 전체 일일 볼주머니 카운트 +N
F-024
음성 입력 (SFSpeechRecognizer)
참조 · 의존 · 수용 조건

참조: spec §4.1

의존: F-009

  • SFSpeechRecognizer 온디바이스 인식
  • 마이크 권한 요청 + 거부 시 fallback 메시지
  • 녹음 중 펄스 애니메이션
  • 변환된 텍스트 편집 가능
F-025
오프라인 검출 + 가득 상태 + 마일스톤 토스트
참조 · 의존 · 수용 조건

참조: spec §4.9, spec §4.10

의존: F-006, F-007, F-009

  • NWPathMonitor → ✈ 오프라인 배지
  • 입력 시도 시 회색 처리 + 메시지
  • 10/10 도달 시 위젯 색 변화 + 메시지
  • 50/100/500 누적 시 토스트 + 햅틱
🚧 Doing0

아직 시작한 카드가 없어요.

✓ Done0

머지된 카드가 여기로 옮겨집니다.

백로그 카드의 분할 기준

v1.1 이후 후보 (현재 백로그에 없음)