尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证나뭇잎 마을 내전 기록소
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗친구들과의 리그 오브 레전드 커스텀 게임 기록을 자동으로 집계하고 통계·랭킹·업적을 제공하는 웹 애플리케이션
배포 주소: https://leaf-town-records.vercel.app
친구 10~13명이 주기적으로 리그 오브 레전드 내전(커스텀 게임)을 진행하는데, 공식 전적 사이트(OP.GG 등)는 커스텀 게임을 기록하지 않는다. 매번 결과를 수기로 공유하다 보니 "누가 제일 잘해?", "나 몇 연승이야?" 같은 궁금증이 해결되지 않았다.
이를 해결하기 위해 게임 결산 스크린샷 한 장으로 전적 등록부터 통계 시각화까지 자동화한 전용 기록 시스템을 직접 설계·개발했다.
| 기능 | 설명 |
|---|---|
| AI 스크린샷 분석 | 게임 결산 화면 캡처를 업로드하면 Claude Vision이 닉네임·승패를 자동 추출 |
| 다전제 시리즈 집계 | 3판2선·5판3선 형식을 인식하고 개인전이 아닌 시리즈 단위로 승패 산정 |
| 통합 랭킹 | 점수(승 +3 / 패 -1) 기준 밀집 순위, 연승·연패 실시간 표시 |
| 플레이어 상세 통계 | 챔피언별 전적, 포지션별 승률, 1:1 상대전적, 시너지 분석 |
| 업적 시스템 | 일반·희귀·영웅·전설·신화 5등급 45종 업적, 대표업적 커스텀 설정 |
| 팀 편성 | 참가자 선택 → 팀 배정 → 미니게임으로 블루/레드 사이드 결정 → 공지 복사 |
| 닉네임 변경 이력 관리 | 닉네임 변경 시 전체 게임 기록 일괄 업데이트 |
문제: 커스텀 게임은 Riot 공식 API에 노출되지 않아 자동 수집이 불가능하다.
해결: Claude Sonnet Vision API에 결산 화면 이미지를 전송하고 JSON 구조로 파싱하도록 프롬프트를 설계했다.
[ 스크린샷 ] → Claude Vision API → { winTeam, team1: [...], team2: [...] }
문제: 같은 사람이 다른 닉네임으로 기록될 수 있는 경우가 여러 가지다.
Shade vs shade)해결 1 — 정규화 키: 모든 닉네임 비교 시 normalizeId(공백제거 + 소문자) 함수를 일관 적용해 대소문자 차이를 흡수한다.
해결 2 — 닉네임 변경 일괄 업데이트: 닉네임 관리 페이지에서 "닉네임 변경"을 실행하면 저장된 전체 게임 기록을 스캔해 이전 닉네임을 새 닉네임으로 교체한다. 부계정 목록이 무한정 쌓이는 문제를 해소했다.
해결 3 — 실명 기반 통합 집계: 상대전적·시너지 통계를 집계할 때 닉네임 → 실명(realName) 변환 맵을 사전 구성하고 키로 실명을 사용한다. 주·부계정, 닉네임 변경 이전 기록이 모두 같은 사람으로 자동 합산된다.
"Shade"(주계정) ─┐
"Shadow"(구닉네임) ─┤ → 실명 "홍길동" 으로 통합 집계
"shade"(대소문자) ─┘
문제: 롤 내전은 3판2선·5판3선 형식이라 개인전 단위 승패로는 의미 있는 랭킹이 나오지 않는다.
해결: 날짜별로 게임 기록을 묶어 시리즈를 구성하고, 한 팀이 필요 승수(2승 또는 3승)를 달성했을 때만 isComplete = true로 처리한다. 모든 통계(승률·점수·연승·업적)는 시리즈 완료 기준으로만 산정한다.
날짜별 그룹 → 선취 승수 달성 여부 판별 → isComplete = true → 승패 집계
단순 플레이 수 카운트를 넘어 관계 기반 업적(포지션 듀오, 상대 전적, 시너지)을 구현했다.
computeAggregatedStats에서 주·부계정 합산 시 vsStats·withStats·positionStats·업적을 모두 병합해 통합 뷰 제공| 분류 | 기술 |
|---|---|
| Framework | Next.js 16 (App Router) |
| Language | TypeScript |
| Styling | Tailwind CSS 4 + CSS Variables (다크 테마) |
| Database | Vercel KV (Upstash Redis — 서버리스 영구 저장) |
| AI | Anthropic Claude claude-sonnet-4-6 (Vision API) |
| 외부 API | Riot Data Dragon (최신 챔피언 목록 자동 동기화) |
| 배포 | Vercel |
# 1. 패키지 설치
npm install
# 2. 환경 변수 설정 (.env.local)
KV_REST_API_URL=your_kv_url
KV_REST_API_TOKEN=your_kv_token
ANTHROPIC_API_KEY=your_anthropic_key
# 3. 개발 서버
npm run dev
#0c0c0e 및 딥 차콜 패널 배경 위에, 무한 츠쿠요미의 붉은 달이 비치는 은은한 광원 효과를 배경 그라디언트로 튜닝했습니다.transform 덮어쓰기 현상을 더블 컨테이너(래퍼) 구조로 분리하여 구름 찌그러짐 현상을 해결했습니다.Tab 및 Shift+Tab 입력 시 닉네임을 건너뛰고 챔피언명 입력 필드로만 세로 방향 신속 이동하도록 지원합니다."")으로 초기화하여 사용자가 직접 정밀 등록할 수 있도록 최적화했습니다."애니비아애" 등)을 isComposing 상태 제어로 완벽히 방지하여 편안한 Hangul 입력 속도를 보장합니다.<main> 엘리먼트에 고정되어 있던 z-10 스태킹 컨텍스트를 제거하여, 대표업적 선택 모달(BadgeModal)을 비롯한 모든 모달 창(z-50)이 상단 네비게이션 헤더(z-40) 위에 잘리지 않고 완벽하게 최상단 오버레이 레이어로 렌더링되도록 수정했습니다.hokage_rock_pixel.png)로 변환했습니다.objectPosition: "left bottom")과 오른쪽 절반(objectPosition: "right bottom")으로 분할 대칭 배치하여, 중앙의 본문 콘텐츠를 중심으로 1~7대 호카게 석상이 균형 있게 정렬됩니다.--bg: #f3f3f3) 위에서 하늘색 등 밝은 영역을 완전히 없애기 위해 흑백 필터(grayscale(100%))와 mixBlendMode: "multiply" 기법을 동일 적용했습니다.radial-gradient 마스킹을 씌웠습니다.var(--border-green))에 걸맞는 어두운 붉은색 외곽선 실루엣(opacity: 0.22)과 컷아웃 구멍을 입혀 매트 블랙 다크 모드에 몰입감과 미스터리함을 부여했습니다.