Skip to content

feat: 확정 경기·AI 예측 영역을 Tale of the Tape 비교 카드로 리디자인#30

Merged
umsungjun merged 1 commit into
mainfrom
feat/confirmed-fight-tale-of-the-tape
Jul 11, 2026
Merged

feat: 확정 경기·AI 예측 영역을 Tale of the Tape 비교 카드로 리디자인#30
umsungjun merged 1 commit into
mainfrom
feat/confirmed-fight-tale-of-the-tape

Conversation

@umsungjun

@umsungjun umsungjun commented Jul 11, 2026

Copy link
Copy Markdown
Owner
  • 확정 경기 카드를 다크 대전 카드 스타일로 전면 교체함. 이벤트 스트립(대회·날짜·장소) + 페이스오프(D-day 배지) + 전적/나이/신장·체중/리치/스타일/국가 양측 비교 테이블 구성
  • AI 예측 후보 카드도 다크 카드로 통일하고 전적(승률%)·나이·신장·리치 미니 그리드에 고석현(KO) 값 병기, AI 승률 바 추가함
  • ConfirmedFight 타입에 age/height/weight/reach 옵셔널 필드 추가하고 analyzeConfirmedOpponent가 나이·신장·체중·리치·전적까지 보강하도록 확장함
  • 기존 저장 데이터는 height 없으면 다음 크롤 때 Gemini 재호출로 자동 백필됨. 전적은 크롤값 우선·누락 시 Gemini 폴백, 재사용 경로에서 0-0-0 다운그레이드 방지 처리
  • 고석현 비교 스탯 빌더를 src/lib/ko-stats.ts로 분리해 메인·예측 페이지 중복 로직 제거함
  • 예측 네임스페이스에 height/winRate/country 번역 키 추가

Summary by CodeRabbit

  • 새로운 기능

    • 예측 및 확정 경기 화면에 UFC 스타일의 Tale of the Tape 비교 정보를 추가했습니다.
    • 후보 카드에 전적, 승률, 신체 정보 비교와 AI 승률 표시를 제공합니다.
    • 상대 선수의 나이, 신장, 체중, 리치, 전적 정보가 더욱 풍부하게 표시됩니다.
  • 개선 사항

    • 경기 정보가 변경되지 않으면 기존 데이터를 재사용해 불필요한 분석을 줄였습니다.
    • 크롤링된 전적을 우선 반영하고, 누락된 정보는 자동으로 보완합니다.
    • 비교 카드와 선수 이미지의 시각적 디자인을 개선했습니다.

- 확정 경기 카드를 다크 대전 카드 스타일로 전면 교체함. 이벤트 스트립(대회·날짜·장소) + 페이스오프(D-day 배지) + 전적/나이/신장·체중/리치/스타일/국가 양측 비교 테이블 구성
- AI 예측 후보 카드도 다크 카드로 통일하고 전적(승률%)·나이·신장·리치 미니 그리드에 고석현(KO) 값 병기, AI 승률 바 추가함
- ConfirmedFight 타입에 age/height/weight/reach 옵셔널 필드 추가하고 analyzeConfirmedOpponent가 나이·신장·체중·리치·전적까지 보강하도록 확장함
- 기존 저장 데이터는 height 없으면 다음 크롤 때 Gemini 재호출로 자동 백필됨. 전적은 크롤값 우선·누락 시 Gemini 폴백, 재사용 경로에서 0-0-0 다운그레이드 방지 처리
- 고석현 비교 스탯 빌더를 src/lib/ko-stats.ts로 분리해 메인·예측 페이지 중복 로직 제거함
- 예측 네임스페이스에 height/winRate/country 번역 키 추가

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings July 11, 2026 14:15
@vercel

vercel Bot commented Jul 11, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
lets-ko Building Building Preview, Comment Jul 11, 2026 2:15pm

@umsungjun umsungjun merged commit 600fe33 into main Jul 11, 2026
1 of 2 checks passed
@coderabbitai

coderabbitai Bot commented Jul 11, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 054f461b-c99e-4aeb-9f9c-2be984b21df4

📥 Commits

Reviewing files that changed from the base of the PR and between 7b07475 and 644235c.

📒 Files selected for processing (13)
  • CLAUDE.md
  • src/app/[locale]/page.tsx
  • src/app/[locale]/predictions/page.tsx
  • src/components/fighter/PredictionPreview.tsx
  • src/components/predictions/ConfirmedFightCard.tsx
  • src/components/predictions/FighterComparison.tsx
  • src/components/predictions/PredictionDetail.tsx
  • src/lib/crawl/confirmed-fight.ts
  • src/lib/gemini.ts
  • src/lib/ko-stats.ts
  • src/messages/en.json
  • src/messages/ko.json
  • src/types/prediction.ts

📝 Walkthrough

Walkthrough

고석현 비교 통계를 공통 헬퍼와 타입으로 통합하고 예측·확정 경기 UI에 연결했습니다. 확정 경기 감지는 상대 스펙 보강 여부에 따라 기존 데이터를 재사용하거나 Gemini로 상대 정보를 보강하며, 전적 우선순위도 조정되었습니다.

Changes

KO 비교 통계와 데이터 연결

