# 캠페인뷰 — 최종 승인 뷰 구현

## 긴급도: CRITICAL
제이회장님 직접 지시. 광고 집행 직전 최종 승인 단계.

## 목표
캠페인뷰 3x3 매트릭스의 각 셀(1~9번)을 클릭하면,
해당 셀의 **최종 확정된 광고 소재 전체**를 한눈에 보고 승인할 수 있는 뷰를 만든다.
9개 셀 전부 승인되면 → 실제 광고 플랫폼 업로드 단계로 진입.

## 각 셀(1~9)에서 보여줘야 할 내용

### 1. 최종 배너 미리보기
- 확정된 배너 파일 미리보기 (이미지)
- 채널별 사이즈 (Meta 1080x1080, Google 1200x628 등)
- 파일 경로 표시
- 디자인 컨셉명 (15선 중 어떤 컨셉 사용했는지)

### 2. 최종 카피
- Primary Text (Meta용)
- Headline (Meta/Google 공용)
- Description (Google RSA용)
- CTA 문구
- 적용된 5감정 훅 표시 (분노/놀라움/공감/두려움/호기심 중 어떤 조합)
- 1200%룰/4년분급/7년분급 반영 여부

### 3. 채널별 배정
- 이 셀의 광고가 어느 채널에 올라가는지
- Meta: 배너 A + 카피 B
- Google: 배너 C + 카피 D (RSA)
- 네이버 GFA: 배너 E
- 등

### 4. 랜딩 URL
- 광고 클릭 시 이동할 URL
- UTM 파라미터 포함 미리보기

### 5. 승인 상태
- 미승인 / 승인됨 / 수정필요
- 제이회장님이 "승인" 버튼을 클릭하면 해당 셀 승인 처리
- "수정필요" 선택 시 코멘트 입력 가능
- 9/9 승인 완료 시 → "광고 업로드 준비 완료" 상태 전환

## UI 설계

### 셀 클릭 시 모달 또는 확장 패널
```
┌─────────────────────────────────────────┐
│ ① 정당한 보상 × 인카다이렉트           │
├─────────────────────────────────────────┤
│ [배너 미리보기]        │ Primary Text:  │
│ meta-1080x1080.png     │ "7월부터..."   │
│ google-1200x628.png    │ Headline:      │
│                        │ "정착지원금..." │
│ 디자인: 09-미니멀타이포│ CTA: 자세히... │
│                        │ 훅: 두려움+분노│
├─────────────────────────────────────────┤
│ 채널 배정:                              │
│ Meta 피드 → meta-1080x1080.png          │
│ Google 반응형 → google-1200x628.png     │
│ 네이버 GFA → naver-1250x560.png        │
├─────────────────────────────────────────┤
│ 랜딩: https://incar-top1.tistory.com/1  │
│ UTM: ?utm_source=meta&utm_campaign=...  │
├─────────────────────────────────────────┤
│ [승인] [수정필요] [코멘트 입력]          │
└─────────────────────────────────────────┘
```

### 전체 승인 현황
```
① ✅  ② ⬜  ③ ✅  
④ ⬜  ⑤ ⬜  ⑥ ⬜  
⑦ ✅  ⑧ ⬜  ⑨ ⬜  

승인: 3/9 | [전체 승인 시 광고 업로드 시작]
```

## 데이터 구조 (campaign.json)

각 셀에 `approval` 필드 추가:
```json
{
  "cell_id": 1,
  "label": "정당한보상 × 인카다이렉트",
  "approval": {
    "status": "pending",  // pending | approved | revision_needed
    "approved_at": null,
    "comment": "",
    "final_banner": {
      "meta_feed": "output/banners/cell-1/meta-1080x1080.png",
      "google_responsive": "output/banners/cell-1/google-1200x628.png"
    },
    "final_copy": {
      "primary_text": "...",
      "headline": "...",
      "description": "...",
      "cta": "...",
      "hook_types": ["두려움", "분노"],
      "industry_issue": "1200%룰"
    },
    "channel_assignment": {
      "meta": { "banner": "...", "copy_set": "..." },
      "google": { "banner": "...", "rsa_set": "..." },
      "naver_gfa": { "banner": "..." }
    },
    "landing_url": "https://...",
    "utm": "?utm_source=meta&utm_medium=paid&utm_campaign=..."
  }
}
```

## 참조
- 기존 CampaignView.js: `/home/jay/workspace/dashboard/components/CampaignView.js`
- campaign.json: `/home/jay/workspace/dashboard/data/campaign.json`
- 카피 v3.1: `/home/jay/workspace/output/recruiting-marketing/copy-v3.1-final.md` (Phase 1 결과)
- 배너 매트릭스: campaign.json → banner_matrix

## 주의
- 현재 배너/카피가 아직 최종 확정 안 된 셀은 "미완성" 상태로 표시
- 승인 기능은 campaign.json에 상태 저장 (서버 API 통해)
- 대시보드 서버 재시작 포함

## 산출물
1. CampaignView.js에 최종 승인 뷰 섹션 추가
2. campaign.json에 approval 데이터 구조 추가
3. 서버 API: 승인 상태 업데이트 엔드포인트
4. 보고서