# task-2017: InsuRo PostHog 분석 기반 셋업 (DA-1~5)

## 목적
PostHog Cloud 연동 + SDK 통합 + useAnalytics 훅 + 서버사이드 이벤트 + PII 보호.

## ★ 프로젝트: `/home/jay/projects/InsuRo/`

## 구현 항목

### DA-1: PostHog Cloud 계정/프로젝트 초기화
- PostHog Cloud (https://app.posthog.com) 프로젝트 키 발급은 수동 필요
- 코드에서는 환경변수 `POSTHOG_API_KEY`로 참조하도록 구성
- .env.example에 `POSTHOG_API_KEY=phc_your_key_here` 추가

### DA-2: posthog-js 패키지 설치 + React 초기화
- `npm install posthog-js`
- PostHogProvider로 App.tsx 루트 래핑
- 환경변수에서 API 키 로드 (없으면 비활성화)

### DA-3: useAnalytics() React 훅 (TypeScript 타입 안전)
- 18개 이벤트 타입 정의:
  - page_view, content_generated, plan_upgrade_clicked, locked_feature_viewed
  - upgrade_modal_dismissed, inquiry_submitted, onboarding_step_completed
  - feature_used, cta_clicked, pipeline_run_completed, crm_contact_added
  - chat_started, chat_ended, summary_generated, keyword_analyzed
  - wiki_viewed, namecard_shared, login_completed
- `useAnalytics().track(eventName, properties)` 인터페이스
- PostHog 미초기화 시 no-op (개발 환경 안전)

### DA-4: FastAPI posthog-python SDK + track_server_event()
- `pip install posthog` (또는 requirements.txt 추가)
- server/analytics.py 신규: track_server_event(user_id, event, properties)
- 환경변수 POSTHOG_API_KEY 없으면 비활성화
- PII 자동 필터링 (email, phone 제거)

### DA-5: PII 보호 ESLint 커스텀 룰
- .eslintrc에 커스텀 룰 추가 또는 별도 eslint-plugin
- analytics 호출에 email/name/phone 키 전달 시 경고
- 구현이 복잡하면 코드 리뷰 가이드라인 문서로 대체 가능

## ★★★ 절대 규칙 ★★★
- PostHog API 키를 코드에 하드코딩 금지 — 환경변수만
- PII(개인정보)가 PostHog에 전송되면 안 됨

## 완료 시그니처
- [grep] `posthog` @ `/home/jay/projects/InsuRo/.worktrees/task-2017-dev1/package.json`
- [grep] `useAnalytics\|PostHogProvider` @ `/home/jay/projects/InsuRo/.worktrees/task-2017-dev1/src/`
- [grep] `track_server_event\|posthog` @ `/home/jay/projects/InsuRo/.worktrees/task-2017-dev1/server/`
- [pytest] `server/tests/test_main.py`

## 검증 시나리오
1. PostHogProvider가 App.tsx에 래핑됨
2. useAnalytics().track() 호출 가능 (타입 안전)
3. 서버에서 track_server_event() 호출 가능
4. POSTHOG_API_KEY 없어도 앱 정상 동작 (no-op 모드)
5. tsc 0 errors, npm run build 성공, pytest PASS

## 레벨
- normal

## 프로젝트
- insuro