- YouTubeAudit: '재생목록' chip 을 원본(흰색 단순 chip, Play 아이콘 제거)으로 복원
- AssetCollection: Top Videos for Repurposing 가로 스크롤바 hide 제거
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- pickRandomIndex → pickIndex(PINNED_LABEL) 로 변경, 항상 뷰성형외과 선택.
- "다른 병원 랜덤" 버튼·seed state 제거 (의미 없어짐).
- CLINICS 의 나머지 9개 fixture 는 mockUrls.ts 에 그대로 보존.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- AnalysisLoadingPage 가 /report/loading?run_id=xxx 쿼리도 path param 과 동일하게
resume 트리거로 인식. createClinic·startAnalysis 재호출 없이 폴링만 재개.
- startAnalysis 성공 후 replaceState 를 path 가 아닌 ?run_id= 쿼리로 갱신해
새로고침·공유·뒤로가기 모두 동일한 resume 흐름을 탄다.
- ky 의 60s 글로벌 timeout 을 끔. createClinic 처럼 백엔드가 외부 크롤·LLM 을
동기로 호출하는 엔드포인트는 60s 안에 끝난다는 보장이 없어 클라이언트에서
timeout 으로 끊으면 안 됨 (폴링은 어차피 짧음).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
서버에 .env 만들어도 .dockerignore 의 .env* 패턴에 막혀 빌드에 안 들어가던 문제 해결.
.env.local 같은 개인 파일은 여전히 제외.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
서버 빌드에 .env 가 없어서 dev 라우트 가드가 막던 문제 해결.
운영 빌드에서 막으려면 --build-arg VITE_ENABLE_DEV_ROUTES=false.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- KPIDashboard / PlanCTA: 단일 다운로드 버튼 → DropdownMenu(PDF로 저장 / CSV로 저장)
- useExportPlanCSV / useExportCSV: '=== Section ===' 헤더 → 빈 행 + 섹션 제목 행 구분
(Excel/Numbers 에서 자연스럽게 보이도록)
- 캘린더 dayOfWeek 인덱스(0~6) → 한글 요일(월~일) 출력
- @media print 규칙에 Radix popper / role=menu·dialog·tooltip 숨김 추가
→ '리포트/플랜 다운로드' 드롭다운이 열린 채 window.print() 호출돼도 캡처에서 제외
- PLAN_SECTIONS 에서 workflow-tracker(제작 파이프라인) 주석 처리
- BrandingGuide: BrandAppliedPreview ('Brand in Action') 렌더링·import 주석처리
- ClinicSnapshot: '인증 및 자격' chip 을 원본 디자인(흰색 단순 chip, BadgeCheck 아이콘 제거)으로 복원
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- orval SDK 재생성:
· generated/plans → generated/plan, generated/reports → generated/report
· planOutput → planApiResponse (clinicName/clinicNameEn/screenshots 등 메타 포함)
· reportOutput → marketingReportResponse (clinicSnapshot 등 풍부한 스키마 복원)
· clinicSnapshot, screenshotEvidence, transformationProposal, websiteAudit 등 모델 신설
· clinicListResponse, fileUploadResponse 등 운영/업로드 모델 신설
- useMarketingPlan / useReport: SDK 응답을 사실상 그대로 패스스루 (메타 매핑 단순화)
- transformReport: 신 SDK 모델 시그니처 반영
- plan 페이지 통합: GuestPlanPage + UserPlanPage → 단일 PlanPage 로 합치고 routes 갱신
- dev 페이지 (ClinicsPage / routes) 갱신
- MyAssetUpload 컴포넌트 + constants 업데이트
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Guest/User × Plan/Report 4개 페이지 상단 ReportNav 의 leftSlot('클리닉으로')과
rightSlot 의 다운로드 메뉴 버튼 제거. UserReportPage 의 '다시 분석' 버튼은 유지.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
a294637 에서 개발 편의용으로 들어간 DEFAULT_URLS (뷰성형외과 URL 사전 채움)
를 EMPTY_URLS 로 복원. 운영 빌드에 특정 병원 URL 이 노출되지 않도록.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- DEMO_PLANS / DEMO_REPORTS / DEMO_HANDLES 분기 제거
- mockPlan_* / mockReport_* import 제거 (데이터 파일 자체는 유지)
- nav state 의 report / metadata 의존 경로 제거
- createdAt 의 `new Date().toISOString()` fallback 제거 (백엔드 응답 없으면 빈 문자열)
- clinicName / targetUrl 등 메타도 nav state 우회 제거
새로고침·북마크·직접 URL 진입에서도 동일하게 동작하도록 API 응답에만 의존.
백엔드 응답에 메타 필드 없으면 빈 칸으로 표시됨 (백엔드 측 수정 필요).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
useMarketingPlan 이 getReport(id) + transformReportToPlan 으로 우회하던 코드를
getPlan(id) 직접 호출로 변경. PlanOutput 에 없는 메타 필드(id/clinicName/
targetUrl/createdAt 등)는 nav state metadata 또는 빈 값으로 채움.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
GET /api/clinics 응답을 표로 보는 dev 전용 페이지 추가.
/dev/* 경로 전체를 DevOnly layout route 로 감싸 로컬호스트
(localhost/127.0.0.1/0.0.0.0/::1) 외 도메인에선 자동으로
루트로 리다이렉트.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
api.ts 가 orval mutator 로 esbuild 에 의해 cjs 번들될 때 `import.meta` 가
빈 객체로 처리되어 SDK 재생성 로그에 경고가 계속 떴음. vite `define` 으로
빌드 타임에 글로벌 상수로 치환하는 방식으로 우회.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>