Conversation
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WGv6Vf3GKCCogvBmEgZb2g
- 접속 시 KST 기준 전월 차트를 기본으로 조회 - 좌우 화살표로 월 이동, 수집된 월 범위를 벗어나면 비활성화 - 장르는 셀렉트 대신 한 줄 가로 스크롤 뱃지로 렌더링해 하나씩 선택 - 월/장르 전환 시 목록이 사라지지 않도록 keepPreviousData 적용 - TjChartRankingList -> ChartRankingList 리네임 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- fetchTjChart 에 timeout 10초 추가 (웹앱 axios 클라이언트와 동일) - /api/tj-chart 가 month 파라미터를 형식 검증만 하고 그대로 조회하도록 변경 (수집되지 않은 월도 빈 목록으로 응답해 월 이동이 자연스럽게 동작) - availableMonths 조회를 종합 차트 상위 10위로 좁혀 불필요한 row 전송 제거 (14434건 -> 129건, 월 목록 결과는 동일) Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- Commands 에 tj-chart, tj-chart-backfill, tj-all-number, format 추가 - GitHub Actions 표에 crawl_tj_chart.yml 추가 및 실제 스케줄/파일명과 불일치 정정 - Supabase 테이블 표에 chart_rankings 추가 - TJ 공식 차트 파이프라인 섹션 신설 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- 카드 헤더의 차트 제목을 페이지 h1으로 빼고 조회 월을 중앙 정렬 - 장르 12종에 이모지 추가 (Windows에서 깨지는 국기·Unicode 14 이후 문자는 제외) - 데스크톱 마우스 휠로 뱃지 가로 스크롤. 양 끝에서는 페이지 세로 스크롤을 가로채지 않음 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
TJ는 한 곡에 반주 번호를 여러 개 등록한다(일반/MR/라이브/60이상 전용). 곡 검색 페이지 아이콘을 파싱해 songs.badges(text[])에 저장한다. - utils/tjBadge.ts: 뱃지 파서. not_found/num_mismatch를 구분해 반환하고 매핑에 없는 클래스는 원문 보존 + unknownBadges로 보고 - crawlAllTJSongByNumber.ts: puppeteer(건당 1.5~2초) → fetch+cheerio(건당 24ms)로 전환. 뱃지 수집을 겸하고 블록 단위 진행 파일로 재개를 지원 - crawlTjBadges.ts: badges가 null인 곡만 채우는 증분 수집 (pnpm tj-badges) - postSongsBatchDB: 신규 곡 청크 insert, 실패 시 행 단위 재시도 - updateSongBadgesDB: 뱃지 조합별로 묶어 갱신 (URL 길이 제한 때문에 id 100개씩) - 워크플로우에 upload-artifact 추가 (러너 종료 시 로그가 사라지던 문제) Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- 백필 대상 구간 2025-01~2026-01 → 2026-02~2026-07 (데이터 공백 구간) - 전수 순회 결과 로그: 신규 곡 1,373건, 제목 표기 정정 957건 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
matchChartRows가 미매칭 항목의 원본을 함께 반환하고, cron이 TJ 곡 검색 페이지에서 곡 정보를 받아 songs에 추가한 뒤 다시 매칭한다. 이 단계가 없으면 MR·라이브처럼 DB에 없는 버전이 매달 미매칭으로 다시 쌓인다. 곡 정보를 차트 API가 아닌 검색 페이지에서 받는 이유는 전수 순회가 검색 페이지 표기로 제목을 맞춰뒀기 때문이다. 뱃지는 차트 API로도 만들 수 있어(badgesFromChartItem) 두 값을 대조하고 불일치만 기록한다. - 차트 API 타임아웃 10초 → 30초. 실측 응답이 2.7~11.4초라 정상 응답이 잘려나갔다 - 지수 백오프 재시도 3회 추가. 228회 요청 중 한 번만 실패해도 전체가 죽던 구조였다 - 곡 검색 페이지는 100ms 내외라 타임아웃을 10초로 분리 - postSongsBatchDB가 select()로 id를 반환해 삽입 직후 재매칭이 가능하게 함 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1,646줄이 전부 매칭 가능해져 파일을 비운다. 내용은 git 이력에 남는다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
로그가 러너 파일시스템에만 쌓여 잡 종료 시 사라지던 문제. 곡 자동 보충이 붙으면서 매달 무엇이 추가됐는지 확인할 수단이 필요해졌다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
TJ가 한 곡을 버전별로 따로 차트에 올리므로 같은 곡이 여러 순위에 보인다. 무엇이 다른지 알 수 있도록 MR / LIVE / 60↑ 뱃지를 제목 위에 표시한다. - MV(뮤직비디오 유무)는 어느 버전을 부를지 고르는 데 도움이 안 되므로 노출하지 않음 - 60은 구형 반주기에서 재생되지 않는다는 뜻이라 실사용에 중요해 포함 - title 속성으로 각 뱃지의 의미를 설명 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- SongBadges 공용 컴포넌트로 인기차트·검색 결과가 같은 모양을 쓰게 함 - 뱃지 상수를 types/tjChart → types/song 으로 이동 (차트 전용이 아니라 곡의 속성) - /api/search 응답 매핑에 badges 누락돼 있어 추가 (select는 * 라 이미 내려오고 있었음) - 렌더 경로가 끊긴 PopularRankingList.tsx 삭제 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
badges가 계속 null인 곡 = TJ가 번호 조회에 응답하지 않는 곡. 검색에 나와도 반주기에서 재생되지 않는다. 2,082곡을 삭제했다. - 차트에 오른 곡(임영웅메들리)과 num_ky 보유 24곡은 제외 - song_tags / invalid_ky_songs / verify_ky_songs를 먼저 지워야 FK에 걸리지 않는다. 뒤 두 테이블은 song_id 컬럼 없이 PK인 id가 곧 songs.id다 - 기본은 미리보기. DEAD_SONGS_APPLY=true 로만 실제 삭제 - 삭제분은 src/assets/deadSongsRemoved.json 에 백업 crawlTjBadges: 실패한 곡이 정렬 앞자리를 계속 차지해 그 뒤로 진행하지 못하던 문제를 num_tj 커서 방식으로 수정 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
카드에 TJ·금영 번호가 나란히 있어 '60↑'만으로는 금영 기기 얘기로 읽힐 수 있다. '60 이상 반주기'는 TJ 기종을 가리키므로 라벨과 설명에 TJ를 박는다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
라벨마다 브랜드를 넣는 대신(TJ 60↑) 묶음 앞에 TJ를 한 번만 표시한다. 뱃지 3종 모두 TJ 등록 정보에서 나오므로 묶음 단위로 밝히는 편이 정확하고, 라벨도 짧게 유지된다. 번호 영역과 같은 brand-tj 색을 써서 같은 출처임을 시각적으로 연결했다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
뱃지 밖에 따로 두면 별개 요소로 보여, 테두리 안에 함께 넣어 한 덩어리로 읽히게 한다. icongubun이 단일값이라 표시되는 뱃지는 항상 최대 1개여서 TJ가 중복되지 않는다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
crawlRecentTJ가 넣는 신곡은 badges가 null인데, removeDeadTjSongs가 badges is null을 'TJ에서 사라진 곡'으로 판정했다. 그대로 두면 매일 들어오는 멀쩡한 신곡이 삭제된다. 1. crawl_recent_tj.yml이 recent-tj 직후 tj-badges를 실행해 신곡 뱃지를 채운다 2. removeDeadTjSongs가 삭제 직전 TJ로 재조회한다 - 살아있음 → 지우지 않고 뱃지를 채움 - 조회 실패 → 일시적 오류를 '사라짐'으로 오인하지 않도록 건드리지 않음 - not_found → 그때만 삭제 부수 정리: - fetchBadgeRow를 utils/tjBadge로 공용화 (crawlTjBadges와 판정 로직 일치 보장) - 백업 파일명에 타임스탬프. 재실행이 앞선 백업을 덮어써 태그 기록이 유실됐던 문제 - 삭제 대상이 0건이면 빈 백업 파일을 만들지 않음 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- 가로 스크롤바를 thin으로 노출. 더 훑을 장르가 남았다는 걸 알 수 있게 한다. thumb 색은 border 토큰이 다크 테마에서 배경과 거의 같아 muted-foreground를 쓴다. - 트로트 🎺 → 📻, 랩/힙합 🧢 → 🔥 트럼펫은 트로트와, 모자는 음악 장르와 연결이 약했다. 아코디언(🪗)은 Windows Segoe UI Emoji에 글리프가 없어 두부로 깨져 제외했다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1. 검색 가이드가 실제 '아이유' 검색 대신 가상 곡 카드를 띄운다. 실제 검색에 의존하면 곡 데이터가 바뀌거나 검색이 실패할 때 투어가 깨진다. 가상 곡은 실제 id가 없으므로 댓글 조회는 끈다(isDemo). 2. 검색 페이지에서 추천(엄지척) 기능 제거. 투어의 추천 단계도 함께 삭제. PopularRankingList 삭제로 이미 고아였던 RankingItem도 정리했다. 3. 부를 곡·최신 곡·인기 곡이 각자 다른 마크업으로 같은 정보를 그리고 있어 SongSummary 공용 컴포넌트로 통일했다. 번호는 tabular-nums + 고정폭으로 자릿수를 맞춘다. Radix ScrollArea는 뷰포트 안에 display:table 래퍼를 넣는데, 이 때문에 목록 너비가 컨테이너가 아니라 가장 긴 곡 제목에 맞춰져 번호와 버튼이 화면 밖으로 밀렸다. 뷰포트 자식을 block으로 되돌려 해결했다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
'60↑'은 TJ 반주기 기종을 가리키는 값이라 브랜드를 밝혀야 하지만, MR·LIVE는 녹음물의 성격이라 브랜드와 무관하게 뜻이 통한다. BRAND_SCOPED_BADGES로 어느 뱃지에 브랜드를 붙일지 데이터로 관리한다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
번호 검색에는 언어 필터가 의미가 없는데 헤더로 옮기면서 조건이 빠져 항상 노출됐다. UI만 숨기면 languageTag 값이 남아 화면에 보이지 않는 채로 결과가 걸러지므로, 번호 탭으로 전환할 때 값도 함께 비운다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
좁은 화면에서 칩이 줄바꿈되며 검색창 아래 높이가 들쭉날쭉했다. flex-wrap을 flex-nowrap + overflow-x-auto로 바꿔 한 줄을 유지한다. 스크롤바는 인기차트 장르 필터와 같은 thin 스타일로 노출한다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Feat : TJ 공식 차트 API 연동으로 popular 페이지 개편 (#295)
Google Play가 2026-08-31부터 API 36(Android 16) 미만 타겟 앱의 업데이트를 거부한다. targetSdkVersion은 Bubblewrap 템플릿에 리터럴로 하드코딩되어 twa-manifest.json으로 제어할 수 없고, app/build.gradle은 .gitignore 대상이라 커밋으로 고정할 수도 없다. 즉 CLI 버전이 이 값을 결정한다. @bubblewrap/cli를 1.25.0으로 올려 템플릿이 36을 생성하게 하고, 빌드 산출물의 targetSdk와 versionCode를 검사하는 스크립트를 추가한다. 검사 실패 시 빌드 명령이 실패하므로 잘못된 aab가 업로드되지 않는다. turbo run build가 bubblewrap build까지 실행해 키스토어 프롬프트에서 멈추는 문제가 있어 build 스크립트를 build:android로 분리한다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
targetSdkVersion이 CLI 버전에 좌우된다는 점과 버전별 값을 표로 정리한다. Gradle 데몬이 파일을 잠가 재생성이 EBUSY로 실패하고, 그 여파로 gradlew와 settings.gradle이 부분 삭제되는 상황의 복구 절차를 추가한다. 재생성 프롬프트는 Yes가 맞다. 1.25.0 템플릿이 이미 36이고, versionCode도 twa-manifest.json 기준으로 갱신되기 때문이다. 루트 CLAUDE.md의 Monorepo Structure에 누락된 apps/twa를 추가한다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
[Chore] : TWA targetSdkVersion 36 대응 (#297)
- Card 래퍼를 제거해 목록이 페이지 배경 위에 그대로 표시되도록 변경 - 월 선택 행을 전체 너비 중앙정렬로 확장하고 텍스트/버튼 크기 확대 - 년/월을 Select로 교체해 클릭 한 번으로 원하는 년-월로 이동 - 선택지는 availableMonths로 제한하고, 미집계 월도 값이 비지 않도록 보정 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016KurUijKjUFemSrVPDmA4u
- 월 선택 행 안에 있던 최신곡 텍스트를 h1 제목으로 분리해 다른 페이지와 통일 - 제목과 좌우 이동 버튼의 왼쪽 정렬선이 맞도록 선택 행의 px-2 제거 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016KurUijKjUFemSrVPDmA4u
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016KurUijKjUFemSrVPDmA4u
[Feat] : 인기차트 배경 박스 제거 및 년-월 선택기 확장 (#299)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NWdgDqXKuSxN1yM2VPy2dp
[Chore] : 버전 2.11.0 및 패치노트 추가 (#301)
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
ⓘ Qodo reviews are paused because the subscription is no longer active. Ask your workspace admin to reactivate the subscription to resume reviews. Manage billing |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📌 PR 제목
chore : 버전 1.11.0
📌 변경 사항
💬 추가 참고 사항