카드마다 할인 항목도 다르고, 전월실적 조건도 다르고, 한도도 달라서 매번 어떤 카드를 써야 할지 헷갈려요. CherryPicker는 카드 명세서를 넣으면 항목별로 어떤 카드가 가장 이득인지 계산해 줘요.
한 장짜리로 밀어 쓸 때보다 얼마나 더 아낄 수 있는지도 비교할 수 있어요.
CherryPicker analyzes your credit card statement and finds the best card for each spending category, factoring in performance tiers, monthly caps, and reward types across 561 cards from 24 Korean issuers.
명세서에서 읽은 거래를 항목별로 나누는 과정이에요.
multilingual-e5-small 모델을 돌려서 의미 유사도로 분류. 모델은 33MB 정도, 버튼을 눌러야 내려받아요| 카드사 | 카드 수 | 카드사 | 카드 수 | |
|---|---|---|---|---|
| 신한카드 | 65 | 카카오뱅크 | 9 | |
| 현대카드 | 48 | 수협은행 | 8 | |
| 삼성카드 | 47 | MG새마을금고 | 8 | |
| 롯데카드 | 47 | 토스뱅크 | 5 | |
| KB국민카드 | 47 | 케이뱅크 | 5 | |
| 하나카드 | 45 | 신협 | 4 | |
| 우리카드 | 42 | KDB산업은행 | 2 | |
| IBK기업은행 | 35 | 우체국 | 2 | |
| NH농협카드 | 34 | 제주은행 | 19 | |
| iM뱅크 | 21 | BNK | 19 | |
| BC카드 | 18 | 전북은행 | 11 | |
| SC제일은행 | 10 | 광주은행 | 10 |
| 웹 | Astro 6, Svelte 5, Tailwind CSS 4 |
| 파싱 | PapaParse, SheetJS, pdfjs-dist |
| AI 분류 | Transformers.js, multilingual-e5-small (브라우저 WASM) |
| 데이터 | Zod, YAML, 561개 카드 규칙 |
| 배포 | GitHub Pages (정적 사이트) |
| CLI/스크래퍼 | Bun, Claude API |
| 언어 | TypeScript 6 |
cherrypicker/
├── apps/web/ # Astro 정적 웹앱 (GitHub Pages)
│ ├── src/lib/parser/ # 브라우저용 파서 (CSV, XLSX, PDF)
│ ├── src/lib/analyzer.ts # 분석 파이프라인
│ ├── src/lib/categorizer-ai.ts # AI 임베딩 분류기
│ └── public/data/ # 빌드된 cards.json
├── packages/
│ ├── core/ # 분류기, 계산기, 옵티마이저 (순수 TS)
│ ├── parser/ # Node/Bun용 파서 (CLI에서 사용)
│ ├── rules/data/cards/ # 카드사별 YAML (561개)
│ └── viz/ # 터미널 테이블, HTML 리포트
├── tools/
│ ├── cli/ # CLI 진입점
│ └── scraper/ # Claude API로 카드 혜택 수집
└── scripts/build-json.ts # YAML → JSON 빌드
hletrd.github.io/cherrypicker에서 바로 써 볼 수 있어요. 명세서를 올리면 브라우저에서 바로 분석해요. 서버로 데이터가 나가지 않아요.
git clone https://github.com/hletrd/cherrypicker.git
cd cherrypicker
bun install
# 카드 데이터 빌드
bun run scripts/build-json.ts
# 웹 개발 서버
bun run dev:web
# CLI로 명세서 분석
bun run analyze
카드 혜택은 packages/rules/data/cards/{카드사}/{카드이름}.yaml 파일로 관리돼요.
card:
id: "shinhan-b-big"
issuer: "shinhan"
name: "B.Big"
nameKo: "삑"
type: credit
annualFee:
domestic: 10000
international: 13000
performanceTiers:
- id: tier1
label: "전월 30만원 이상"
minSpending: 300000
rewards:
- category: "public_transit"
type: discount
tiers:
- performanceTier: tier1
fixedAmount: 200
monthlyCap: 6000
globalConstraints:
monthlyTotalDiscountCap: 15000
카드 데이터 수정이나 새 카드 추가는 PR로 보내주세요.