Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
e093003
Merge pull request #202 from GulSam00/release/2.5.0
GulSam00 Apr 19, 2026
19622b4
chore : apps/mobile 동결 (#204)
GulSam00 Apr 29, 2026
2c2b20a
Merge pull request #205 from GulSam00/chore/204-freezeMobileApp
GulSam00 Apr 29, 2026
75582b0
feat : apps/web PWA 셋업 (#206)
GulSam00 Apr 29, 2026
60be74b
Merge pull request #207 from GulSam00/feat/206-setupWebPwa
GulSam00 Apr 30, 2026
7ed9f20
feat : 개인정보처리방침 페이지 + PWA 아이콘 4종 추가 (#212)
GulSam00 Apr 30, 2026
89f0fd8
feat : apps/twa 워크스페이스 + assetlinks.json 생성 (#214)
GulSam00 Apr 30, 2026
ba2a968
chore : pnpm-lock.yaml에 apps/twa 워크스페이스 반영 (#214)
GulSam00 Apr 30, 2026
d13e4af
feat : 개인정보처리방침 페이지 내재화 및 진입점 통합 (#212)
GulSam00 Apr 30, 2026
a92f0a2
chore : sitemap에 privacy 라우트 exclude 추가 (#212)
GulSam00 Apr 30, 2026
fa05ad6
Merge pull request #213 from GulSam00/feat/212-privacyAndPwaIcons
GulSam00 Apr 30, 2026
d5efa6c
Merge branch 'develop' into feat/214-twaBubblewrap
GulSam00 Apr 30, 2026
4249603
Merge pull request #215 from GulSam00/feat/214-twaBubblewrap
GulSam00 Apr 30, 2026
65e21e2
doc : apps/twa 빌드 절차 CLAUDE.md 작성 (#209)
GulSam00 Apr 30, 2026
b92cc28
chore : lock 파일 수정
GulSam00 May 1, 2026
f1d8160
Merge pull request #216 from GulSam00/chore/209-twaBuildDocs
GulSam00 May 1, 2026
4a3eb33
feat : 곡 오류 신고 기능 추가 (#217)
GulSam00 May 2, 2026
3203fce
chore : prettier 포맷 정리 및 sitemap 갱신 (#217)
GulSam00 May 2, 2026
64e2ea0
Merge pull request #218 from GulSam00/feat/217-addSongReport
GulSam00 May 2, 2026
03a0041
feat : 내 신고 내역 확인 및 삭제 페이지 추가 (#219)
GulSam00 May 2, 2026
d65dcf1
chore : sitemap 갱신 (#219)
GulSam00 May 2, 2026
a89fa4d
Merge pull request #220 from GulSam00/feat/219-myReportsPage
GulSam00 May 2, 2026
836eeab
refactor : 신고 항목 표시 유틸 공통화 (#221)
GulSam00 May 3, 2026
3cb7e35
feat : 관리자용 신고 내역 관리 페이지 추가 (#221)
GulSam00 May 3, 2026
75c1603
feat : 곡 댓글 및 홍보(전광판) 기능 추가 (#223)
GulSam00 May 4, 2026
791b782
chore : sitemap 갱신 및 설정 업데이트 (#223)
GulSam00 May 4, 2026
aee79dc
feat : 포인트 사용 내역 조회 기능 추가 (#226)
GulSam00 May 7, 2026
f16ca9d
feat : 패치노트 페이지 추가 (#228)
GulSam00 May 7, 2026
518938c
feat : to-sing 곡 순서 변경 및 삭제 낙관적 업데이트 적용 (#230)
GulSam00 May 7, 2026
cd7b9f3
refactor : 댓글 DELETE 엔드포인트를 path param에서 body 방식으로 변경 (#223)
GulSam00 May 7, 2026
6e8a41a
refactor : 곡 홍보 DB 정규화 및 시간 계산 date-fns 적용 (#223)
GulSam00 May 7, 2026
a1cc9ed
feat : 곡 홍보 신청 확인 단계 추가 (#223)
GulSam00 May 7, 2026
bee96d6
feat : 곡 홍보 배너 layout 글로벌 배치 및 노출 기간 표시 (#223)
GulSam00 May 7, 2026
fd4efaf
feat : info 페이지 홍보 신청 이력 확인 및 취소 기능 추가 (#233)
GulSam00 May 8, 2026
f0c31e4
Merge pull request #232 from GulSam00/feat/223-songCommentAndPromotion
GulSam00 May 8, 2026
507c88e
fix : PromotionBanner 인덱스 초과 및 홍보 날짜 입력값 검증 추가 (#233)
GulSam00 May 8, 2026
1fc07e7
fix : 로그아웃 시 React Query 캐시 초기화 (#233)
GulSam00 May 8, 2026
05cb185
Merge pull request #234 from GulSam00/feat/233-promotionHistory
GulSam00 May 8, 2026
d871e49
Merge branch 'develop' into feat/226-pointLogs
GulSam00 May 8, 2026
f037b69
feat : 포인트 증감 RPC 적용 및 /user/point 엔드포인트 통합 (#226)
GulSam00 May 8, 2026
ab29d0c
chore : Prettier 포맷 및 sitemap 갱신 (#226)
GulSam00 May 8, 2026
e2af911
feat : 홍보 등록/취소에 포인트 RPC 통합 및 취소 확인 모달 추가 (#226)
GulSam00 May 10, 2026
4fc8dee
feat : 포인트 로그 양/음수 색상 분기 (#226)
GulSam00 May 10, 2026
b7ae9e9
fix : mutation 후 관련 query 캐시 무효화 누락 보강 (#226)
GulSam00 May 10, 2026
c2e76c8
chore : info 메뉴 순서 정리 및 sitemap 갱신 (#226)
GulSam00 May 10, 2026
14cdfeb
feat : 포인트 로그에 잔액(balance_after) 표시 추가 (#226)
GulSam00 May 10, 2026
e79984b
chore : sitemap 갱신 (#226)
GulSam00 May 10, 2026
77f6710
feat : 곡 정보 클릭 시 클립보드 복사 및 전역 텍스트 선택 차단 (#226)
GulSam00 May 11, 2026
72445b3
refactor : 홍보 이력/배너 UI 정리 (#226)
GulSam00 May 11, 2026
cf5a8ee
chore : info 메뉴/페이지 라벨 정리 및 sitemap 갱신 (#226)
GulSam00 May 11, 2026
2d257e4
Merge pull request #227 from GulSam00/feat/226-pointLogs
GulSam00 May 11, 2026
8f4b0c7
feat : 패치노트 페이지를 /patch-notes 로 이동하고 타임라인 UI 적용 (#228)
GulSam00 May 14, 2026
c3c7dac
refactor : SearchHistory 의 hydration 분기 로직 제거 및 빈 상태 메시지 추가 (#228)
GulSam00 May 14, 2026
1f5047d
chore : claude settings 에 bypassPermissions 기본 모드 추가 (#228)
GulSam00 May 14, 2026
56f912d
Merge branch 'develop' into feat/230-toSingOptimisticUpdate
GulSam00 May 15, 2026
0ad9cf4
fix : 낙관적 업데이트 cancelQueries await 누락 및 null-guard 추가 (#230)
GulSam00 May 15, 2026
3c2d5e4
Merge pull request #231 from GulSam00/feat/230-toSingOptimisticUpdate
GulSam00 May 15, 2026
d84e5e5
Merge branch 'develop' into feat/228-patchNotesPage
GulSam00 May 16, 2026
567baee
Merge pull request #229 from GulSam00/feat/228-patchNotesPage
GulSam00 May 16, 2026
5d9c4f1
Merge pull request #222 from GulSam00/feat/221-adminReportsPage
GulSam00 May 17, 2026
ad5e727
chore : public 폴더 에셋 용도별 분류 및 미사용 파일 제거 (#236)
GulSam00 May 17, 2026
68b5ae0
refactor : SearchResultCard 액션 버튼을 곡 액션과 부가 기능으로 행 분리 (#236)
GulSam00 May 17, 2026
2a89dee
refactor : 오류 신고/홍보하기 버튼 한 줄 배치 및 댓글 입력 패딩 조정 (#236)
GulSam00 May 18, 2026
feeb1ce
Merge pull request #237 from GulSam00/chore/236-prereleaseUiAndVersion
GulSam00 May 18, 2026
1508e5f
chore : 버전 2.6.0 및 패치노트 항목 추가 (#236)
GulSam00 May 18, 2026
dd22454
fix : Service Worker(/sw.js) Cache-Control 헤더 추가 (#239)
GulSam00 May 19, 2026
6676724
Merge pull request #240 from GulSam00/fix/239-swCacheControl
GulSam00 May 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
115 changes: 115 additions & 0 deletions .claude/commands/check-review.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
# /check-review — Qodo Review Brief

현재 브랜치의 PR에서 qodo-code-review 봇이 남긴 리뷰 코멘트를 읽고 이슈를 분류해 브리핑한다.

## Input

`$ARGUMENTS` — PR 번호 (선택). 생략하면 현재 브랜치의 PR을 자동으로 조회한다.

예: `/check-review` 또는 `/check-review 232`

## Steps

1. PR 번호를 결정한다.

- `$ARGUMENTS` 가 있으면 해당 번호를 사용한다.
- 없으면 현재 브랜치에서 열린 PR을 조회한다.

```
gh pr view --json number,title,url
```

PR이 없으면 아래 메시지를 출력하고 중단한다.

```
⛔ 현재 브랜치에 열린 PR이 없습니다.
`/pr` 로 PR을 먼저 생성하거나, `/check-review <PR번호>` 로 직접 지정하세요.
```

2. 레포 오너와 이름을 확인한다.

```
gh repo view --json owner,name
```

3. PR의 리뷰 코멘트를 가져온다.

`mcp__plugin_everything-claude-code_github__get_pull_request_comments` 도구를 사용한다.
- owner: 위에서 확인한 오너
- repo: 위에서 확인한 레포 이름
- pull_number: 위에서 결정한 PR 번호

4. qodo-code-review 봇(`login`에 `qodo` 포함)의 코멘트만 필터링한다.

동일 이슈가 중복 언급된 경우(영/한 버전 등) 하나로 통합한다.
통합 기준: 같은 파일 + 같은 이슈 설명 유형. 한국어 버전 우선.

5. 필터링된 코멘트를 아래 기준으로 분류한다.

| 태그 | 의미 |
| --- | --- |
| `🐞 Bug` | 런타임 버그, 크래시, 데이터 불일치 |
| `📎 Requirement gap` | API 계약/스펙 미준수 |
| `📘 Rule violation` | 프로젝트 규칙 위반 |
| `⚠️ Reliability` | 원자성, 동시성, 안정성 문제 |

우선순위: `🐞 Bug` > `📎 Requirement gap` > `📘 Rule violation` > `⚠️ Reliability`

6. 아래 형식으로 브리핑을 출력한다.

---

## 📋 Qodo Review Brief — PR #<번호>

> **<PR 제목>**

총 **<N>개** 이슈 (중복 제거 후)

---

### 🐞 버그 (<n>건)

**<번호>. <이슈 제목>** — `<파일 경로>`

> <한 줄 요약>

- **원인**: <원인 설명>
- **권장 수정**: <수정 방향>

---

### 📎 Requirement Gap (<n>건)

... (동일 형식)

---

### 📘 Rule Violation (<n>건)

... (동일 형식)

---

### ✅ 조치 완료

이미 현재 세션에서 수정한 이슈가 있으면 여기에 표시한다.
파일 경로와 수정 내용을 기반으로 판단한다.

---

### 👉 다음 단계

우선순위 순서로 대응할 이슈를 나열한다.

| 우선순위 | 이슈 | 파일 |
| --- | --- | --- |
| 1 | <가장 중요한 이슈> | `<파일>` |
| 2 | ... | ... |

---

## Notes

- 코멘트가 없으면 "qodo-code-review 리뷰 코멘트가 없습니다." 를 출력하고 종료한다.
- 중복 코멘트(영/한 동일 이슈)는 하나로 통합한다.
- 이미 수정된 이슈는 "✅ 조치 완료" 섹션으로 분류한다.
11 changes: 11 additions & 0 deletions .claude/commands/start.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,23 @@

2. GitHub Issue를 생성한다.

이슈 본문은 아래 구조로 작성한다:
- 작업 개요 설명 (1~3줄)
- `## 작업 체크리스트` 섹션: 구현할 항목을 GitHub Flavored Markdown checkbox(`- [ ]`)로 나열
- 완료된 항목은 `- [x]`로 표시 (이슈 생성 시점엔 모두 `- [ ]`)

```
gh issue create --title "<이슈 제목>" --body "<이슈 본문>"
```

생성된 이슈 번호를 추출한다.

작업이 진행되면서 항목이 완료될 때마다 아래 명령으로 이슈 본문을 갱신한다:

```
gh issue edit <번호> --body "<갱신된 본문>"
```

3. develop 브랜치를 최신으로 갱신한다.

```
Expand Down
4 changes: 4 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
{
"permissions": {
"defaultMode": "bypassPermissions"
},

"hooks": {
"SessionStart": [
{
Expand Down
7 changes: 5 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ No test suite is configured.
```
apps/
web/ — Next.js 15 web app (primary app, see apps/web/CLAUDE.md)
mobile/ — Expo React Native app (early stage)
mobile/ — [DEPRECATED — frozen, see apps/mobile/README.md] Expo wrapper app, replaced by TWA approach. Excluded from pnpm workspace.
packages/
open-api/ — Wrapper around the external karaoke open API (@repo/open-api)
query/ — Shared TanStack Query hooks for open-api (@repo/query)
Expand Down Expand Up @@ -76,12 +76,15 @@ See [apps/web/CLAUDE.md](apps/web/CLAUDE.md) for full detail. Key points:
| `/green` | 구현 코드 작성 | 필수 |
| `/refactor` | 코드 품질 개선 (동작 변경 X) | 생략 가능 |
| `/verify` | build, lint, format, test 전체 검증 | **필수** |
| `/commit` | 커밋 메시지 생성 및 커밋 | **필수** |
| `/commit` | 커밋 메시지 생성 및 커밋 | **필수** |
| `/pr` | PR 생성 및 Qodo AI 리뷰 요청 | 권장 |
| `/check-review` | Qodo 리뷰 코멘트 읽기 및 이슈 브리핑 | 권장 |

### 단축 사이클

- 긴급 핫픽스: `/start` → `/spsc` → `/green` → `/verify` → `/commit`
- `/red` ~ `/refactor` 는 상황에 따라 생략 가능하나, `/verify` → `/commit` 은 항상 실행한다.
- PR 생성 후: `/pr` → `/review-brief` 로 리뷰 이슈를 확인한다.

## Git Conventions

Expand Down
62 changes: 23 additions & 39 deletions apps/mobile/README.md
Original file line number Diff line number Diff line change
@@ -1,50 +1,34 @@
# Welcome to your Expo app 👋
# apps/mobile (DEPRECATED — Frozen)

This is an [Expo](https://expo.dev) project created with [`create-expo-app`](https://www.npmjs.com/package/create-expo-app).
> **이 워크스페이스는 동결되었습니다.** 활성 개발은 `apps/twa`에서 진행됩니다.

## Get started
## 동결 사유

1. Install dependencies
- 본 앱은 `singcode.kr`을 `react-native-webview`로 래핑한 wrapper 앱입니다 (PR #203).
- [Google Play Minimum Functionality 정책](https://support.google.com/googleplay/android-developer/answer/9888379)상 단순 웹사이트 래퍼는 스토어 거절 위험이 큽니다.
- 대안으로 **TWA (Trusted Web Activity)** 방식을 채택했습니다. TWA는 Expo/RN 코드와 무관하므로 본 워크스페이스를 동결합니다.
- 미래에 PWA로 해결할 수 없는 네이티브 기능(생체 인증, 백그라운드 위치, 인앱 결제 등)이 필요해질 경우를 대비해 코드는 보존합니다.

```bash
npm install
```
## 동결 상태

2. Start the app
- **Expo SDK**: 52
- **React / React Native**: 18.3.1 / 0.76.7
- **마지막 활성 PR**: [#203 — WebView로 singcode.kr 표시 구현](https://github.com/GulSam00/singcode/pull/203)
- **동결 이슈**: #204
- pnpm 워크스페이스에서 제외됨 (`pnpm-workspace.yaml`의 `'!apps/mobile'`)
- `pnpm install`, `pnpm build`, `pnpm lint`, `pnpm check-types` 대상에서 자동 제외

```bash
npx expo start
```
## 재활성화 절차

In the output, you'll find options to open the app in a
이 앱을 다시 활용해야 한다면:

- [development build](https://docs.expo.dev/develop/development-builds/introduction/)
- [Android emulator](https://docs.expo.dev/workflow/android-studio-emulator/)
- [iOS simulator](https://docs.expo.dev/workflow/ios-simulator/)
- [Expo Go](https://expo.dev/go), a limited sandbox for trying out app development with Expo
1. `pnpm-workspace.yaml`에서 `'!apps/mobile'` 한 줄 제거
2. 레포 루트에서 `pnpm install` 실행
3. `apps/mobile/`에서 `pnpm start` (또는 `pnpm android` / `pnpm ios`)

You can start developing by editing the files inside the **app** directory. This project uses [file-based routing](https://docs.expo.dev/router/introduction).
> Expo SDK 52는 시간이 지나면서 deprecate됩니다. 재활성화 시점에는 SDK 업그레이드와 `package.json` 의존성 재정비가 선행되어야 할 수 있습니다.

## Get a fresh project
## 후속 작업

When you're ready, run:

```bash
npm run reset-project
```

This command will move the starter code to the **app-example** directory and create a blank **app** directory where you can start developing.

## Learn more

To learn more about developing your project with Expo, look at the following resources:

- [Expo documentation](https://docs.expo.dev/): Learn fundamentals, or go into advanced topics with our [guides](https://docs.expo.dev/guides).
- [Learn Expo tutorial](https://docs.expo.dev/tutorial/introduction/): Follow a step-by-step tutorial where you'll create a project that runs on Android, iOS, and the web.

## Join the community

Join our community of developers creating universal apps.

- [Expo on GitHub](https://github.com/expo/expo): View our open source platform and contribute.
- [Discord community](https://chat.expo.dev): Chat with Expo users and ask questions.
- 신규 워크스페이스: `apps/twa` (별도 이슈로 진행)
- `apps/web` PWA 셋업: manifest, Service Worker, `.well-known/assetlinks.json`
3 changes: 2 additions & 1 deletion apps/mobile/package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"name": "mobile",
"name": "mobile-deprecated",
"description": "DEPRECATED — frozen at Expo SDK 52. Replaced by apps/twa. See apps/mobile/README.md.",
"main": "expo-router/entry",
"version": "1.0.0",
"scripts": {
Expand Down
9 changes: 9 additions & 0 deletions apps/twa/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Android keystore — 외부 백업 필수, git에 절대 커밋하지 않는다
*.keystore
*.jks

# Bubblewrap 빌드 산출물
android/
output/
*.aab
*.apk
Loading
Loading