Commit Graph

33 Commits (f74e74a45bfa05c268a97a1ee419f5b8f4f75fdc)

Author SHA1 Message Date
Mina Choi f74e74a45b revert: YouTube 재생목록 chip 원본 디자인으로 복원 + repurpose 스크롤바 표시
- YouTubeAudit: '재생목록' chip 을 원본(흰색 단순 chip, Play 아이콘 제거)으로 복원
- AssetCollection: Top Videos for Repurposing 가로 스크롤바 hide 제거

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 16:29:14 +09:00
Mina Choi bf90e8d242 fix(brand-consistency): 0개 불일치 → '전 채널 일치' 로 표기
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 09:21:43 +09:00
Mina Choi 68bb1d62cd dev(test): /test prefill 을 뷰성형외과 fixture 로 고정
- pickRandomIndex → pickIndex(PINNED_LABEL) 로 변경, 항상 뷰성형외과 선택.
- "다른 병원 랜덤" 버튼·seed state 제거 (의미 없어짐).
- CLINICS 의 나머지 9개 fixture 는 mockUrls.ts 에 그대로 보존.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 08:41:32 +09:00
Mina Choi da07bdc8c8 feat(report): ?run_id= 쿼리로 로딩페이지 resume + ky 타임아웃 해제
- 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>
2026-05-21 08:41:32 +09:00
Mina Choi d736e1ef77 fix: naverplace regex 수정 2026-05-20 14:06:46 +09:00
Mina Choi e9630cda4d docker-compose -> .env 읽게 2026-05-20 13:42:29 +09:00
Mina Choi d22ef5eadc build(docker): .env 을 build context 에 포함
서버에 .env 만들어도 .dockerignore 의 .env* 패턴에 막혀 빌드에 안 들어가던 문제 해결.
.env.local 같은 개인 파일은 여전히 제외.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:06:33 +09:00
Mina Choi 4b5e0a468c build(docker): VITE_ENABLE_DEV_ROUTES 빌드 ARG 기본 true 로 주입
서버 빌드에 .env 가 없어서 dev 라우트 가드가 막던 문제 해결.
운영 빌드에서 막으려면 --build-arg VITE_ENABLE_DEV_ROUTES=false.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:03:51 +09:00
Mina Choi e04e8af798 feat(dev): VITE_ENABLE_DEV_ROUTES 로 비-로컬호스트에서도 /dev/*·/test 허용
스테이징/IP 서버 빌드에서 디버그 라우트를 켤 수 있게 env flag 추가.
운영 빌드는 false 로 유지.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 11:59:32 +09:00
Mina Choi 7fb1831c91 test: Playwright e2e 셋업 + test-prefill-flow 스펙
- @playwright/test devDependency 추가
- playwright.config.ts
- e2e/test-prefill-flow.spec.ts
- .gitignore: test-results / playwright-report / .playwright 추가
2026-05-20 11:51:32 +09:00
Mina Choi a805afa39d feat(dev): /test 라우트 — URL prefill 픽스처로 분석 플로우 빠르게 검증
- TestPrefillPage: 자주 쓰는 병원 URL 묶음을 버튼 한 번에 채널 입력으로 prefill
- /dev/* 와 동일하게 DevOnly 가드 적용 (로컬에서만 접근)
2026-05-20 11:51:27 +09:00
Mina Choi 47fed51efc feat: 채널 아이콘/링크 통합 + 리포트·플랜 디자인 개선
shared 채널 아이콘 유틸:
- src/shared/icons/channelIcons.ts (resolveChannelIcon — 한글/영문 이름 모두 매핑)
- src/shared/ui/platform-icon.tsx
- channel-link-buttons.tsx 정리

리포트:
- ClinicSnapshot: 외부 채널/플랫폼 링크 버튼(ExternalLinkButtons) 노출
- ReportHeader: 기존 ChannelLinkButtons 제거 (ClinicSnapshot 으로 이관)
- ReportBody: ClinicSnapshot 에 targetUrl·socialHandles 전달, KPIDashboard 에 report 전달
- ChannelOverview: 채널 이름 정규화로 한글 채널도 아이콘/색 매칭
- TransformationProposal: 디자인 다듬기
- GuestReportPage: 하단 '도입 문의' CTA 섹션 제거

플랜:
- BrandingGuide / ChannelStrategy: 공용 resolveChannelIcon 사용으로 중복 제거
- PlanPage: PlanCTA 에 plan 전달 (CSV 내보내기용)

기타:
- MultiChannelInput: 공용 platform-icon 사용
2026-05-20 11:51:18 +09:00
Mina Choi 317cd61519 refactor: useAnalysisPipeline 시간 기반 분할 제거 → 백엔드 planning 단계 직접 매핑
기존엔 analyzing 한 단계가 길어서 30초 경과 시점에 generating → planning 으로
시간 기반 분할했지만, 백엔드가 planning 을 별도 상태로 분리하면서 불필요해짐.
2026-05-20 11:50:30 +09:00
Mina Choi 7926636c09 feat: 리포트·플랜 다운로드 버튼 → PDF/CSV 드롭다운 + CSV 포맷 Excel 친화적으로 개선
- KPIDashboard / PlanCTA: 단일 다운로드 버튼 → DropdownMenu(PDF로 저장 / CSV로 저장)
- useExportPlanCSV / useExportCSV: '=== Section ===' 헤더 → 빈 행 + 섹션 제목 행 구분
  (Excel/Numbers 에서 자연스럽게 보이도록)
- 캘린더 dayOfWeek 인덱스(0~6) → 한글 요일(월~일) 출력
2026-05-20 11:50:23 +09:00
Mina Choi 87062f76eb refactor: ContentPillar.relatedUSP → relatedUsp (백엔드 스키마 정합) 2026-05-20 11:50:14 +09:00
Mina Choi be71918644 chore: 데모용 mock 리포트/플랜 데이터 제거 + useReport 단일 경로 복원
- 데모 ID(view-clinic / banobagi / grand / wonjin / ts / irum / o2o)
  로컬 mock 분기 제거 → 모든 ID 가 백엔드 getReport() 호출로 통일
- mockReport*.ts (8개), mockPlan*.ts (7개) 삭제
2026-05-20 11:50:09 +09:00
Mina Choi edf56cefd8 fix: PDF 인쇄 시 드롭다운/팝오버 캡처 방지 + plan 메뉴에서 제작 파이프라인 제외
- @media print 규칙에 Radix popper / role=menu·dialog·tooltip 숨김 추가
  → '리포트/플랜 다운로드' 드롭다운이 열린 채 window.print() 호출돼도 캡처에서 제외
- PLAN_SECTIONS 에서 workflow-tracker(제작 파이프라인) 주석 처리
2026-05-20 11:50:02 +09:00
Mina Choi 84710f185c revert: 디자인 원복 — Brand in Action 주석 / 인증·자격 chip 단순화
- BrandingGuide: BrandAppliedPreview ('Brand in Action') 렌더링·import 주석처리
- ClinicSnapshot: '인증 및 자격' chip 을 원본 디자인(흰색 단순 chip, BadgeCheck 아이콘 제거)으로 복원

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 16:52:54 +09:00
Mina Choi e8ec9e2075 chore: clinics 페이지 갱신 (AnalysisCard / AnalysisTab / SettingsTab / ClinicProfilePage / routes)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 16:52:46 +09:00
Mina Choi 0b139714ed feat: 백엔드 신스키마 (PlanApiResponse / MarketingReportResponse) 반영 + plan 페이지 통합
- 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>
2026-05-19 16:52:39 +09:00
Mina Choi 82f166a80e chore: plan/report 페이지에서 '클리닉으로' 링크 + 다운로드 버튼 제거
Guest/User × Plan/Report 4개 페이지 상단 ReportNav 의 leftSlot('클리닉으로')과
rightSlot 의 다운로드 메뉴 버튼 제거. UserReportPage 의 '다시 분석' 버튼은 유지.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 15:36:03 +09:00
Mina Choi 3ddffd4455 fix: 채널 입력 초기값을 빈 값으로 되돌림
a294637 에서 개발 편의용으로 들어간 DEFAULT_URLS (뷰성형외과 URL 사전 채움)
를 EMPTY_URLS 로 복원. 운영 빌드에 특정 병원 URL 이 노출되지 않도록.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 15:21:59 +09:00
Mina Choi a294637644 feat: 백엔드 신스키마 (PlanOutput / 신규 analysis 라우트) 반영 + 화면·환경 적응
- orval SDK 재생성: generated/analyses → generated/analysis, planResponse* → planOutput 외 신규 모델 40여 개
- transformReport / useAnalysisPipeline 신스키마 적응
- plan/report 페이지·컴포넌트(다운로드 메뉴, ChannelOverview, ChannelStrategy, GuestPlanPage, UserPlanPage, GuestReportPage, UserReportPage, ReportBody, MultiChannelInput) 적응
- /dev/clinics 페이지 갱신
- orval.config / api.ts / package.json 환경설정 갱신
- .env.example: API 키 값 placeholder 로 비움 (이전에 실제 키가 들어있었음)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 15:19:48 +09:00
Mina Choi 93674e4856 refactor: plan/report hook 에서 mock 분기 / nav state / 시각 fallback 제거
- 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>
2026-05-18 15:04:53 +09:00
Mina Choi d85dc50bf3 fix: /plan 페이지에서 /report 대신 /plan 호출하도록 교체
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>
2026-05-18 14:18:53 +09:00
Mina Choi 670535c112 feat: /dev/clinics 페이지 + DevOnly 라우트 가드
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>
2026-05-18 10:12:16 +09:00
Mina Choi e0610df826 fix: orval mutator의 import.meta cjs 경고 제거
api.ts 가 orval mutator 로 esbuild 에 의해 cjs 번들될 때 `import.meta` 가
빈 객체로 처리되어 SDK 재생성 로그에 경고가 계속 떴음. vite `define` 으로
빌드 타임에 글로벌 상수로 치환하는 방식으로 우회.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 09:55:37 +09:00
Mina Choi 5f7e0051cd 메인페이지 원복시키기 2026-05-15 13:39:56 +09:00
Mina Choi c07ef255d4 fix: 빌드 테스트 2026-05-14 17:40:28 +09:00
Mina Choi 2fd78f48b5 fix: 제거된 파일 (channel 수정) 2026-05-14 17:36:38 +09:00
Mina Choi 327a50bd41 feat:05/14 UI/기능 변경건 커밋 2026-05-14 17:06:33 +09:00
Mina Choi 49367756ea feat: 클리닉 전용 페이지 추가, PageContainer 도입, 불필요한 ui 주석처리 2026-05-14 11:53:29 +09:00
Mina Choi e66b208318 chore: 프론트엔드 마이그레이션 + 아키텍처 정의
- 백엔드 SDK 이전: FastAPI OpenAPI → orval 자동생성 (React Query 훅 포함)
- HTTP 어댑터: ky 기반 customFetcher, fetch httpClient 시그니처
- 아키텍처: features 모듈 / shared 레이어 컨벤션 정의
- 디자인 시스템: Tailwind v4 CSS-first 토큰 (브랜드 색 / status / shadcn)
- 커스텀 CSS: utilities / animations 를 custom.css 로 분리
- Docker: 개발(Dockerfile.dev + compose) / 프로덕션(nginx) 셋업
- README: 기술 스펙 / 프로젝트 구조 / 디자인 토큰 / 폰트 / SDK 사용법 정리

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 11:38:07 +09:00