Skip to content

Tok-Baro/cookdoc

Repository files navigation

Cookdoc

Cookdoc는 음식 검색을 시작점으로 삼아 변형, 스타일, 유튜버별 차이, 댓글 기반 팁을 비교하고 조리까지 이어주는 iOS 앱입니다.

기술 스택

  • Swift
  • SwiftUI
  • Observation (@Observable)
  • async/await 기반 서비스 호출

현재 제품 방향

  • 홈: 추천 음식과 스타일 기반 진입
  • 검색: V2 음식명 검색, 즐겨찾기, 변형/스타일/유튜버 비교
  • 조리: V2 steps 기반 단계 진행, 타이머, action type, 핸즈프리 음성 명령, 채팅
  • 기록: 조리 이력 및 평점
  • 설정: AI 모델, 알림, 마이페이지

제외된 흐름

  • 바코드 스캔
  • 영수증/OCR 재료 등록
  • 수동 재료 보관 관리
  • 사용자의 레시피 직접 등록
  • 영상 링크 추가를 첫 화면의 핵심 UX로 두는 방식

프로젝트 구조

  • Cookdoc/CookDoc-iOS/Config: 앱 설정
  • Cookdoc/CookDoc-iOS/Models: API/도메인 모델
  • Cookdoc/CookDoc-iOS/Services: 네트워크 서비스 계층
  • Cookdoc/CookDoc-iOS/ViewModels: 화면 상태/로직
  • Cookdoc/CookDoc-iOS/Views: 화면 UI
  • Cookdoc/CookDoc-iOS/Voice: 음성 인식/합성
  • Cookdoc/CookDoc-iOS/Timer: 조리 타이머
  • Cookdoc/CookDoc-iOS/MockData.swift: 목업 데이터

실행 방법

  1. Xcode에서 프로젝트 열기
  2. 스킴 선택 후 실행 (Cmd + R)

CLI 테스트:

DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer \
  xcodebuild test -project Cookdoc.xcodeproj -scheme Cookdoc \
  -destination 'platform=iOS Simulator,name=iPhone 17,OS=26.5'

환경 변수

AppConfig.swift에서 아래 환경 변수를 읽습니다.

  • COOKDOC_MOCK_MODE

    • 기본값: false (값이 true일 때만 목업 모드)
    • true: 네트워크 호출 없이 MockData 사용
    • false: 실제 API 호출
  • COOKDOC_BASE_URL

    • 기본값: https://3-36-71-170.nip.io
    • API 서버 주소

V2 API 흐름

  • 음식 검색: GET /api/v2/dishes/search?q={query}
  • 음식 상세/variant: GET /api/v2/dishes/{dish_id}
  • 유튜버별 비교: GET /api/v2/dishes/{dish_id}/creators
  • 레시피 목록: GET /api/v2/dishes/{dish_id}/recipes?variant_id=&creator_id=&style_tags=&sort=quality_score
  • 레시피 상세: GET /api/v2/recipes/{recipe_id}
  • 조리 단계: GET /api/v2/recipes/{recipe_id}/steps

유튜버별 비교는 채널명과 썸네일/이니셜 아바타로 보여주며, youtube:UC... 원시 id는 UI에 직접 노출하지 않습니다. 레시피 상세나 조리 단계 요청이 늦어져도 목록에 포함된 completed V2 steps가 있으면 조리모드는 즉시 embedded 데이터로 시작합니다.

V3 v3_* 데이터는 lab 전용이며 앱에서 직접 호출하지 않습니다.

  • COOKDOC_VOICE_DEBUG

    • 기본값: false
    • true: [VOICE] 접두사 로그 출력 (STT/TTS/명령 흐름 추적)
  • COOKDOC_OFFLINE_VOICE_ASSISTANT

    • 기본값: true (값이 false가 아니면 활성)
    • true: 네트워크 불안정 시 로컬 어시스턴트 응답 우선
    • false: 서버 응답만 사용
  • COOKDOC_WAKE_WORD

    • 기본값: false (값이 true일 때만 활성)
    • true: 웨이크워드(쿡독) 기반 명령 게이트 활성
    • false: 핵심 조리 명령 직접 인식

음성 제어

  • 기본 동작: 요리 화면 진입 시 음성 제어 자동 시작
  • STT: 부분 인식 기반, 무음 약 2초 후 문장 확정
  • TTS: 단계/타이머/응답 안내를 한국어 음성(ko-KR)으로 재생
  • 조작 모드: 모두 / 음성만 / 터치만 / 제스처

주요 음성 명령:

  • 이동: 다음 단계, 다음 거, 넘겨, 이전 단계, 처음부터, 3단계로
  • 읽기: 다시 읽어, 재료 알려줘
  • 타이머: 타이머 시작, 타이머 멈춰, 타이머 재개, 얼마 남았어
  • 채팅: 채팅 열어, 채팅 닫아, 질문 ...
  • 평가: 별점 5점, 평가 남기기

Git

git remote -v
git status
git log --oneline -n 5

캡스톤 심사 안내

  • 심사용 상세 안내: CAPSTONE_REVIEW_GUIDE.md
  • 핵심 시연 흐름: 홈 추천 → 탐색/비교 → 레시피 상세 → 요리 시작 → TTS/음성 명령/타이머 → 완료/평점
  • 최종 검증 기준: iPhone 17 / iOS 26.5 Simulator 기준 전체 테스트 통과

참고

  • 앱 진입점: Cookdoc/CookDoc-iOS/CookDocApp.swift
  • 목업/실서비스 분기: AppConfig.isMockMode

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages