# 📰 Daily News Curator for Instructors

> 매일 아침 7시, AI가 강사 관점에서 선별한 뉴스를 메일로 받아보세요.

기업교육 강사를 위한 데일리 뉴스 자동 큐레이션 봇. 키워드만 바꾸면 누구나 자기 강의 분야의 큐레이션 비서를 가질 수 있습니다.

---

## ✨ 무엇을 해주나요

매일 오전 7시, 다음 작업이 자동으로 실행됩니다.

1. 내가 설정한 키워드로 Google News에서 24시간 내 뉴스 수집
2. 중복 기사 자동 제거 (자카드 유사도 기반)
3. Claude AI가 **강사 관점**으로 적합도 평가 (사례/케이스형 우선)
4. 적합도 '상' 기사 최대 5개 선별 (키워드별 균등 배분)
5. 각 기사에 **3줄 요약 + "강의에 이렇게 써먹을 수 있다" 코멘트** 자동 생성
6. 카드형 HTML 메일로 Gmail에 발송

**적합한 기사가 없는 날**도 "오늘은 적합 기사 없음 + 수집 통계 + 차선 후보 1건" 안내 메일이 옵니다. (봇 침묵 방지)

---

## 👤 이런 분께 추천합니다

- 매일 아침 강의 분야 뉴스 검색하는 시간을 줄이고 싶은 강사
- 단순 뉴스가 아닌 "강의에 써먹을 인사이트" 형태로 받고 싶은 분
- GitHub 가입 + 5분 설정 가능하신 분 (코딩 지식 불필요)

**페르소나 예시**:
- 디자인씽킹·AI 강사 → 키워드 `기업교육,생성형AI,AX,바이브코딩`
- 리더십 강사 → 키워드 `리더십,조직문화,MZ세대,코칭`
- 마케팅 강사 → 키워드 `퍼포먼스마케팅,GA4,그로스해킹,브랜딩`

---

## 🚀 시작하기 (5단계, 약 15분)

### Step 1. 이 저장소를 Fork

화면 우측 상단 [Fork] 버튼 클릭 → 본인 GitHub 계정에 복사.

### Step 2. Gmail 앱 비밀번호 발급

1. Google 계정 → [보안](https://myaccount.google.com/security)
2. **2단계 인증** 활성화 (필수)
3. 검색창에 "앱 비밀번호" → 새 앱 비밀번호 생성
4. 16자 비밀번호(`xxxx xxxx xxxx xxxx`)를 메모장에 임시 저장

⚠️ Gmail 기본 비밀번호가 아닌, **별도 발급된 앱 비밀번호** 가 필요합니다.

### Step 3. Anthropic API 키 발급

1. [console.anthropic.com](https://console.anthropic.com) 가입
2. 결제 정보 등록 (월 ~500원 예상)
3. API Keys → Create Key
4. `sk-ant-...` 형태 키를 메모장에 임시 저장

### Step 4. GitHub Secrets 등록

Fork한 저장소에서 **Settings → Secrets and variables → Actions → New repository secret** 클릭. 아래 9개 변수를 하나씩 등록합니다.

| 변수명 | 필수 | 입력 예시 |
|---|---|---|
| `ANTHROPIC_API_KEY` | ✅ | `sk-ant-...` |
| `GMAIL_USER` | ✅ | `you@gmail.com` |
| `GMAIL_APP_PASSWORD` | ✅ | `xxxx xxxx xxxx xxxx` (공백 포함) |
| `MAIL_TO` | ✅ | `you@gmail.com` (수신처, 보통 본인) |
| `KEYWORDS` | ✅ | `기업교육,생성형AI,AX,바이브코딩` (쉼표 구분, 공백 없음) |
| `INSTRUCTOR_PROFILE` | ✅ | `기업교육 강사, 디자인씽킹·AI 워크숍, 사례 중심 선호` |
| `CLAUDE_MODEL` | ⬜ | `claude-haiku-4-5` (생략 시 자동 적용) |
| `MAX_ARTICLES` | ⬜ | `5` (생략 시 5) |
| `SIMILARITY_THRESHOLD` | ⬜ | `0.65` (생략 시 0.65) |

### Step 5. Actions 활성화 + 첫 테스트

1. Fork한 저장소의 **Actions** 탭 클릭
2. "I understand my workflows, go ahead and enable them" 클릭
3. 좌측 "Daily News Curator" 선택 → [Run workflow] 버튼 클릭 → [Run workflow] 한 번 더
4. 1~2분 후 Gmail 확인. 메일 도착 시 설정 완료.

---

## ⚙️ 키워드 + 프로필 작성 팁

### 키워드
- **3~5개가 적정**. 너무 적으면 풀이 작고, 너무 많으면 한 키워드당 노출이 줄어듦
- **너무 일반적인 단어 피하기**: `AI`보다 `생성형AI`, `교육`보다 `기업교육`
- **영어/한글 혼용 가능**: `리더십,leadership`
- 운영하다 안 맞으면 GitHub Secrets에서 즉시 수정 가능

### 강사 프로필 (`INSTRUCTOR_PROFILE`)
한 줄로, 다음 3요소를 담아주세요.

```
[직업/역할], [전문 분야], [선호 콘텐츠 스타일]
```

**예시**:
- `기업교육 강사, 디자인씽킹·AI 워크숍, 사례 중심 선호`
- `리더십 강사, 코칭·조직문화 전문, 데이터·연구 결과 선호`
- `마케팅 강사, B2C 그로스해킹, 실무 케이스 중심`

이 한 줄이 Claude의 평가 기준을 결정합니다.

---

## 💰 비용 가이드

| 모델 | API 비용 (월) | 추천 상황 |
|---|---|---|
| `claude-haiku-4-5` *(기본)* | ~500원 | 일반 큐레이션. 대부분 이걸로 충분 |
| `claude-sonnet-4-6` | ~3,000원 | 평가 품질 더 깐깐하게 |
| `claude-opus-4-7` | ~15,000원 | 평가 정확도가 정말 중요할 때 |

Google News RSS, Gmail SMTP, GitHub Actions는 **전부 무료**입니다.

---

## ❓ 자주 묻는 질문

### Q. 메일이 안 와요
1. Actions 탭에서 실행 로그 확인 (실패 시 빨간 X)
2. 가장 흔한 원인: Gmail **앱 비밀번호** 대신 일반 비밀번호 입력
3. `MAIL_TO` 주소 오타 확인

### Q. 발송 시각을 바꾸고 싶어요
`.github/workflows/daily.yml`의 `cron` 값 수정 (UTC 기준).
- KST 07:00 = `'0 22 * * *'` (전날 UTC 22:00)
- KST 09:00 = `'0 0 * * *'`

### Q. 주말엔 받기 싫어요
`cron` 값을 `'0 22 * * 0-4'`로 변경 (월~금만 발송).

### Q. 키워드 수정은 어떻게 하나요
GitHub Settings → Secrets → `KEYWORDS` 변경. 코드 수정 불필요.

### Q. 모델을 바꾸고 싶어요
GitHub Settings → Secrets → `CLAUDE_MODEL` 추가/변경.

### Q. 적합 기사 0개 메일도 받기 싫어요
`src/index.js`에서 안내 메일 발송 분기를 주석 처리하면 됩니다. 단, 봇이 살아있는지 확인 어려워지므로 비추천.

---

## 📂 프로젝트 구조

```
daily-news-curator/
├── .github/workflows/daily.yml     # GitHub Actions cron
├── src/
│   ├── index.js                    # 메인 엔트리
│   ├── config.js                   # 환경변수 통합
│   ├── fetcher.js                  # RSS 수집
│   ├── deduplicator.js             # 중복 제거
│   ├── evaluator.js                # AI 적합도 평가
│   ├── selector.js                 # Top N 선별
│   ├── summarizer.js               # 요약 + 코멘트 생성
│   ├── mailer.js                   # Gmail 발송
│   ├── templates/
│   │   ├── daily.js                # 일반 메일 HTML
│   │   └── empty.js                # 안내 메일 HTML
│   └── lib/
│       ├── claude.js               # Claude API 래퍼
│       └── logger.js               # 로그 유틸
├── .env.example                    # 환경변수 예시
├── .gitignore
├── package.json
├── PRD.md                          # 기획 문서
├── CLAUDE.md                       # AI 작업 규칙
└── README.md                       # 이 파일
```

---

## 🛠 로컬에서 직접 돌려보기 (선택)

GitHub Actions 없이 본인 컴퓨터에서 테스트하고 싶다면:

```bash
# 1. 저장소 클론
git clone https://github.com/{본인}/daily-news-curator.git
cd daily-news-curator

# 2. 의존성 설치
npm install

# 3. .env 파일 작성
cp .env.example .env
# .env 열어서 9개 변수 채우기

# 4. 실행
node src/index.js
```

---

## 🤖 Claude Code로 커스터마이징하기

본 프로젝트는 [Claude Code](https://claude.com/claude-code)와 함께 개발·관리됩니다. 저장소 내 `CLAUDE.md`에 코드 구조와 작업 규칙이 정리되어 있어, Claude Code가 일관된 패턴으로 코드를 수정·확장합니다.

**활용 예시**:
- "네이버 뉴스 RSS도 추가해줘"
- "주간 다이제스트 메일도 일요일에 보내줘"
- "Slack으로도 동시 발송하게 해줘"

---

## 📄 라이선스

MIT License

---

## 🙏 만든 사람

**Teddy** (최송일) | [WOWD.LAB](https://wowdlab.com)
- 디자인씽킹 × AI로 일하는 방식을 변화시키는 교육 훈련 전문 기업
- 슬로건: *"AI를 제대로 쓰려면 디자인씽킹부터"*
- 문의: support@wowdlab.com

이 도구가 도움이 되셨다면 ⭐ 한 번 눌러주세요. 다른 강사들에게도 닿을 수 있습니다.