Layer / File(s) Summary
비교 통계 계약과 생성 경로
src/lib/ko-stats.ts, src/types/prediction.ts, src/app/[locale]/page.tsx, src/app/[locale]/predictions/page.tsx, src/messages/*.json
KO 프로필·비교 통계 타입·생성 헬퍼를 추가하고, 두 페이지에서 공통 통계를 사용하도록 변경했습니다. 비교 UI용 높이, 국가, 승률 번역 키도 추가했습니다.
확정 경기 상대 정보 보강
src/lib/crawl/confirmed-fight.ts, src/lib/gemini.ts, CLAUDE.md
기존 확정 경기의 height 보강 여부에 따라 재사용 또는 Gemini 호출을 선택하며, 신체 정보와 전적을 보강합니다. 유효한 크롤 전적을 우선 사용하고, 없을 때 Gemini 전적을 사용합니다.
예측 프리뷰 비교 UI
src/components/fighter/PredictionPreview.tsx, src/components/predictions/PredictionDetail.tsx, src/components/predictions/FighterComparison.tsx
예측 후보 카드에 전적 합계, 승률, 신체 비교값, AI 승률 막대를 추가하고 koStats를 확정 경기 카드까지 전달하도록 변경했습니다.
확정 경기 Tale of the Tape
src/components/predictions/ConfirmedFightCard.tsx
확정 경기 카드를 페이스오프와 동적 Tale of the Tape 비교 테이블 중심으로 재구성했습니다.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Crawl as detectKoConfirmedFight
  participant Gemini as analyzeConfirmedOpponent
  participant Stats as buildKoComparisonStats
  participant UI as PredictionPreview
  Crawl->>Crawl: 기존 상대·이벤트·height 비교
  alt 스펙이 이미 존재함
    Crawl->>Crawl: 기존 확정 정보 재사용
  else 신규 또는 스펙 미보강
    Crawl->>Gemini: 상대 정보 보강 요청
    Gemini-->>Crawl: 이름·국적·스타일·신체 정보·전적 반환
  end
  Stats-->>UI: 고석현 비교 통계 전달
  Crawl-->>UI: 확정 상대 정보 전달
Loading

Possibly related PRs

Poem

깡충 뛰는 토끼가 통계를 모아,
KO 비교 카드를 반짝여요.
키와 전적, 승률까지 나란히,
Gemini도 정보를 채워 주네요.
확정 경기는 더 선명해졌어요! 🐇

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/confirmed-fight-tale-of-the-tape

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

확정 경기 영역과 AI 예측 영역을 “Tale of the Tape” 비교 카드 UI로 전면 리디자인하고, 이를 위해 확정 경기 상대 데이터(Gemini 보강) 및 고석현 비교 스탯 빌더를 공통화한 PR입니다.

Changes:

  • 확정 경기 카드 및 예측 후보 카드 UI를 다크 대전 카드 스타일로 리디자인(비교 테이블/승률 바 포함)
  • ConfirmedFight에 age/height/weight/reach 옵셔널 필드 추가 및 크롤 파이프라인에서 Gemini 보강/재사용 로직 확장
  • 고석현 비교 스탯 생성 로직을 buildKoComparisonStats로 분리하여 메인/예측 페이지 중복 제거, i18n 키 일부 추가

Reviewed changes

Copilot reviewed 13 out of 13 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
src/types/prediction.ts ConfirmedFight 상대 스펙(age/height/weight/reach) 옵셔널 필드 추가
src/messages/ko.json predictions 네임스페이스에 height/country/winRate 라벨 추가
src/messages/en.json predictions 네임스페이스에 height/country/winRate 라벨 추가
src/lib/ko-stats.ts 고석현 Tale of the Tape 비교용 스탯 빌더 분리/공유
src/lib/gemini.ts 확정 경기 상대 보강 스키마에 age/신체스펙/record 확장
src/lib/crawl/confirmed-fight.ts 확정 경기 감지 시 기존 데이터 재사용/백필 및 전적 폴백 로직 개선
src/components/predictions/PredictionDetail.tsx ConfirmedFightCard에 koStats 전달 및 타입 공통화
src/components/predictions/FighterComparison.tsx koStats 타입 공통화 및 Tailwind 색상 표기 정리
src/components/predictions/ConfirmedFightCard.tsx 확정 경기 카드 UI를 Tale of the Tape 비교 카드로 리디자인
src/components/fighter/PredictionPreview.tsx 예측 후보 카드 다크 스타일 통일 + 미니 비교 그리드/AI 승률 바 추가
src/app/[locale]/predictions/page.tsx koComparisonStats 생성 로직을 buildKoComparisonStats로 대체
src/app/[locale]/page.tsx 메인에서 koStats 생성 후 PredictionPreview로 주입
CLAUDE.md Phase 2.5 확정 경기 감지/보강 로직 문서 업데이트
Comments suppressed due to low confidence (1)

src/lib/gemini.ts:341

  • analyzeConfirmedOpponent()에서 Gemini 응답 검증이 nameKo/fightingStyle만 체크하고 있어, age/height/weight/reach/record가 누락되거나 타입이 깨진 응답이 그대로 통과할 수 있습니다. 이 값들은 이후 UI/저장 로직에서 문자열/숫자 전제를 가지므로, 최소한 필수 필드 존재 및 타입(특히 age의 유한한 숫자)을 함께 검증하는 게 안전합니다.
  if (!parsed.nameKo || !parsed.fightingStyle) {
    throw new Error("Invalid confirmed opponent response from Gemini");
  }

Comment on lines +83 to 87
// 신체 스펙(height)까지 이미 보강된 기존 데이터면 Gemini 재호출 없이 재사용.
// height가 없으면 Tale of the Tape 도입 이전 데이터이므로 아래 enrich 경로로 백필.
if (sameAsExisting && existing.opponent.height) {
return reuseExisting();
}
Comment on lines +239 to +241
<p className="text-center text-[10px] font-bold text-white/25 tracking-[0.3em] uppercase mb-2.5">
Tale of the Tape
</p>
Comment on lines +68 to +72
age && {
label: t("age"),
left: String(koStats.age),
right: String(age),
},
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants