A-01 | 사용자 분기 페이지 | 사장님,손님 | 사장님 / 손님 역할 선택 | 사용자 역할(사장님,손님) 분기 A-02 | 로그인 페이지 | 사장님,손님 | 계정 인증 | 소셜 로그인(카카오) A-03 | 온보딩/튜토리얼 페이지 | 사장님,손님 | 첫 사용자가 앱의 사용법을 쉽게 알기 위함 | 서비스 주요 기능 안내 C-01 | 사전 피드백 페이지 | 손님 | 고객의 입맛 프로필 수집 | 평소 맵기, 식사량, 지출 금액 선택 C-02 | 가게(메뉴) 리스트 페이지 | 손님 | 피드백 가능한 가게(메뉴) 탐색 | 가게(메뉴) 목록 표시, 검색/필터 기능 C-03 | 메뉴 세부 페이지 | 손님 | 선택한 메뉴 상세 정보 확인 | 메뉴 정보(설명, 사진 등), 피드백 작성 신청, 타 배달 플랫폼으로 연결 C-04 | 주문 인증 페이지 | 손님 | 실제 주문 여부 검증 | 영수증 사진 업로드 C-05 | 사후 피드백 페이지 | 손님 | 메뉴에 대한 세부 평가, 사용자의 속에 있는 진실된 내용을 끌어내고자 함 | 맛, 양, 가격 평가, 재주문, 추천의향 수집 C-06 | 피드백 작성 마무리(한마디) 페이지 | 손님 | 사장님께 전달할 메시지 작성 | 사장님께 한마디(30자 이상) C-07 | 마이페이지 | 손님 | 개인정보 및 리워드 관리 | 피드백 작성 내역, 적립 횟수 확인, 리워드 교환 신청 C-08 | 피드백(선택한 메뉴) 내역 조회 페이지 | 손님 | 선택한 메뉴 조회 C-09 | 작성한 피드백 이력 확인 | 피드백을 남기기 위해 선택한 메뉴들 리스트를 확인, 날짜별 작성 내역, 승인대기 상태 표시 C-10 | 리워드 페이지 | 손님 | 피드백을 남긴 횟수에 따른 리워드 교환 및 관리 | 현재 적립 횟수 표시, 상품권 교환 신청, 교환 내역 확인 C-11 | 피드백 완료 페이지 | 손님 | 자신의 의견이 가게에 반영되었다는 것을 느끼게 함 | 사용자의 피드백이 완료되었음을 알림 O-01 | 사장님 대시보드/홈 페이지 (마이페이지) | 사장님 | 전체 현황 파악 | O-02 | 가게(메뉴) 조회 페이지 | 사장님 | 피드백 받기 위해 등록한 가게(메뉴) 조회 | 등록한 가게(메뉴) 리스트 O-03 | 가게(메뉴) 등록 페이지 | 사장님 | 피드백 받기 위한 가게(메뉴) 등록 | 메뉴 정보 입력(메뉴명, 가격, 설명, 사진 등) O-04 | 가게(메뉴) 수정 페이지 | 사장님 | 피드백 받기 위한 가게(메뉴) 수정 | O-05 | 가게(메뉴) 세부 페이지 | 사장님 | 피드백 받기 위한 가게(메뉴) 상세 조회 | 등록한 가게(메뉴) 정보 단순 조회 O-06 | 음식 별 통계/분석 리포트 페이지 | 사장님 | 피드백 받은 결과 조회 | 종합 통계 분석(항목펼 평균 점수 및 분포, 재주문 및 추천의향률), 텍스트 형태 개선 제안, 리포트 다운로드 O-07 | 마이페이지(대시보드/홈페이지로 통합?) | 사장님 | | O-08 | 가게 등록 페이지 | 사장님 | 사장님 가게 등록 | 가게 이름, 가게 주소, 가게 설명 입력 O-09 | 가게 수정 페이지 | 사장님 | 사장님 가게 수정 | 가게 이름, 가게 주소, 가게 설명 수정
src/app/ ├── globals.css ├── layout.tsx # 루트 레이아웃 ├── page.tsx # 메인 페이지 (사용자 분기 페이지) ├── (auth)/ # Route Group - 인증 관련 │ └── login/ # 카카오 로그인 │ └── page.tsx ├── customer/ # 손님 전용 페이지 │ ├── page.tsx # 손님 홈 │ ├── menu/ │ │ ├── page.tsx # 가게-메뉴 목록 │ │ └── [foodId]/ │ │ └── page.tsx # 메뉴 상세 │ ├── feedback/ │ │ └── add/ # 피드백 작성 │ │ └── page.tsx │ ├── mypage/ │ │ └── page.tsx # 마이페이지 │ ├── history/ # 피드백 내역 │ │ └── page.tsx │ └── rewards/ # 리워드 │ └── page.tsx └── owner/ # 사장님 전용 페이지 ├── page.tsx # 대시보드/홈 ├── onboarding/ # 온보딩 │ └── page.tsx ├── store/ │ ├── page.tsx # 가게 관리 │ ├── add/ # 가게 등록 │ │ └── page.tsx │ └── [storeId]/ │ └── page.tsx # 가게 상세 ├── menu/ │ ├── page.tsx # 메뉴 목록 │ ├── add/ # 메뉴 등록 │ │ └── page.tsx │ └── [foodId]/ │ ├── page.tsx # 메뉴 상세 │ ├── edit/ # 메뉴 수정 │ │ └── page.tsx │ └── analytics/ # 통계 분석 │ └── page.tsx ├── feedbacks/ # 피드백 관리 │ └── page.tsx └── mypage/ └── page.tsx # 마이페이지
src/components/ ├── ui/ # shadcn/ui 컴포넌트 ├── customer/ # 손님 전용 컴포넌트 ├── owner/ # 사장님 전용 컴포넌트 └── common/ # 공통 컴포넌트
src/lib/ ├── auth.ts # 인증 관련 유틸 ├── api.ts # API 클라이언트 ├── utils.ts # 공통 유틸리티 └── types.ts # TypeScript 타입 정의
src/stores/ ├── auth.ts # 공통 인증 상태 ├── customer.ts # 손님 관련 상태 ├── owner.ts # 사장님 관련 상태 └── survey.ts # 설문 진행 상태
- 필요 데이터: 없음 (단순 선택 화면)
- 사용자 입력: 역할 선택 (customer/owner)
- 다음 동작: 선택한 역할에 따라 로그인 페이지로 이동
- 필요 데이터: 카카오 앱 키, 리다이렉트 URI
- 사용자 입력: 카카오 계정 인증
- API: POST /auth/kakao/login
- 응답 데이터: accessToken, refreshToken, 사용자 정보
- 필요 데이터: 튜토리얼 단계별 콘텐츠 (제목, 설명, 이미지)
- 사용자 입력: 다음/건너뛰기 버튼 클릭
- 완료 시: isOnboarded 상태 업데이트
- API:
- GET /customer/taste-profile (기존 프로필 조회)
- POST /customer/taste-profile (프로필 저장/수정)
- 필요 데이터: 사용자의 기존 입맛 프로필 (있는 경우)
- 사용자 입력:
- 맵기 선호도 (1-5)
- 식사량 (1-4)
- 예산 범위 선택
- 저장 위치: DB 저장 + 피드백 플로우 전달
- API: GET /customer/restaurants
- 필요 데이터:
- 가게 목록 (이름, 주소, 이미지)
- 각 가게의 메뉴 리스트 (각각 보여주는 게 아닌 한꺼번에 여러 가게의 메뉴들 보여줌)
- 피드백 가능 슬롯 수
- 카테고리 목록
- 사용자 입력: 검색어, 카테고리 필터
- API: GET /customer/restaurants/{id}/menus/{menuId}
- 필요 데이터:
- 메뉴 상세 정보 (이름, 가격, 설명, 이미지)
- 가게 정보
- 배달 플랫폼 링크 (클라이언트에서 제공)
- 사용자 액션: 피드백 신청, 배달앱 연결
- 필요 데이터: 선택한 메뉴/가게 정보 (이전 단계에서 전달)
- 사용자 입력:
- 영수증 사진 업로드
- API: POST /upload/image (영수증)
- 필요 데이터: 이전 단계 데이터 (메뉴, 가게, 사전 피드백)
- 사용자 입력:
- 맛 평가 (맵기, 짠맛, 단맛, 신맛)
- 양, 가격 평가
- 전반적 만족도
- 재주문 의향 (0-10)
- 추천 의향 (0-10)
- API: POST /upload/image (음식 사진)
- 필요 데이터: 이전 단계 모든 데이터
- 사용자 입력: 텍스트 피드백 (30자 이상)
- API: POST /customer/feedback/submit (전체 피드백 제출)
- API: GET /customer/mypage
- 필요 데이터:
- 사용자 정보
- 피드백 요약 (제출/승인/대기/반려 수)
- 리워드 현황
- API: GET /customer/feedbacks
- 필요 데이터:
- 피드백 목록
- 피드백을 위해 선택한 메뉴 목록
- 상태별 필터
- 사용자 입력: 필터 선택, 페이지네이션
- API: GET /customer/feedbacks (상세 보기)
- 필요 데이터: C-08과 동일 (상세 뷰)
- API:
- GET /customer/rewards
- POST /customer/rewards/redeem
- 필요 데이터:
- 적립 현황
- 교환 가능 상품권 목록
- 교환/적립 내역
- 사용자 액션: 상품권 교환 신청
- 필요 데이터:
- 제출된 피드백 정보
- 적립된 리워드
- 총 리워드 수
- 사용자 액션: 홈으로 이동
- API: GET /owner/dashboard
- 필요 데이터:
- 사장님 정보(등록된 메뉴, 가게 이름 등)
- 전체 통계 (피드백 수, 고객 수)
- API: GET /owner/restaurants
- 필요 데이터:
- 내 가게의 등록한 메뉴 목록
- 필요 데이터: 없음 (신규 등록)
- 사용자 입력:
- 메뉴: 이름, 가격, 설명, 이미지
- API:
- POST /owner/restaurants
- POST /owner/restaurants/{id}/menus
- API:
- GET /owner/restaurants/{id} (기존 데이터 조회)
- PUT /owner/restaurants/{id}
- PUT /owner/menus/{menuId}
- 필요 데이터: 기존 (메뉴) 정보
- 사용자 입력: O-03과 동일 (수정 모드)
- API: GET /owner/restaurants/{id}/menus
- 필요 데이터:
- 메뉴 상세 정보(사진, 이름, 가격, 설명)
- 메뉴의 피드백 요약
- 사용자 액션: 상세 통계(O-06)
- API: GET /owner/menus/{menuId}/analytics
- 필요 데이터:
- 통계 데이터
- 필요 데이터: O-01 대시보드와 통합 예정
- 필요 데이터: 없음
- 사용자 입력: 가게 이름, 주소, 설명
- API: POST /owner/restaurants
- API:
- GET /owner/restaurants/{id}
- PUT /owner/restaurants/{id}
- 필요 데이터: 기존 가게 정보
- 사용자 입력: 가게 이름, 주소, 설명 수정