# 카드뉴스형 Threads 포스팅: 콘텐츠 생성 → 카드뉴스 렌더링 → 업로드

## 목표
카드뉴스형 Threads 포스팅을 **처음부터 끝까지** 완성한다.
1. 5단계 파이프라인으로 콘텐츠 생성
2. Pillow 카드뉴스 렌더러로 이미지 생성
3. Threads에 실제 업로드

## 프로젝트 경로
- ThreadAuto: `/home/jay/projects/ThreadAuto/`

## ★ 이전 피드백 (반드시 준수)
- **어투**: "합니다/습니다" 체 필수. "는다/이다/된다/한다" 평서체 절대 금지
- **제목**: 서술형 금지. 명사형·구문형 유지
  - ✅ "팔로워 많은 설계사가 계약 0건인 3가지 패턴"
  - ❌ "팔로워가 많아도 계약이 없다"
- **밝은 테마 텍스트**: _contrast_text_color() 함수로 자동 처리 (task-658.1 수정 완료)
- 의미 있는 보험 도메인 콘텐츠 사용
- 검정 화면 같은 무의미 테스트 데이터 절대 금지

## ★ 성공 레퍼런스 (이전에 제이회장님이 만족한 카드뉴스 스타일)
- 본문: "합니다/습니다" 체
- 제목: 명사형/구문형 ("GA 이동, 고민보다 확인이 먼저입니다" 스타일)
- 레퍼런스 파일: `/home/jay/projects/ThreadAuto/scheduler/daily_queue/2026-03-13.json.discarded` 내 GA 이동 포스팅 참조

## 실행 절차

### 1단계: 콘텐츠 생성
```python
cd /home/jay/projects/ThreadAuto
python3 -c "
from content.five_stage_pipeline import FiveStagePipeline
import json

topic = {
    'id': 'cardnews_test_db_marketing',
    'title': 'DB 마케팅으로 고객 확보하는 법',
    'category': '정보제공',
    'tags': ['DB마케팅', '고객확보', '보험설계사']
}

pipeline = FiveStagePipeline()
result = pipeline.generate(topic=topic, content_type='cardnews')
with open('output/cardnews_content.json', 'w') as f:
    json.dump(result, f, ensure_ascii=False, indent=2)
print('콘텐츠 생성 완료')
print(f'검수 점수: {result.get(\"pipeline_metadata\", {}).get(\"review_score\", \"N/A\")}')
"
```

### 2단계: 어투 검증 (업로드 전 필수)
생성된 slides를 읽고 아래 체크:
- [ ] 본문(description, value, cta_text, caption)이 "합니다/습니다" 체인지
- [ ] 제목(title, hook, label)이 서술형이 아닌지
- [ ] "는다/이다/된다/한다" 평서체가 없는지
- 위반 발견 시 수동으로 수정 후 진행

### 3단계: 카드뉴스 이미지 렌더링
```python
cd /home/jay/projects/ThreadAuto
python3 -c "
from renderer.cardnews import CardNewsRenderer
import json

with open('output/cardnews_content.json') as f:
    content = json.load(f)

renderer = CardNewsRenderer()
image_paths = renderer.render(content['slides'])
print(f'카드뉴스 {len(image_paths)}장 렌더링 완료')
for p in image_paths:
    print(f'  {p}')
"
```

### 4단계: Threads 업로드
- caption은 1단계 content['caption'] 사용
- 카드뉴스 이미지들을 carousel로 업로드
- `publisher/threads_publisher.py` 사용

업로드 후:
- threads_post_id 기록
- 게시물 URL 기록

## 검증
1. 카드뉴스 이미지가 정상 렌더링되는지 (빈 화면, 깨진 레이아웃 없는지)
2. 어투가 "합니다/습니다" 체인지
3. 제목이 서술형이 아닌지
4. 밝은 테마일 때 텍스트 가시성 정상인지
5. Threads에 정상 게시되었는지

## 산출물
1. 보고서: `memory/reports/task-664.1.md`
2. 콘텐츠 JSON: `output/cardnews_content.json`
3. 카드뉴스 이미지: `output/cardnews/` 디렉토리
4. Threads 게시물 URL
