Version: 0.1
Last Updated: 2026-05-31
Claude Codeλ μ½λ μμ±κΈ°κ° μλλΌ μλμ΄ νμ΄νλ‘κ·Έλλ¨Έλ€.
- μν€ν μ² κ²°μ μ κ°μ΄ νλ€
- 리ν©ν λ§ μμ μ κ°μ΄ νλ¨νλ€
- λ²κ·Έ μΆμ μ κ°μ΄ νλ€
- ν둬ννΈ μ΄ν°λ μ΄μ μ κ°μ΄ νλ€
λ¨μν "μ΄ ν¨μ λ§λ€μ΄μ€" λ‘ μ°λ©΄ λλΉ. 컨ν μ€νΈλ₯Ό μΆ©λΆν μ£Όκ³ , νλ¨μ μμ²νλ λ°©μμΌλ‘ νμ©νλ€.
tenbagger-hunter/
βββ CLAUDE.md β AI 컨ν
μ€νΈ νλΈ (νμ μ΅μ ν)
βββ PRD.md β μ ν μꡬμ¬ν
βββ AI-WORKFLOW.md β μ΄ νμΌ
β
βββ docs/
β βββ architecture.md β μν€ν
μ² κ²°μ κΈ°λ‘ (ADR)
β βββ prompts.md β Claude API ν둬ννΈ λ²μ κ΄λ¦¬
β βββ data-sources.md β μΈλΆ API μ€ν μ 리
β
βββ .claude/
β βββ mcp.json β MCP μλ² μ€μ
β βββ commands/ β 컀μ€ν
μ¬λμ 컀맨λ
β βββ new-feature.md
β βββ debug.md
β βββ prompt-iteration.md
β βββ phase-review.md
β
βββ app/ β Next.js App Router
β βββ (main)/
β β βββ page.tsx
β β βββ explore/[theme]/
β β βββ stock/[ticker]/
β βββ api/
β βββ analyze/route.ts
β βββ stock/[ticker]/route.ts
β βββ search/route.ts
β
βββ lib/
β βββ ai/
β β βββ analyzer.ts β Tenbagger Score λ‘μ§
β β βββ bull-bear.ts β Bull/Bear/Verdict μμ±
β β βββ prompts/ β ν둬ννΈ ν
νλ¦Ώ
β β βββ theme-search.ts
β β βββ score.ts
β β βββ bull-bear.ts
β βββ data/
β β βββ adapters/
β β β βββ us-stock.ts β FMP API wrapper
β β βββ cache.ts β Supabase μΊμ± λ μ΄μ΄
β βββ types/
β βββ stock.ts β κ³΅ν΅ νμ
μ μ
β
βββ components/
βββ score-card/
βββ bull-bear/
βββ stock-chart/
νλ‘μ νΈ λ£¨νΈμ CLAUDE.mdλ Claude Codeκ° λ§€ μΈμ
λ§λ€ μ½λ μ΄μμλ λ¬Έμλ€.
κ°λ°ν λλ§λ€ λ°λμ μ
λ°μ΄νΈνλ€.
# Tenbagger Hunter β Project Context
## μ± κ°μ
AI κΈ°λ° λ―Έκ΅ μ£Όμ Tenbagger ν보 νμ λꡬ.
λ―Έκ΅μ£Ό(FMP/SEC) κΈ°λ°.
μμ°μ΄ ν
λ§ μ
λ ₯ β κΈ°μ
ν보 λ°κ΅΄ β Bull/Bear/Verdict λΆμ.
## κΈ°μ μ€ν
- Frontend: Next.js 14 App Router, TypeScript, Tailwind, shadcn/ui
- AI: Claude API (claude-sonnet-4)
- DB: Supabase (PostgreSQL)
- λ―Έκ΅ μ¬λ¬΄: Financial Modeling Prep API
## ν΅μ¬ μμΉ
1. λͺ¨λ AI λΆμ λ‘μ§μ /lib/ai/ μλ λͺ¨λλ‘ λΆλ¦¬
2. μΈλΆ API μλ΅μ λ°λμ Supabaseμ μΊμ± (TTL μ μ±
: docs/data-sources.md μ°Έκ³ )
3. λ°μ΄ν° μμ€ μ²λ¦¬ λ‘μ§μ κ³΅ν΅ λλ©μΈ νμ
(lib/types/stock.ts)μΌλ‘ μΆμν
4. κ°λ° μ€μλ /lib/data/mock/ μ mock data μ°μ μ¬μ©
5. μλ¬λ μ¬μ©μμκ² gracefulνκ² νμ
## νκ²½λ³μ (ν€ μ΄λ¦λ§ κΈ°λ‘, κ° μ λ κΈ°λ‘ κΈμ§)
ANTHROPIC_API_KEY
FMP_API_KEY
NEXT_PUBLIC_SUPABASE_URL
SUPABASE_SERVICE_ROLE_KEY
## νμ¬ μ§ν μν©
### Phase 1 (λ―Έκ΅μ£Ό MVP)
- [ ] νλ‘μ νΈ scaffold
- [ ] FMP API wrapper + μΊμ±
- [ ] ν
λ§ νμ ν둬ννΈ v1
- [ ] Tenbagger Score μκ³ λ¦¬μ¦ v1
- [ ] Bull/Bear/Verdict UI
### Phase 2 (λ°μ΄ν° μ€μ°λ)
- [ ] Supabase μΊμ± λ°±μλ μ€μ°λ
- [ ] FMP/Claude μ€λ°μ΄ν° κ²μ¦
- [ ] Watchlist DB μ€ν€λ§
## μ΅κ·Ό κ²°μ μ¬ν
(μμ
νλ©΄μ μ
λ°μ΄νΈ)
## μλ €μ§ μ΄μ
(μμ
νλ©΄μ μ
λ°μ΄νΈ){
"mcpServers": {
"supabase": {
"command": "npx",
"args": [
"-y",
"@supabase/mcp-server-supabase@latest",
"--supabase-url", "${SUPABASE_URL}",
"--supabase-service-role-key", "${SUPABASE_SERVICE_ROLE_KEY}"
]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}"
}
}
}
}Supabase MCP
# Claude Codeμκ² μ§μ λ§νκΈ°
"μΊμ ν
μ΄λΈμ stock_analyses μΆκ°ν΄μ€.
ticker, market, theme, score, bull_bear, created_at 컬λΌμΌλ‘"
"μ€λ μΊμ ννΈμ¨ μ‘°νν΄μ€"
"watchlist ν
μ΄λΈ μ€ν€λ§ νμΈν΄μ€"
GitHub MCP
"μ§κΈκΉμ§ μμ
ν λ΄μ© PRλ‘ λ§λ€μ΄μ€.
feat/phase1-us-stocks λΈλμΉλ‘"
"μ΅κ·Ό μ»€λ° νμ€ν 리 보μ¬μ€"
# .claude/commands/new-feature.md
μ κΈ°λ₯μ μΆκ°ν λ λ€μ μμλ‘ μ§νν΄:
1. CLAUDE.md μ½κ³ νμ¬ μν νμ
2. lib/types/stock.ts μ νμν νμ
λ¨Όμ μ μ
3. API route μμ± (app/api/ μλ, μλ¬ νΈλ€λ§ νμ)
4. λΉμ¦λμ€ λ‘μ§μ lib/ai/ λλ lib/data/ μ λΆλ¦¬
5. μ»΄ν¬λνΈ μμ± (components/ μλ)
6. κ°λ° μ€μλ lib/data/mock/ mock data μ¬μ©
7. CLAUDE.md μ§ν μν© μ
λ°μ΄νΈ# .claude/commands/debug.md
λ²κ·Έλ₯Ό λλ²κΉ
ν λ:
1. μλ¬ λ©μμ§μ μ€ν νΈλ μ΄μ€ λΆμ
2. κ΄λ ¨ νμΌ νμ (grep / read)
3. κ°μ€ 3κ° μΈμ°κ³ κ°μ₯ κ°λ₯μ± λμ κ²λΆν° κ²μ¦
4. μμ ν μ£μ§μΌμ΄μ€ νμΈ
5. μ¬λ° λ°©μ§λ₯Ό μν μ½λ©νΈ λλ νμ
κ°ν μ μ# .claude/commands/prompt-iteration.md
Claude API ν둬ννΈλ₯Ό κ°μ ν λ:
1. docs/prompts.md μμ νμ¬ λ²μ νμΈ
2. λ¬Έμ μ μ§λ¨ (λ무 generic / ꡬ쑰 λΆλͺ
ν / μμ μμ λ±)
3. κ°μ λ²μ μμ± + λ³κ²½ μ΄μ μ€λͺ
4. μ΄μ λ²μ κ³Ό λλν docs/prompts.md μ κΈ°λ‘
5. A/B ν
μ€νΈ λ°©λ² μ μ# .claude/commands/phase-review.md
Phase μλ£ μ 리뷰:
1. CLAUDE.md 체ν¬λ¦¬μ€νΈ μλ£ νλͺ© νμΈ
2. μ€μ λμ νμΈμ΄ νμν νλͺ© λͺ©λ‘ν
3. λ€μ Phase μ§μ
μ μ 리ν΄μΌ ν κΈ°μ λΆμ±
4. docs/architecture.md μ μ΄λ² Phase κ²°μ μ¬ν κΈ°λ‘
5. CLAUDE.md λ€μ Phase 체ν¬λ¦¬μ€νΈ νμ±ν"Phase 1 μμνμ.
CLAUDE.md μ½κ³ νμ¬ μν νμ
ν΄μ€.
μ€λ λͺ©ν: FMP API wrapper + μΊμ± λ μ΄μ΄κΉμ§.
νμ
μ μλΆν° μμν΄μ μμλλ‘ κ°μ."
"λ€μ μΈ κ°μ§λ₯Ό λ³λ ¬λ‘ μ§νν΄μ€:
1. lib/data/adapters/us-stock.ts β FMP API wrapper
2. lib/score/index.ts β Tenbagger Score μκ³ λ¦¬μ¦
3. lib/types/stock.ts β FMP μλ΅μ λ§€ννλ κ³΅ν΅ νμ
κ°κ° μλ£λλ©΄ 리ν¬νΈν΄μ€."
"/prompt-iteration
Bull/Bear λΆμ κ²°κ³Όκ° λ무 genericν΄.
μλ₯Ό λ€μ΄ NVDA λΆμνμ λ κ²°κ³Ό λΆμ¬μ€κ²:
[κ²°κ³Ό λΆμ¬λ£κΈ°]
λκ° λ¬Έμ μΈμ§ μ§λ¨νκ³ v2 λ§λ€μ΄μ€."
"lib/ai/analyzer.ts μ½μ΄λ΄.
Tenbagger Score κ³μ° λ‘μ§μ΄ λ무 κΈΈμ΄μ§ κ² κ°μ.
μ΄λ»κ² λΆλ¦¬νλ©΄ μ’μμ§ μ μν΄μ€.
μ±λ₯ μν₯μ μμ΄μΌ ν΄."
"μ€λ μμ
λ§λ¬΄λ¦¬νμ.
1. λ³κ²½λ λ΄μ© conventional commits νμμΌλ‘ 컀λ°ν΄μ€
2. CLAUDE.md μ§ν μν© μ
λ°μ΄νΈν΄μ€
3. λ€μ μΈμ
μ μ΄μ΄μ ν κ² CLAUDE.md μ κΈ°λ‘ν΄μ€"
docs/prompts.md μ λͺ¨λ Claude API ν둬ννΈλ₯Ό λ²μ κ΄λ¦¬νλ€.
# Prompts
## theme-search
### v1 (2026-05-31)
**λͺ©μ :** ν
λ§ ν€μλ β κΈ°μ
ν보 5~8κ° λμΆ
**μν:** νμ¬ μ¬μ© μ€
[ν둬ννΈ λ΄μ©]
---
### v0 (2026-05-28)
**λͺ©μ :** λμΌ
**μν:** deprecated β κ²°κ³Όκ° λ무 genericν¨
**λ¬Έμ μ :** κΈ°μ
μ μ μ΄μ κ° μμμ
[ν둬ννΈ λ΄μ©]docs/architecture.md μ μ€μν κΈ°μ κ²°μ μ κΈ°λ‘νλ€.
λμ€μ "μ μ΄λ κ² νμ§?" λ₯Ό λ°©μ§νκΈ° μν¨.
# Architecture Decision Records
## ADR-001: λ°μ΄ν° μμ€ μΆμνλ₯Ό μν κ³΅ν΅ λλ©μΈ νμ
**λ μ§:** 2026-05-31
**μν:** κ²°μ λ¨
**λ°°κ²½:** μΈλΆ λ°μ΄ν° μμ€(FMP λ±)μ μλ΅ κ΅¬μ‘°κ° μμ λ μ΄μ΄μ μ§μ λ
ΈμΆλλ©΄ κ²°ν©λκ° λμμ§.
**κ²°μ :** κ³΅ν΅ μΈν°νμ΄μ€(StockData νμ
)λ₯Ό μ μνκ³ ,
μμ€λ³ Adapterκ° λ³ν λ΄λΉ.
**κ²°κ³Ό:** μμ λ μ΄μ΄(AI λΆμ, UI)λ μμ€ κ΅¬λΆ μμ΄ λμΌ μΈν°νμ΄μ€ μ¬μ©.
**νΈλ μ΄λμ€ν:** Adapter ꡬν μ΄κΈ° λΉμ© μμΌλ μ₯κΈ° μ μ§λ³΄μ μ 리.- κ°λ° μ€μλ
lib/data/mock/mock data μ¬μ©, μ€ API νΈμΆ μ΅μν - λΆμ κ²°κ³Ό Supabaseμ μΊμ± (TTL 6μκ°)
- μ€νΈλ¦¬λ° μλ΅ μ¬μ© (UX + μ§κ°λ μλ κ°μ )
- λ°°ν¬ ν μ λΉμ© λͺ¨λν°λ§ (Anthropic Consoleμμ νμΈ)
- μ¬λ¬΄μ ν 24μκ° μΊμ±
- μ£Όκ°/μμ΄ 1μκ° μΊμ±
- κ°λ° μ€ λΆνμν νΈμΆ κΈμ§
- 500MB DB, 2GB bandwidth
- μ΄κ³Ό μ μΊμ± TTL λ리거λ λ°μ΄ν° μ 리
main
βββ dev
βββ feat/phase1-us-stocks
βββ feat/phase2-kr-stocks
βββ feat/score-algorithm
βββ fix/dart-parser
feat: μ κΈ°λ₯
fix: λ²κ·Έ μμ
refactor: 리ν©ν λ§
docs: λ¬Έμ μ
λ°μ΄νΈ (CLAUDE.md, ADR λ±)
chore: μ€μ , ν¨ν€μ§ λ±
prompt: Claude API ν둬ννΈ λ³κ²½
# μΈμ
λ§λ¬΄λ¦¬ λ Claude Codeμκ²
"μ§κΈκΉμ§ λ³κ²½μ¬ν conventional commits νμμΌλ‘ 컀λ°ν΄μ€.
feat/phase1-us-stocks λΈλμΉμ."
# 1. Claude Code μ€μΉ
npm install -g @anthropic-ai/claude-code
# 2. νλ‘μ νΈ μμ±
npx create-next-app@latest tenbagger-hunter --typescript --tailwind --app
# 3. μμ‘΄μ± μ€μΉ
npm install @anthropic-ai/sdk @supabase/supabase-js recharts
npx shadcn@latest init
# 4. νκ²½λ³μ μ€μ
cp .env.example .env.local
# ANTHROPIC_API_KEY, FMP_API_KEY, SUPABASE_* μ
λ ₯
# 5. Claude Code μ€ν
cd tenbagger-hunter
claude1. claude μ€ν
2. "CLAUDE.md μ½κ³ νμ¬ μν νμ
ν΄μ€. μ€λ [λͺ©ν] μ§ννμ."
3. μμ
μμ
1. "μ€λ μμ
컀λ°ν΄μ€ (conventional commits)"
2. "CLAUDE.md μ
λ°μ΄νΈν΄μ€"
3. "λ€μ μΈμ
μμν λ μ΄μ΄μ ν κ² κΈ°λ‘ν΄μ€"