# The Party 개선사항 2. ~~## 1. 상단 메뉴 구조 및 동작 변경~~ <!-- **요청 사항** - 메뉴 순서 변경 - 동작 변경 - 동일 페이지 내 섹션으로 스크롤 이동 - 페이지 이동 ❌ - 문의 / 환불 규정 별도 페이지 이동 또는 모달/팝업 가능 **확인사항**: - ~~메인페이지에 모임 후기가 현재는 없는데 만들어야 하는 건지~~ - 아니면 https://www.thepartywell.com/parties 의 종합 파티 후기를 가져다 붙히면 되는 건지 - 문의 / 환불 규정 별도 페이지 이동 또는 모달 / 팝업 가능 **기능 선택 부탁드립니다!** **예상 기간**: 2026-01-04 작업 완료 --> **브랜치**: fix/header-and-policy-modal-updates --- ~~## 메인 비쥬얼 영역 Hero 섹션 변경 ~~ ![스크린샷 2025-12-26 153016](https://hackmd.io/_uploads/BJtc3ojQbl.png) <!-- **요청 사항** - 히어로 섹션 높이 조정 - 바로 아래 **이번 주 모임 섹션 진입 화살표** 가 함께 보이도록 조정 > 이번주 마감 임박 모임 ! **확인 사항** 위의 히어로 섹션 밑에 표시된 부분 처럼 추가하면 되는지 ![스크린샷 2025-12-26 153656](https://hackmd.io/_uploads/HkkJk3iXWg.png) 클릭 시 이 부분으로의 이동이 맞나요? ![스크린샷 2025-12-26 154101](https://hackmd.io/_uploads/Hk0Z0ooQ-x.png) **예상 기간**: 2026-01-04 작업 완료 --> **브랜치**: fix/hero-section --- <!-- ## ~~메인 파티 리스트 섹션~~ ~~**요청 사항**~~ ~~- 기존의 파티 카드 UI 유지~~ ~~- 각 파티 카드에 1~2줄 짧은 설명 텍스트 필드 추가~~ ~~**확인 사항**~~ <!-- ~~![스크린샷 2026-01-02 112713](https://hackmd.io/_uploads/SkWf6sEV-g.png)~~ --> ~~**예상 기간**: ~~ ~~**브랜치**: ~~ --- ~~## 하단 섹션 - 이번 달의 추천 모임~~ **요청 사항** - 현재 ‘어떤 만남을 원하시나요?’ 구조와 동일 / 이미지는 번갈아가며 배치 **확인 사항** - 피그마 확인 부탁드립니다. **예상 기간**: **브랜치**: fix/featured-parties-section 섹션 제목이랑 설명은 대표님께서 설정 부탁드립니다 현재는 애니메이션 제거 작업만 들어간 상태이고 관리자 페이지 기능 추가는 프론트 작업 마치고 들어가도록 하겠습니다 --- --> ~~## 파티 상세 페이지 접근 방식 수정~~ **확인 사항** <!-- ![스크린샷 2025-12-26 112324](https://hackmd.io/_uploads/Skm2Wdi7Zl.png) - https://www.thepartywell.com/parties/category/dopamine/the-cats 이 부분인지 - https://www.thepartywell.com/parties/category/dopamine/thereal/booking 이 부분인지 확인 해주시면 감사하겠습니다 - 노션 요구 사항 중 "스크롤과 무관하게 하단 플로팅 버튼 유지 (기존 방식 유지)" 이 부분 때문에 어떤 페이지 말씀하시는 건지 식별이 어렵습니다 **예상 기간**: --> **브랜치**: fix/weekly-partiesitem-navigate --- ## 신청 → 결제 전환 구간 이슈 (크리티컬) ### 결제 버튼 클릭 이슈 **요구 사항** - 로딩 상태 처리 - 비활성화 처리 - 간헐적으로 클릭되지 않는 문제 해결 - 중복 클릭 방지 - 사이즈 별 테스트 - 에러 메시지 노출 **확인 사항** ![스크린샷 2025-12-26 160557](https://hackmd.io/_uploads/BJpZEho7-e.png) - 문제 발생하는 부분이 맞나요? **예상 기간**: **브랜치**: --- ~~## 얼리버드 종료 문구 수정~~ <!-- **요구 사항** - 얼리버드 종료 문구 수정 => 현재 상태 안내 문구로 변경 **확인 사항** 예시) ![스크린샷 2026-01-02 115008](https://hackmd.io/_uploads/BJ-uf3EEZg.png) **예상 기간**: --> **브랜치**: fix/earlybird-banner 추가로 우선 쿠폰 입력 시 무조건 대문자로 입력되게 처리했습니다 확인 부탁드립니다 --- <!-- ## 후기 섹션 - 카드형 후기 리스트 **확인 사항** - 페이지 하단 섹션이라고 하셨는데 어떤 페이지인지 모르겠습니다 - 피그마에 후기 섹션 존재하는데 확인 부탁드립니다 ![스크린샷 2025-12-26 160445](https://hackmd.io/_uploads/rka973om-x.png) **예상 기간**: **브랜치**: --> --- ## 결제 페이지 쿠폰 적용 개선 **요청 사항** - 내 쿠폰 영역 추가 - 적용 가능한 쿠폰만 활성화 표시 - 적용 불가 쿠폰 사유 표시 - 적용된 쿠폰 표시 and 적용 취소 - 하단 기존 코드 입력 섹션 유지 (대소문자 무관하게 처리) **예상 기간**: **브랜치**: --- ## 이탈 방지 팝업 ### 1.결제 페이지 이탈 감지 **예상 기간**: **브랜치**: ### 2.비활성 사용자 감지 **예상 기간**: **브랜치**: --- ## 이탈 사용자 리마인더 알림 **예상 기간**: **브랜치**: --- # 1+1 동행자 정보 입력 시스템 분석 ## 문제 정의 **핵심 문제**: 1+1 구매 시 동행자 정보를 입력할 곳이 없음 - 구매자가 결제 후 "이게 끝인가?" 하는 불완전한 느낌 - 동행자 정보 수집이 수동(카톡 답장)으로 이루어짐 - 설문 미완료자에 대한 자동 알림 시스템 부재 --- ## 현재 시스템 분석 ### 1. 1+1 구매 흐름 ``` PaymentPage.tsx에서 participation_type = 'double' 선택 → 2인 가격으로 결제 (doubleEvent.regular/earlyBird) → party_participants에 1건 생성 → 구매자만 설문 진행 (동행자 정보 수집 없음) ``` ### 2. 현재 동행자 정보 수집 방식 `PartyReminderModal.tsx`에서 수동으로 알림톡 발송: ```typescript ...(sendTarget === 'double' ? { preparation1: '동행자 성함/생년월일/성별/전화번호 를 답장해주세요', preparation2: '동행자와 같이 오셔야 입장 가능하십니다.', } : {}), ``` **문제점**: - 관리자가 수동으로 발송해야 함 - 카톡 답장을 수동으로 확인/입력해야 함 - 누락 가능성 높음 ### 3. DB 스키마 (party_participants) ```sql -- 이미 게스트 필드 존재 guest_name VARCHAR guest_phone VARCHAR guest_gender VARCHAR is_guest BOOLEAN ``` → **동행자 정보 저장을 위한 스키마는 이미 준비됨** ### 4. 설문 시스템 (user_survey_responses) ```sql survey_stage: 'pre_payment' | 'post_payment' | 'completed' survey_responses: JSON[] ``` - `PartySurveyModal.tsx`: 약 1,533줄의 완성된 설문 모달 - `surveyMode`: pre_payment, post_payment, full 지원 --- ## 옵션 비교 분석 ### Option A: 동행자가 직접 등록 ``` 구매자 결제 완료 → 동행자에게 알림톡 발송 (전화번호 필요) → 동행자가 링크 클릭 → 동행자 회원가입/로그인 → 동행자 설문 완료 ``` | 장점 | 단점 | |------|------| | 동행자 본인 정보 정확성 | 동행자 전화번호를 먼저 받아야 함 | | 동행자도 회원으로 확보 | 동행자가 가입 안 할 수 있음 | | 각자 설문으로 정확한 매칭 | 구매자 입장에서 "끝"이 아님 | ### ~~Option B: 구매자가 동행자 정보 입력~~ ``` 구매자 결제 완료 → 본인 설문 완료 → "동행자 정보 입력" 단계 추가 → 동행자 기본 정보 입력 (이름, 전화번호, 성별, 생년월일) → 완료! (구매자 관점에서 명확한 종료) ``` | 장점 | 단점 | |------|------| | 구매자가 "완료" 느낌 확실히 받음 | 동행자 정보 정확성 다소 떨어질 수 있음 | | 추가 회원가입 불필요 | 동행자 회원 확보 불가 | | 즉시 정보 수집 완료 | 동행자 성향/취향 정보는 제한적 | | 기존 guest 필드 활용 가능 | - | --- ## 권장 구현 방안 ### Phase 1: 동행자 정보 입력 UI 추가 **위치**: 설문 완료 후 (participation_type === 'double'일 때만) ```tsx // PartySurveyModal.tsx 또는 새 CompanionInfoModal.tsx if (participationType === 'double' && surveyStage === 'completed') { return <CompanionInfoForm onComplete={handleCompanionComplete} />; } ``` **수집 필드**: - 동행자 성함 (필수) → `guest_name` - 동행자 전화번호 (필수) → `guest_phone` - 동행자 성별 (필수) → `guest_gender` - 동행자 생년월일 (선택) **저장 위치**: ```sql UPDATE party_participants SET guest_name = ?, guest_phone = ?, guest_gender = ?, is_guest = false WHERE id = ? AND participation_type = 'double'; ``` ### Phase 2: 설문 미완료자 자동 알림 **대상**: 결제 완료 + 설문 미완료자 **구현 방식**: 1. **Supabase Edge Function (Cron Job)** (구현 편한 방식으로 진행) ```typescript // supabase/functions/survey-reminder/index.ts // 매일 오전 10시 실행 // 결제 후 24시간 경과 + 설문 미완료자 조회 const incompleteSurveys = await supabase .from('party_participants') .select('*, profiles!inner(*)') .eq('status', 'confirmed') .is('survey_completed_at', null) .lt('payment_confirmed_at', dayjs().subtract(24, 'hours').toISOString()); // 알림톡 발송 for (const participant of incompleteSurveys) { await sendKakaoNotification({ phone: participant.profiles.phone, template: 'SURVEY_REMINDER', variables: { name: participant.profiles.name, partyName: participant.party.name, deadline: '파티 3일 전까지', warning: '미작성 시 참여가 취소될 수 있습니다.' } }); } ``` 2. **알림 단계** - D+1: 부드러운 리마인더 ("설문을 아직 작성하지 않으셨어요") - D+3: 경고 ("설문 미작성 시 참여가 취소될 수 있습니다") - D+5 (파티 3일 전): 최종 경고 ("오늘까지 미작성 시 자동 취소됩니다") 3. **DB 필드 추가** ```sql ALTER TABLE party_participants ADD COLUMN survey_completed_at TIMESTAMP, ADD COLUMN survey_reminder_sent_at TIMESTAMP, ADD COLUMN survey_reminder_count INTEGER DEFAULT 0; ``` --- ## 구현 우선순위 | 순위 | 기능 | 예상 공수 | 영향도 | |------|------|----------|--------| | 1 | 동행자 정보 입력 폼 추가 | 4h | 높음 | | 2 | 설문 완료 후 동행자 입력 연동 | 2h | 높음 | | 3 | 설문 미완료자 조회 API | 2h | 중간 | | 4 | 자동 알림 Edge Function | 4h | 중간 | | 5 | 알림 발송 이력 관리 | 2h | 낮음 | **총 예상 공수**: 약 14시간 (2일) --- ## 관련 파일 목록 ### 수정 필요 - `apps/web/src/components/booking/PartySurveyModal.tsx` - 동행자 입력 단계 추가 - `apps/web/src/pages/PaymentPage.tsx` - 결제 후 플로우 조정 ### 신규 생성 - `apps/web/src/components/booking/CompanionInfoForm.tsx` - 동행자 정보 입력 폼 - `supabase/functions/survey-reminder/index.ts` - 자동 알림 Edge Function ### DB 마이그레이션 - `survey_completed_at`, `survey_reminder_sent_at`, `survey_reminder_count` 컬럼 추가 --- ## 결론 **Option B (구매자가 동행자 정보 입력)** 권장 이유: 1. 구매자 UX 개선 - "완료" 느낌 명확 2. 기존 DB 스키마 활용 가능 (`guest_*` 필드) 3. 추가 회원가입 프로세스 불필요 4. 즉시 정보 수집 완료 **추가 기능**: 설문 미완료자 자동 알림 시스템으로 참여율 향상 유저가 1+1 결제 -> 결제 완료 -> 동행자 정보 입력 -> 동행자에게 알림톡 -> 동행자 회원가입 -> 동행자 계정으로 정보 입력 유저가 1+1 결제 -> 결제 완료 -> 동행자 정보 미입력 -> 결제 유저에게 알림톡 -> 취소 유저가 1+1 결제 -> 결제 완료 -> 동행자 정보 미입력 -> 결제 유저 알림톡 -> 동행자 정보 입력 -> 동행자에게 알림톡 발송 -> 동행자 회원가입 -> 동행자 계정으로 정보 입력. 설문 미완료자 알림톡 + 로그인시 설문 알림 모달 ## 정보 입력 유효성 검사가 없음.