# ThreadAuto Phase 3: Claude LLM 콘텐츠 생성 + 크롤러 + Firestore 파이프라인

## 개요
AI 콘텐츠 생성 엔진 + 뉴스/랜딩페이지 크롤러 + Firestore 저장 파이프라인 구현.
Phase 1(OAuth+API), Phase 2(카드뉴스 렌더러) 완료 상태.

## 프로젝트 경로
- **프로젝트**: `/home/jay/projects/ThreadAuto/`
- **기술 리서치**: `/home/jay/workspace/memory/research/threadauto-tech-research.md` (Section 3, 4, 5 참고)
- **Phase 2 보고서**: `/home/jay/workspace/memory/reports/task-223.1.md`

## Phase 3 목표
3가지 콘텐츠 소스에서 소재를 수집하고, Claude LLM으로 카드뉴스 텍스트를 생성하여, 이미지 렌더링 후 Firestore에 저장하는 전체 파이프라인 구축.

## 구현 범위

### 1. 뉴스 크롤러 (`crawler/`)
- `crawler/rss_fetcher.py` — RSS 7개 피드 수집 (feedparser)
  - 다자비, 뉴스와이어, 이투데이, 이데일리, 한국경제, 매일경제, 파이낸셜뉴스
- `crawler/keyword_filter.py` — 보험업계 이직 관련 키워드 필터링
  - 1차 키워드: 정착지원금, 스카우트, 영입, GA이직, 사업단모집, 리크루팅
  - 2차 키워드: 수수료상한제, GA성장, 제판분리, 보험사구조조정
  - 3차 키워드: 수당체계, 성과급, 설계사연봉, DB제공
- `crawler/landing_page.py` — incar-top1.tistory.com 랜딩페이지 파싱 (Playwright)
  - Playwright headless → networkidle → 스크롤 시뮬레이션 → content 추출
  - 구조화된 JSON: headline, services, benefits, images, cta

### 2. LLM 콘텐츠 생성 (`content/`)
- `content/generator.py` — Claude CLI (`claude -p`) 기반 콘텐츠 생성
  - 뉴스 소재 → 카드뉴스 5슬라이드 텍스트 생성
  - 랜딩페이지 소재 → 홍보 콘텐츠 생성
  - 수동 입력 소재 → 맞춤 콘텐츠 생성
- `content/prompts.py` — 프롬프트 템플릿 관리
  - 톤앤매너: 전문적 + 친근, 수치/데이터 기반, 동기부여
  - 금지사항: 현 직장 비하, 과도한 수익 보장, 금감원 규정 위반
  - 5가지 템플릿 타입별 프롬프트 (TypeA~E)
- `content/quality.py` — 콘텐츠 품질 관리
  - 금지 키워드 필터링
  - 최근 30건 히스토리 중복 체크
  - JSON 출력 파싱 + 검증

### 3. 파이프라인 오케스트레이터 (`pipeline/`)
- `pipeline/orchestrator.py` — 전체 파이프라인 실행
  - 소재 수집 → LLM 생성 → 이미지 렌더링 → Firestore 저장
  - 하루 10건 생성 (TypeA~E 로테이션)
- `pipeline/scheduler_data.py` — 발행 스케줄 데이터
  - 08:00/09:30/11:00/12:30/14:00/15:30/17:00/18:30/20:00/21:30
  - 시간대별 템플릿 타입 매핑

### 4. Firestore 연동 (`storage/`)
- `storage/firestore.py` — Firestore CRUD
  - 컬렉션: `ta_posts` (생성된 콘텐츠), `ta_sources` (수집된 소재), `ta_history` (발행 이력)
  - Firebase Admin SDK 사용
- `storage/image_upload.py` — 이미지를 공개 URL로 제공
  - GCS 업로드 또는 로컬 서빙 (개발 단계)
  - Threads API 요구: 반드시 공개 HTTPS URL

### 5. CLI 확장
- `python cli.py crawl-news` — RSS 뉴스 수집 + 필터링 테스트
- `python cli.py generate --source news --count 3` — 콘텐츠 3건 생성
- `python cli.py pipeline --count 1` — 전체 파이프라인 1건 실행 (수집→생성→렌더→저장)

### 6. 테스트
- RSS 크롤러 테스트 (mock RSS 피드)
- 키워드 필터링 테스트
- LLM 생성 테스트 (mock claude CLI)
- 품질 검증 테스트
- 파이프라인 통합 테스트

## LLM 규칙 (필수)
- **Claude CLI (`claude -p`) subprocess 호출만 허용**
- 외부 API (Gemini, OpenAI 등) 사용 금지
- Max 구독 내 처리, 추가 비용 없음
- 타임아웃 60초, 실패 시 재시도 1회

## 디렉터리 구조 (Phase 2에 추가)
```
/home/jay/projects/ThreadAuto/
├── crawler/
│   ├── __init__.py
│   ├── rss_fetcher.py
│   ├── keyword_filter.py
│   └── landing_page.py
├── content/
│   ├── __init__.py
│   ├── generator.py
│   ├── prompts.py
│   └── quality.py
├── pipeline/
│   ├── __init__.py
│   ├── orchestrator.py
│   └── scheduler_data.py
├── storage/
│   ├── __init__.py
│   ├── firestore.py
│   └── image_upload.py
└── (기존 파일 유지)
```

## 주의사항
- 기존 Phase 1, 2 코드 수정 최소화
- requirements.txt에 feedparser, firebase-admin, playwright 추가
- Firestore는 insuwiki-j2h 프로젝트 활용 (컬렉션명 ta_ 접두사로 구분)
- 랜딩페이지 크롤링: Playwright 이미 설치됨 (`scripts/browser.py` 참고)

## 완료 조건
1. RSS 7개 피드 크롤링 + 키워드 필터링 동작
2. Claude CLI로 카드뉴스 텍스트 생성 동작
3. 전체 파이프라인 1건 실행 성공 (수집→생성→렌더→저장)
4. CLI 명령 3개 동작 (crawl-news, generate, pipeline)
5. 테스트 전체 PASS (기존 65개 + 신규)