Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
92 commits
Select commit Hold shift + click to select a range
4c358c2
fix: ๋™์•„๋ฆฌ๋ฐฉ ์œ„์น˜ ํ…์ŠคํŠธ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋กœ ์ง€๋„ ๋ฒ„ํŠผ์ด ๊ฐ€๋ ค์ง€๋Š” ๋ฌธ์ œ ์ˆ˜์ •
suhyun113 May 13, 2026
8ec4827
feat(tracking): Mixpanel ์ด๋ฒคํŠธ ์ƒ์ˆ˜ ๋ฐ ๋””๋ฐ”์ด์Šค ํƒ€์ž… ์œ ํ‹ธ ์ถ”๊ฐ€
seongwon030 May 13, 2026
93d50ff
feat(tracking): ์Šคํฌ๋กค ๊นŠ์ด ๋งˆ์ผ์Šคํ†ค ํŠธ๋ž˜ํ‚น ํ›… ์ถ”๊ฐ€
seongwon030 May 13, 2026
73201a0
feat(tracking): ClubCard ๋…ธ์ถœยทํด๋ฆญ ํžˆํŠธ๋งต ํŠธ๋ž˜ํ‚น ๊ตฌํ˜„
seongwon030 May 13, 2026
98fee2a
docs(main): ์นด๋“œ ํžˆํŠธ๋งต ํŠธ๋ž˜ํ‚น ๋ถ„์„ ์‹œ๋‚˜๋ฆฌ์˜ค ๋ฌธ์„œํ™”
seongwon030 May 13, 2026
370ab02
docs(event): ์นด๋“œ ํžˆํŠธ๋งต ํŠธ๋ž˜ํ‚น ๋ฌธ์„œ ๊ฒฝ๋กœ ์ด๋™ ๋ฐ device_type ์†์„ฑ ์ถ”๊ฐ€
seongwon030 May 13, 2026
37957d1
chore(claude): mixpanel ๋ถ„์„ ์ปค๋งจ๋“œ ์ถ”๊ฐ€ ๋ฐ ์—…๋ฐ์ดํŠธ
seongwon030 May 13, 2026
021a140
docs(claude): mixpanel-ab ์ปค๋งจ๋“œ ๊ฐœ์„ 
seongwon030 May 13, 2026
e977d59
chore: gitignore ์—…๋ฐ์ดํŠธ
seongwon030 May 13, 2026
a930f89
fix(tracking): ClubCard Viewed ์†์„ฑ ์„ค๋ช… ์ˆ˜์ • ๋ฐ ์ดˆ๊ธฐ ์Šคํฌ๋กค ๊นŠ์ด ์ฒดํฌ ์ถ”๊ฐ€
seongwon030 May 13, 2026
4edc166
feat(tooling): ํฌ๋กœ์Šค ์—์ด์ „ํŠธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์ปค๋งจ๋“œ ์ถ”๊ฐ€
seongwon030 May 13, 2026
13ad0dc
feat(tooling): Jira ์Šคํ† ๋ฆฌ ์ž๋™ ์ƒ์„ฑ ์ปค๋งจ๋“œ ์ถ”๊ฐ€
seongwon030 May 13, 2026
8d06a61
feat: ์ปค๋ฒ„ ์ด๋ฏธ์ง€ ์—†์„ ๋•Œ ๋ถ„๊ณผ๋ณ„ ํƒœ๊ทธ ์ƒ‰์ƒ ํด๋ฐฑ ์ ์šฉ
suhyun113 May 13, 2026
6d75429
feat: ๋™์•„๋ฆฌ ํ”„๋กœํ•„ ๋กœ๊ณ  ํ…Œ๋‘๋ฆฌ ๋ฐ์Šคํฌํƒ‘/๋ชจ๋ฐ”์ผ ๋ถ„๋ฆฌ ์ ์šฉ
suhyun113 May 13, 2026
04501ae
feat: ํด๋Ÿฝ ์ƒ์„ธ ํŽ˜์ด์ง€ OG ํƒœ๊ทธ Edge Middleware ์ ์šฉ
seongwon030 May 14, 2026
c39984c
fix: @clubName ํ˜•์‹ ๋ผ์šฐํŠธ OG ํƒœ๊ทธ ๋ฏธ์ ์šฉ ๋ฒ„๊ทธ ์ˆ˜์ •
seongwon030 May 14, 2026
7520b28
fix: Edge Middleware fetch timeout 3์ดˆ ์ถ”๊ฐ€
seongwon030 May 14, 2026
0247971
docs: OG ํƒœ๊ทธ Edge Middleware ๊ตฌ์กฐ ๋ฐ Next.js ๋Œ€๋น„ ํ•œ๊ณ„์  ๋ฌธ์„œํ™”
seongwon030 May 14, 2026
55f3f9d
Merge pull request #1549 from Moadong/feature/#1548-social-og-tag-MOAโ€ฆ
seongwon030 May 16, 2026
72b31f3
refactor(tooling): jira-story.sh ์ธํ”„๋ผ ์ •๋ณด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์ด๋™
seongwon030 May 17, 2026
e18eccd
Merge branch 'develop-fe' into feature/#1545-cross-review-and-jira-stโ€ฆ
seongwon030 May 17, 2026
728d5dc
refactor(tooling): jira-story.sh curl ์•ˆ์ •์„ฑ ๊ฐœ์„ 
seongwon030 May 17, 2026
9f90ac2
Merge branch 'feature/#1545-cross-review-and-jira-story-MOA-854' of hโ€ฆ
seongwon030 May 17, 2026
cc0fb84
Merge pull request #1546 from Moadong/feature/#1545-cross-review-and-โ€ฆ
seongwon030 May 17, 2026
56d21f2
Merge branch 'develop-fe' into feature/#1541-card-heatmap-tracking-MOโ€ฆ
seongwon030 May 17, 2026
a15f2f9
fix(middleware): OG ๋ฏธ๋“ค์›จ์–ด ์ •๊ทœ์‹ ๋ ์•ต์ปค ๋ˆ„๋ฝ ์ˆ˜์ •
seongwon030 May 17, 2026
663f2c2
fix(middleware): ํ•œ๊ธ€ ํด๋Ÿฝ๋ช… URL ๋””์ฝ”๋”ฉ ๋ˆ„๋ฝ ์ˆ˜์ •
seongwon030 May 17, 2026
eb1e6fd
refactor(middleware): decodeURIComponent๋ฅผ safeDecode ํ—ฌํผ๋กœ ๊ต์ฒด
seongwon030 May 17, 2026
70fb202
Merge pull request #1554 from Moadong/fix/#1553-og-middleware-anchor-โ€ฆ
seongwon030 May 17, 2026
4efb4c4
Merge pull request #1512 from Moadong/feature/#1509-control-horizontaโ€ฆ
seongwon030 May 17, 2026
3ea3a9c
feat(main): ๋ฐฐ๋„ˆ ๋กœ๋”ฉ ์ค‘ shimmer ์Šค์ผˆ๋ ˆํ†ค UI ์ถ”๊ฐ€
seongwon030 May 17, 2026
127b8cf
refactor(hooks): React Query ์บ์‹ฑ ์ „๋žต ๊ฐœ์„ 
seongwon030 May 17, 2026
71c0356
Merge pull request #1559 from Moadong/feature/#1558-react-query-cacheโ€ฆ
seongwon030 May 17, 2026
f12cf07
feat(main): ์ด๋ฏธ์ง€ ๋กœ๋“œ ์™„๋ฃŒ ์‹œ์ ๊นŒ์ง€ ๋ฐฐ๋„ˆ ์Šค์ผˆ๋ ˆํ†ค ์œ ์ง€
seongwon030 May 17, 2026
3a2b5ac
Merge pull request #1557 from Moadong/feature/#1556-banner-skeleton-Mโ€ฆ
seongwon030 May 17, 2026
97ae008
feat(club-detail): ๋„ค์ด๋ฒ„ ๋งต ํด๋ฆญ Mixpanel ์ด๋ฒคํŠธ ํŠธ๋ž˜ํ‚น ์ถ”๊ฐ€
seongwon030 May 18, 2026
11e8b8f
chore(scripts): Jira-GitHub ์ด์Šˆ ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€
seongwon030 May 18, 2026
8ad3284
feat(tracking): ๋ˆ„๋ฝ๋œ Mixpanel ์ด๋ฒคํŠธ ํŠธ๋ž˜ํ‚น ์ถ”๊ฐ€
seongwon030 May 18, 2026
0d82196
chore(commands): ์ด๋ฒคํŠธ ํŠธ๋ž˜ํ‚น ๊ฐ์‚ฌ Claude ์ปค๋งจ๋“œ ์ถ”๊ฐ€
seongwon030 May 18, 2026
17a58fc
chore(commands): PRD ๊ธฐ๋ฐ˜ ํ•˜์œ„ ์ž‘์—… ์ผ๊ด„ ์ƒ์„ฑ Claude ์ปค๋งจ๋“œ ์ถ”๊ฐ€
seongwon030 May 18, 2026
904297f
Merge pull request #1543 from Moadong/fix/#1532-club-location-overfloโ€ฆ
suhyun113 May 18, 2026
87aa639
feat(tooling): jira-task.sh ๋‹ด๋‹น์ž ์ž๋™ ์ง€์ • ๋ฐ ๋ณต์ˆ˜ ๋ผ๋ฒจ ์ง€์›
suhyun113 May 18, 2026
2328a18
chore(commands): /jira-task ๋Œ€ํ™”ํ˜• Claude ์ปค๋งจ๋“œ ์ถ”๊ฐ€
suhyun113 May 18, 2026
9002c3c
fix(commands): /jira-task ๋ธŒ๋žœ์น˜๋ช… ํ˜•์‹์„ GitHub Actions ๊ทœ์น™์— ๋งž๊ฒŒ ์ˆ˜์ •
suhyun113 May 18, 2026
f886fd7
feat(tooling): /jira-task ๋งˆ๊ฐ์ผ ์ž…๋ ฅ ๋ฐ ๋ธŒ๋žœ์น˜๋ช… ํ˜•์‹ ์ˆ˜์ •
suhyun113 May 18, 2026
9843ec4
fix(tooling): jq ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ OS๋ณ„ ๋ถ„๊ธฐ ๋ฐ payload ํŒŒ์ผ ์ „๋‹ฌ๋กœ Windows ํ˜ธํ™˜์„ฑ ๊ฐœ์„ 
suhyun113 May 18, 2026
9f6b491
feat(tooling): ํ™œ์„ฑ ์Šคํ”„๋ฆฐํŠธ ์ž๋™ ๋ฐฐ์น˜ ๋ฐ ๋‹ด๋‹น์ž ์ž๋™ ์ง€์ •
suhyun113 May 18, 2026
e490090
feat(tooling): ์Šคํ† ๋ฆฌ ์ƒ์„ฑ ์‹œ ์—ํ”ฝ(์ƒ์œ„ํ•ญ๋ชฉ) ์ž๋™ ์ง€์ • ์ง€์›
suhyun113 May 18, 2026
6cdc110
Merge pull request #1569 from Moadong/refactor/#1568-jira-story-scripโ€ฆ
suhyun113 May 18, 2026
fcdaddd
fix(components): setState updater ๋‚ด ํŠธ๋ž˜ํ‚น ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ ๋ถ„๋ฆฌ ๋ฐ ์ด๋ฒคํŠธ๋ช… ์ˆ˜์ •
seongwon030 May 18, 2026
158a9b1
Merge pull request #1563 from Moadong/feature/#1562-add-naver-map-eveโ€ฆ
seongwon030 May 18, 2026
8cdc350
Merge branch 'develop-fe' into feature/#1541-card-heatmap-tracking-MOโ€ฆ
seongwon030 May 18, 2026
9611881
refactor(main): ClubCard handleClick์—์„œ getBoundingClientRect() ์ด์ค‘ ํ˜ธ์ถœ ์ œ๊ฑฐ
seongwon030 May 18, 2026
59af3f5
fix(webview): PromotionClubCTA ์›น๋ทฐ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋™์ž‘ ์ˆ˜์ •
seongwon030 May 19, 2026
b3c8782
fix: lint error
seongwon030 May 19, 2026
7996ef0
chore(tooling): RN ์—์ด์ „ํŠธ ์Šฌ๋ž˜์‹œ ์ปค๋งจ๋“œ ์ถ”๊ฐ€, superpowers ํด๋” gitignore ์ฒ˜๋ฆฌ
seongwon030 May 19, 2026
2e7df45
chore(tooling): .claude/agents/ ํŒ€ ๊ณต์œ  ์ถ”์  ์ถ”๊ฐ€, RN ์—์ด์ „ํŠธ ํŒŒ์ผ ์ปค๋ฐ‹
seongwon030 May 19, 2026
84de106
fix(main): ClubCard impression ์ฒด๋ฅ˜์‹œ๊ฐ„ ์ธก์ • ๋ฐ ํŠธ๋ž˜ํ‚น ๋ฐ์ดํ„ฐ ํ’ˆ์งˆ ๊ฐœ์„ 
seongwon030 May 19, 2026
7595958
docs(main): ํžˆํŠธ๋งต ํŠธ๋ž˜ํ‚น ๋ฌธ์„œ๋ฅผ ์‹ค์ œ ๊ตฌํ˜„์— ๋งž๊ฒŒ ์ˆ˜์ •
seongwon030 May 19, 2026
d0327f6
fix(promotion): ํ™๋ณด๊ฒŒ์‹œํŒ ํ–‰์‚ฌ ์นด๋“œ ์•„์ด์ฝ˜ ํฌ๊ธฐ ๋ฐ ๋ฐ˜์‘ํ˜• ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ ์ˆ˜์ •
suhyun113 May 19, 2026
2b702a9
fix(promotion): ์œ„์น˜ ์•„์ด์ฝ˜ SVG๋ฅผ 14x14 ๊ทœ๊ฒฉ์œผ๋กœ ๊ต์ฒด
suhyun113 May 19, 2026
8901696
refactor(promotion): ํ–‰์‚ฌ ์นด๋“œ ์•„์ด์ฝ˜์„ ์ธ๋ผ์ธ SVG ์ปดํฌ๋„ŒํŠธ ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ
suhyun113 May 19, 2026
d3eaf2d
Merge pull request #1585 from Moadong/fix/#1570-promotion-card-icon-fโ€ฆ
suhyun113 May 19, 2026
31e26e3
fix(tooling): cross-review.sh ์ธ์ž ๊ฒ€์ฆ ๊ฐ•ํ™”
seongwon030 May 20, 2026
4886a11
docs: API ๋ฌธ์„œ ์ค‘๋ณต ํ—ค๋” ์ œ๊ฑฐ ๋ฐ regex ํŒจํ„ด ์ˆ˜์ •
seongwon030 May 20, 2026
4afd6b7
fix(main): ๋ฐฐ๋„ˆ ์ฒซ ์ด๋ฏธ์ง€ ๋กœ๋“œ ์‹คํŒจ ์‹œ isImageLoaded ์ฒ˜๋ฆฌ
seongwon030 May 20, 2026
b890a43
fix(main): ๋ฐฐ๋„ˆ ์ด๋ฏธ์ง€ ๋กœ๋“œ ์‹คํŒจ ์‹œ ๊นจ์ง„ ์ด๋ฏธ์ง€ ์ˆจ๊น€ ์ฒ˜๋ฆฌ
seongwon030 May 20, 2026
f1cb73e
refactor(main): ๋ฐฐ๋„ˆ ์ด๋ฏธ์ง€ ์˜ค๋ฅ˜ ํ•ธ๋“ค๋Ÿฌ๋ฅผ handleImageError๋กœ ๋ถ„๋ฆฌ
seongwon030 May 20, 2026
bf07e10
feat(tooling): cross-review.sh ๋ณ€๊ฒฝ์‚ฌํ•ญ ์—†์„ ์‹œ ๋ธŒ๋žœ์น˜ ์ปค๋ฐ‹ diff ์ž๋™ ํด๋ฐฑ
seongwon030 May 20, 2026
c0d86e4
fix: ๋ถ„๊ณผ ์ •๋ณด ์—†์„ ๋•Œ ๊ธฐ๋ณธ ์ปค๋ฒ„ ์ด๋ฏธ์ง€ ํ‘œ์‹œ
suhyun113 May 20, 2026
0608bea
Merge pull request #1589 from Moadong/fix/05-20
seongwon030 May 20, 2026
03121b7
Merge pull request #1580 from Moadong/feature/#1579-add-rn-subagent-cโ€ฆ
seongwon030 May 20, 2026
7f27b94
Merge pull request #1542 from Moadong/feature/#1541-card-heatmap-tracโ€ฆ
seongwon030 May 20, 2026
c420a48
fix: TAG_COLORS์— ๋งคํ•‘ ์—†๋Š” ์นดํ…Œ๊ณ ๋ฆฌ์ผ ๋•Œ ๊ธฐ๋ณธ ์ปค๋ฒ„ ์ด๋ฏธ์ง€ ํด๋ฐฑ ์ ์šฉ
suhyun113 May 20, 2026
1cedf9b
Merge pull request #1547 from Moadong/feature/#1544-club-cover-fallbaโ€ฆ
suhyun113 May 20, 2026
1f4028d
feat(main): ํด๋Ÿฝ์นด๋“œ impression ํŠธ๋ž˜ํ‚น ์ „๋ฉด ๊ฐœํŽธ
seongwon030 May 21, 2026
f31bb48
feat(main): ๋ฐฐ๋„ˆ ์Šฌ๋ผ์ด๋“œ ๋„ค๋น„๊ฒŒ์ด์…˜ ํŠธ๋ž˜ํ‚น ์ถ”๊ฐ€
seongwon030 May 21, 2026
8677801
fix(tooling): cross-review.sh codex exec โ†’ codex review๋กœ ๋ณ€๊ฒฝ
seongwon030 May 21, 2026
6c595a3
docs: ๋ฐฐ๋„ˆ ์ด๋ฒคํŠธ ํŠธ๋ž˜ํ‚น ์ถ”๊ฐ€
seongwon030 May 21, 2026
0a7ddd0
Create pr-auto-label.yml
seongwon030 May 21, 2026
59c0080
docs: Mixpanel ์ด๋ฒคํŠธ ํŠธ๋ž˜ํ‚น ์ปจ๋ฒค์…˜ ์ถ”๊ฐ€
seongwon030 May 21, 2026
1a23303
fix(webview): PromotionClubCTA ๋„ค๋น„๊ฒŒ์ด์…˜์„ clubId ๋Œ€์‹  clubName ๊ธฐ๋ฐ˜์œผ๋กœ ํ†ต์ผ
seongwon030 May 21, 2026
3442d45
fix(tracking): intersectStart ๋ฐ˜๋ณต ๋ฎ์–ด์“ฐ๊ธฐ ๋ฐฉ์ง€ ๋ฐ ๋งˆํฌ๋‹ค์šด ์ฝ”๋“œํŽœ์Šค ์–ธ์–ด ์ง€์ •
seongwon030 May 21, 2026
a94a8d5
style: Prettier ํฌ๋งทํŒ… ์ˆ˜์ •
seongwon030 May 21, 2026
d442209
Merge pull request #1578 from Moadong/fix/#1577-promotion-club-cta-weโ€ฆ
seongwon030 May 21, 2026
36323a7
fix(tracking): ๋ฐฐ๋„ˆ ๋„ค๋น„๊ฒŒ์ด์…˜ ์ด๋ฒคํŠธ current_index โ†’ from_index ๋กœ ๋ณ€๊ฒฝ
seongwon030 May 21, 2026
9a0dbb2
fix(tracking): ClubCard impression fly-by ํ•„ํ„ฐ๋ง ์ถ”๊ฐ€ (MIN_DWELL_MS=300ms)
seongwon030 May 21, 2026
20f97bd
Merge pull request #1593 from Moadong/feature/#1592-main-card-heatmapโ€ฆ
seongwon030 May 21, 2026
cc1bee2
fix: ab-test ์ปค๋งจ๋“œ ์ ˆ๋Œ€๊ฒฝ๋กœ๋กœ ๋ณ€๊ฒฝ
seongwon030 May 22, 2026
e07e3ca
Merge pull request #1598 from Moadong/fix/check-ab-command
seongwon030 May 22, 2026
c2a865e
refactor(tracking): useScrollTracking mixpanel ์ง์ ‘ ํ˜ธ์ถœ์„ useMixpanelTracโ€ฆ
suhyun113 May 22, 2026
9eb0385
fix(middleware): OG ์‘๋‹ต์— Edge ์บ์‹œ ํ—ค๋” ์ถ”๊ฐ€
suhyun113 May 22, 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
75 changes: 75 additions & 0 deletions .github/workflows/pr-auto-label.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
name: PR Auto Label

on:
pull_request:
types: [opened, edited, synchronize]
branches: [main, develop-fe, develop/be]

jobs:
label:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write

steps:
- name: Auto Label PR
uses: actions/github-script@v7
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

โš ๏ธ Potential issue | ๐ŸŸ  Major | โšก Quick win

๐Ÿงฉ Analysis chain

๐Ÿ Script executed:

#!/bin/bash
# ์›Œํฌํ”Œ๋กœ์—์„œ SHA ๋ฏธ๊ณ ์ • uses ํƒ์ง€
rg -n '^\s*uses:\s*[^@]+@(v[0-9]+|main|master)$' .github/workflows

Repository: Moadong/moadong

Length of output: 3279


๐Ÿ Script executed:

#!/bin/bash
set -euo pipefail
sed -n '1,120p' .github/workflows/pr-auto-label.yml | nl -ba | sed -n '1,120p'

Repository: Moadong/moadong

Length of output: 102


๐Ÿ Script executed:

#!/bin/bash
set -euo pipefail
cat -n .github/workflows/pr-auto-label.yml | sed -n '1,120p'

Repository: Moadong/moadong

Length of output: 3399


๐Ÿ Script executed:

#!/bin/bash
set -euo pipefail
echo "== pr-auto-label.yml: uses lines =="
rg -n '^\s*uses:\s*' .github/workflows/pr-auto-label.yml
echo
echo "== pr-auto-label.yml: full file (for small file) =="
wc -l .github/workflows/pr-auto-label.yml
cat .github/workflows/pr-auto-label.yml
echo
echo "== repo-wide: github-script `@v7` usages =="
rg -n 'actions/github-script@v[0-9]+' .github/workflows

Repository: Moadong/moadong

Length of output: 3165


๐Ÿ Script executed:

#!/bin/bash
# ์›Œํฌํ”Œ๋กœ์—์„œ SHA ๋ฏธ๊ณ ์ • uses ํƒ์ง€
rg -n '^\s*uses:\s*[^@]+@(v[0-9]+|main|master)$' .github/workflows

Repository: Moadong/moadong

Length of output: 3279


๐Ÿ Script executed:

#!/bin/bash
# ์›Œํฌํ”Œ๋กœ์—์„œ SHA ๋ฏธ๊ณ ์ • uses ํƒ์ง€
rg -n '^\s*uses:\s*[^@]+@(v[0-9]+|main|master)$' .github/workflows

Repository: Moadong/moadong

Length of output: 3279


๐Ÿ Script executed:

#!/bin/bash
# ์›Œํฌํ”Œ๋กœ์—์„œ SHA ๋ฏธ๊ณ ์ • uses ํƒ์ง€
rg -n '^\s*uses:\s*[^@]+@(v[0-9]+|main|master)$' .github/workflows

Repository: Moadong/moadong

Length of output: 3279


๐Ÿ Script executed:

#!/bin/bash
# ์›Œํฌํ”Œ๋กœ์—์„œ SHA ๋ฏธ๊ณ ์ • uses ํƒ์ง€
rg -n '^\s*uses:\s*[^@]+@(v[0-9]+|main|master)$' .github/workflows

Repository: Moadong/moadong

Length of output: 3279


๐Ÿ Script executed:

#!/bin/bash
# ์›Œํฌํ”Œ๋กœ์—์„œ SHA ๋ฏธ๊ณ ์ • uses ํƒ์ง€
rg -n '^\s*uses:\s*[^@]+@(v[0-9]+|main|master)$' .github/workflows

Repository: Moadong/moadong

Length of output: 3279


actions/github-script@v7๋ฅผ ์ปค๋ฐ‹ SHA๋กœ ๊ณ ์ •ํ•˜์„ธ์š”
.github/workflows/pr-auto-label.yml์˜ uses: actions/github-script@v7๋Š” ํƒœ๊ทธ ์ฐธ์กฐ๋ผ ์—…์ŠคํŠธ๋ฆผ ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ๋™์ž‘์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์–ด ๋ฆด๋ฆฌ์ฆˆ ์žฌํ˜„์„ฑ์ด ๋–จ์–ด์ง‘๋‹ˆ๋‹ค. ์ปค๋ฐ‹ SHA๋กœ ํ•€๋‹ํ•ด ์ฃผ์„ธ์š”.

๐Ÿ”’ ์ œ์•ˆ ๋ณ€๊ฒฝ
-        uses: actions/github-script@v7
+        uses: actions/github-script@<FULL_LENGTH_COMMIT_SHA>
๐Ÿงฐ Tools
๐Ÿช› zizmor (1.25.2)

[error] 17-17: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)

๐Ÿค– Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/pr-auto-label.yml at line 17, ํ˜„์žฌ ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ ์‚ฌ์šฉ ์ค‘์ธ
actions/github-script@v7 ํƒœ๊ทธ๋Š” ์—…์ŠคํŠธ๋ฆผ ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ๋™์ž‘์ด ๋ฐ”๋€” ์ˆ˜ ์žˆ์œผ๋‹ˆ, 'uses:
actions/github-script@v7'๋ฅผ ํ•ด๋‹น ์•ก์…˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ํŠน์ • ์ปค๋ฐ‹ SHA๋กœ ๊ต์ฒดํ•˜์—ฌ ํ•€๋‹ํ•˜์„ธ์š”;
.github/workflows/pr-auto-label.yml์—์„œ 'uses' ํ•ญ๋ชฉ์„ ์ฐพ์•„ actions/github-script ๋ ˆํฌ์—์„œ
v7 ํƒœ๊ทธ์™€ ๋Œ€์‘ํ•˜๋Š” ์ตœ์‹  ์ปค๋ฐ‹ SHA๋กœ ๋ฐ”๊พธ๊ณ  ์ปค๋ฐ‹ SHA ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•ด ๊ณ ์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

with:
script: |
const title = context.payload.pull_request.title.toLowerCase();
const prNumber = context.payload.pull_request.number;

// 1. PR ์ œ๋ชฉ ๊ธฐ๋ฐ˜ ํƒ€์ž… ๋ผ๋ฒจ (conventional commit)
const typeMap = [
{ pattern: /^feat/, label: 'โœจ Feature' },
{ pattern: /^hotfix/, label: '๐Ÿš€ hotfix' },
{ pattern: /^fix/, label: '๐Ÿ› Fix' },
{ pattern: /^bug/, label: '๐Ÿž Bug' },
{ pattern: /^refactor/, label: '๐Ÿ”จ Refactor' },
{ pattern: /^docs/, label: '๐Ÿ“ƒ Docs' },
{ pattern: /^chore/, label: '๐Ÿš— Chore' },
{ pattern: /^style/, label: '๐ŸŽจ Design' },
{ pattern: /^test/, label: 'โœ… Test' },
{ pattern: /^ci|^cd/, label: '๐Ÿ“ฆ CI/CD' },
{ pattern: /^deploy|^release/, label: '๐ŸŒ Deploy' },
{ pattern: /^setup|^setting/, label: 'โš™ Setting' },
{ pattern: /^api/, label: '๐Ÿ“ฌ API' },
];

const labelsToAdd = [];

for (const { pattern, label } of typeMap) {
if (pattern.test(title)) {
labelsToAdd.push(label);
break;
}
}

// AB TEST
if (/experiment|ab.?test/i.test(title)) labelsToAdd.push('AB TEST');

// AI ํ™œ์šฉ ๊ฐ์ง€ (์ œ๋ชฉ ๋˜๋Š” ๋ณธ๋ฌธ)
const body = context.payload.pull_request.body ?? '';
if (/claude|codex/i.test(title + body)) labelsToAdd.push('๐ŸšAI');

// 2. ๋ณ€๊ฒฝ ํŒŒ์ผ ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ FE/BE ๋ผ๋ฒจ
const { data: files } = await github.rest.pulls.listFiles({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: prNumber,
});

const filenames = files.map(f => f.filename);
if (filenames.some(f => f.startsWith('frontend/'))) labelsToAdd.push('๐Ÿ’ป FE');
if (filenames.some(f => f.startsWith('backend/'))) labelsToAdd.push('๐Ÿ’พ BE');

if (labelsToAdd.length > 0) {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
labels: labelsToAdd,
});
core.info(`Added labels: ${labelsToAdd.join(', ')}`);
}
121 changes: 121 additions & 0 deletions frontend/.claude/agents/RN์—์ด์ „ํŠธ.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
# RN ์—์ด์ „ํŠธ (React Native)

๋ชจ์•„๋™ React Native + Expo ํ”„๋กœ์ ํŠธ ์ „๋‹ด ์—์ด์ „ํŠธ.
WebView ๋ธŒ๋ฆฟ์ง€, ๋”ฅ๋งํฌ/๋ผ์šฐํŒ…, Push ์•Œ๋ฆผ, API/์ธ์ฆ ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์ˆ˜์ •ํ•œ๋‹ค.

## ํ”„๋กœ์ ํŠธ ๊ฒฝ๋กœ

/Users/seokyoung-won/Desktop/moadong-react-native/

## ๊ธฐ์ˆ  ์Šคํƒ

- Expo SDK + Expo Router (ํŒŒ์ผ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…)
- React Native New Architecture (`newArchEnabled: true`)
- React Compiler (์‹คํ—˜์  ๊ธฐ๋Šฅ)
- Axios (`publicApi` / `authApi`) โ€” `api` default export๋Š” deprecated
- React Context (Redux/Zustand ๋ฏธ์‚ฌ์šฉ)
- Firebase (Remote Config, FCM)
- Mixpanel ์• ๋„๋ฆฌํ‹ฑ์Šค

## ์•„ํ‚คํ…์ฒ˜

### ๋ผ์šฐํŒ… ๊ตฌ์กฐ

```
app/
_layout.tsx # ๋ฃจํŠธ ๋ ˆ์ด์•„์›ƒ: ๋ถ€ํŠธ์ŠคํŠธ๋žฉ, ์Šคํ”Œ๋ž˜์‹œ, ๊ฐ•์ œ ์—…๋ฐ์ดํŠธ, Context
(tabs)/
index.tsx # ํ™ˆ ํƒญ
explore.tsx # ํƒ์ƒ‰ ํƒญ
more.tsx # ๋”๋ณด๊ธฐ ํƒญ
club/[id].tsx # ๋™์•„๋ฆฌ ์ƒ์„ธ (WebView)
clubDetail/[id].tsx # ๋™์•„๋ฆฌ ์ƒ์„ธ (๋„ค์ดํ‹ฐ๋ธŒ)
webview/[slug].tsx # ๋ฒ”์šฉ WebView ํ™”๋ฉด
modal.tsx # ๋ชจ๋‹ฌ
```
Comment thread
seongwon030 marked this conversation as resolved.

### UI ๋ ˆ์ด์–ด ํŒจํ„ด

๊ธฐ๋Šฅ๋ณ„ ํด๋” `ui/<feature>/` ํ•˜์œ„ ๊ตฌ์กฐ (ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ์ƒ์„ฑ):

- `hook/` โ€” ๋ฐ์ดํ„ฐ ํŽ˜์นญ ํ›… (์˜ˆ: `useClubs`, `useSubscribedClubs`)
- `model/` โ€” ํŒŒ์ƒ ์ƒํƒœ / ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ (์„ ํƒ)
- `components/` โ€” UI ์ปดํฌ๋„ŒํŠธ
- `index.ts` โ€” barrel export

### ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ์ˆœ์„œ (`app/_layout.tsx`)

1. Firebase Remote Config ๊ฐ•์ œ ์—…๋ฐ์ดํŠธ ์ฒดํฌ
2. iOS ATT ๊ถŒํ•œ ์š”์ฒญ
3. ์•ก์„ธ์Šค ํ† ํฐ ์กฐํšŒ/์ƒ์„ฑ
4. FCM ํ† ํฐ ๋“ฑ๋ก
5. ์„œ๋ฒ„์—์„œ ๊ตฌ๋… ๋™์•„๋ฆฌ ๋ชฉ๋ก ๋™๊ธฐํ™”
6. Mixpanel ์ดˆ๊ธฐํ™”

### API ํด๋ผ์ด์–ธํŠธ (`services/api.ts`)

- `publicApi` โ€” ์ธ์ฆ ์—†๋Š” ์š”์ฒญ
- `authApi` โ€” Bearer ํ† ํฐ ์ž๋™ ์ฒจ๋ถ€, 401 ์‹œ `/auth/student`๋กœ ์ž๋™ ๊ฐฑ์‹ 
- โš ๏ธ `api` (default export) ๋Š” deprecated โ€” ์‹ ๊ทœ ์ฝ”๋“œ์— ์‚ฌ์šฉ ๊ธˆ์ง€

### ์ƒํƒœ ๊ด€๋ฆฌ (Context)

- `SubscribedClubsProvider` (`contexts/subscribed-clubs-context.tsx`) โ€” ๊ตฌ๋… ๋™์•„๋ฆฌ ๋ชฉ๋ก, ํ† ๊ธ€, ์„œ๋ฒ„ ๋™๊ธฐํ™”
- `MixpanelProvider` (`contexts/mixpanel-context.tsx`) โ€” ์• ๋„๋ฆฌํ‹ฑ์Šค

## ์‹œ๋‚˜๋ฆฌ์˜ค๋ณ„ ํ•ต์‹ฌ ํŒŒ์ผ

### WebView ๋ธŒ๋ฆฟ์ง€

์›น โ†” RN ๋ฉ”์‹œ์ง€ ํ†ต์‹  ๊ด€๋ จ ํŒŒ์ผ:

- `app/club/[id].tsx` โ€” WebView ์ปดํฌ๋„ŒํŠธ, `onMessage` ํ•ธ๋“ค๋Ÿฌ
- `app/webview/[slug].tsx` โ€” ๋ฒ”์šฉ WebView, postMessage ์ฒ˜๋ฆฌ
- ํ”„๋ก ํŠธ์—”๋“œ ์ชฝ: `src/utils/webviewBridge.ts` (์ฐธ์กฐ์šฉ, ์ˆ˜์ • ๋ถˆ๊ฐ€)

### ๋”ฅ๋งํฌ / ๋ผ์šฐํŒ…

- `app/_layout.tsx` โ€” Linking ์„ค์ •, ์ดˆ๊ธฐ ๋ผ์šฐํŠธ ์ฒ˜๋ฆฌ
- `app.json` โ€” ๋”ฅ๋งํฌ ์Šคํ‚ด(`moadongapp://`), associated domain(`www.moadong.com`)
- Expo Router ํŒŒ์ผ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…: `app/` ๋””๋ ‰ํ† ๋ฆฌ์— ํŒŒ์ผ ์ถ”๊ฐ€ = ๋ผ์šฐํŠธ ์ž๋™ ๋“ฑ๋ก

### Push ์•Œ๋ฆผ

- `app/_layout.tsx` 4๋ฒˆ์งธ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ๋‹จ๊ณ„์—์„œ FCM ํ† ํฐ ๋“ฑ๋ก
- `services/api.ts` โ€” ํ† ํฐ ๋“ฑ๋ก API ํ˜ธ์ถœ
- `google-services.json` / `GoogleService-Info.plist` โ€” Firebase ์„ค์ • ํŒŒ์ผ

### API / ์ธ์ฆ

- `services/api.ts` โ€” Axios ์ธ์Šคํ„ด์Šค ์ •์˜
- `contexts/subscribed-clubs-context.tsx` โ€” `authApi` ์‚ฌ์šฉ ์˜ˆ์‹œ
- ํ™˜๊ฒฝ ๋ณ€์ˆ˜: `EXPO_PUBLIC_BASE_URL` (`.env` ํŒŒ์ผ)

## ๋””์ž์ธ ์‹œ์Šคํ…œ (`constants/theme.ts`)

- `MainColors` โ€” ์˜ค๋ Œ์ง€ ๊ณ„์—ด (`main` = `#FF5414`)
- `TagColors` โ€” ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์ƒ‰์ƒ (๋ด‰์‚ฌ/ํ•™์ˆ /์ข…๊ต/์ทจ๋ฏธ๊ต์–‘/์šด๋™/๊ณต์—ฐ)
- `Spacing` โ€” 4px ๊ธฐ์ค€: `xs`(4) `sm`(8) `md`(16) `lg`(24) `xl`(32) `xxl`(40) `xxxl`(48)
- `BorderRadius` โ€” `xs`(4) `sm`(8) `md`(12) `lg`(16) `xl`(20) `full`(9999)
- ํฐํŠธ: Pretendard. RN `Text` ๋Œ€์‹  `@/components/moa-text`์˜ `<MoaText type="...">` ์‚ฌ์šฉ

## ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜

- ํŒŒ์ผ๋ช…: `kebab-case.tsx`
- ์ปดํฌ๋„ŒํŠธ: `PascalCase`
- ํ›…: `use` ์ ‘๋‘์‚ฌ + `camelCase`
- **named export ์„ ํ˜ธ** โ€” default export๋Š” `app/` ํ™”๋ฉด ์ปดํฌ๋„ŒํŠธ์—๋งŒ ํ—ˆ์šฉ
- ๊ฒฝ๋กœ ๋ณ„์นญ: `@/` โ†’ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ
- ํ”Œ๋žซํผ๋ณ„ ํŒŒ์ผ: `.ios.tsx` / `.web.ts` ์ ‘๋ฏธ์‚ฌ

## ์ˆ˜์ • ์ฒดํฌ๋ฆฌ์ŠคํŠธ

์ฝ”๋“œ ์ˆ˜์ • ์‹œ ๋ฐ˜๋“œ์‹œ ํ™•์ธ:

- [ ] `authApi` / `publicApi` ๊ตฌ๋ถ„ ์˜ฌ๋ฐ”๋ฅธ๊ฐ€? (`api` default ์‚ฌ์šฉ ๊ธˆ์ง€)
- [ ] ํŒŒ์ผ๋ช…์ด `kebab-case`์ธ๊ฐ€?
- [ ] named export๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๊ฐ€? (`app/` ํ™”๋ฉด ์ œ์™ธ)
- [ ] `@/` ๊ฒฝ๋กœ ๋ณ„์นญ์„ ์‚ฌ์šฉํ–ˆ๋Š”๊ฐ€? (์ƒ๋Œ€ ๊ฒฝ๋กœ ์ง€์–‘)
- [ ] TypeScript ํƒ€์ž…์ด ๋ช…์‹œ์ ์ธ๊ฐ€? (`any` ๊ธˆ์ง€)
- [ ] ๋””์ž์ธ ํ† ํฐ์„ `constants/theme.ts`์—์„œ ๊ฐ€์ ธ์™”๋Š”๊ฐ€?
- [ ] ํ…์ŠคํŠธ์— RN `<Text>` ๋Œ€์‹  `<MoaText type="...">` (`@/components/moa-text`)๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๊ฐ€?
22 changes: 22 additions & 0 deletions frontend/.claude/commands/RN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
description: React Native ํ”„๋กœ์ ํŠธ ๋ถ„์„ ๋ฐ ์ˆ˜์ •์„ RN ์—์ด์ „ํŠธ์—๊ฒŒ ์œ„์ž„
allowed-tools: Agent
---

RN(React Native) ํ”„๋กœ์ ํŠธ ์ž‘์—…์„ RN์—์ด์ „ํŠธ ์„œ๋ธŒ์—์ด์ „ํŠธ์—๊ฒŒ ์œ„์ž„ํ•ฉ๋‹ˆ๋‹ค.

## ์ž‘์—… ๋‚ด์šฉ

$ARGUMENTS

## ์ง€์‹œ์‚ฌํ•ญ

`$ARGUMENTS`๊ฐ€ ๋น„์–ด ์žˆ์œผ๋ฉด, ์‚ฌ์šฉ์ž์—๊ฒŒ ์–ด๋–ค RN ๊ด€๋ จ ์ž‘์—…์ด ํ•„์š”ํ•œ์ง€ ๋ฌผ์–ด๋ณธ ๋’ค RN์—์ด์ „ํŠธ๋ฅผ ํ˜ธ์ถœํ•˜์„ธ์š”.

Agent ํˆด๋กœ `RN์—์ด์ „ํŠธ` ์„œ๋ธŒ์—์ด์ „ํŠธ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์œ„ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜์„ธ์š”.

๋‹ค์Œ ์ปจํ…์ŠคํŠธ๋ฅผ ์—์ด์ „ํŠธ์—๊ฒŒ ์ „๋‹ฌํ•˜์„ธ์š”:

- RN ํ”„๋กœ์ ํŠธ ๊ฒฝ๋กœ: `/Users/seokyoung-won/Desktop/moadong-react-native/`
- ํ˜„์žฌ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ ๊ฒฝ๋กœ: `/Users/seokyoung-won/Desktop/moadong/frontend/`
- ๋‘ ํ”„๋กœ์ ํŠธ๊ฐ€ WebView๋กœ ์—ฐ๋™๋˜์–ด ์žˆ์Œ (ํ”„๋ก ํŠธ์—”๋“œ ์›น โ†’ RN WebView)
90 changes: 90 additions & 0 deletions frontend/.claude/commands/check-tracking.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
# ์ด๋ฒคํŠธ ํŠธ๋ž˜ํ‚น ๊ฐ์‚ฌ (Event Tracking Audit)

`src/constants/eventName.ts`์˜ ์ •์˜์™€ ์‹ค์ œ ์ฝ”๋“œ๋ฒ ์ด์Šค ์‚ฌ์šฉ ํ˜„ํ™ฉ์„ ๋น„๊ตํ•ด Mixpanel ํŠธ๋ž˜ํ‚น ๋ˆ„๋ฝ์„ ์ ๊ฒ€ํ•ฉ๋‹ˆ๋‹ค.

> **์‹คํ–‰ ์œ„์น˜**: ์•„๋ž˜ ๋ชจ๋“  ๋ช…๋ น์€ **`frontend/` ๋””๋ ‰ํ„ฐ๋ฆฌ**์—์„œ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
> ๋ชจ๋…ธ๋ ˆํฌ ๋ฃจํŠธ์—์„œ ์‹คํ–‰ํ•˜๋ฉด `src/` ๊ฒฝ๋กœ๋ฅผ ์ฐพ์ง€ ๋ชปํ•ด ๊ฒฐ๊ณผ๊ฐ€ 0๊ฑด์œผ๋กœ ๋‚˜์˜ต๋‹ˆ๋‹ค.

## ๋ถ„์„ ์ˆœ์„œ

์•„๋ž˜ bash ๋ช…๋ น์„ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ˆ˜์ง‘ํ•˜์„ธ์š”.

### Step 1: ์ •์˜๋œ ์ด๋ฒคํŠธ ๋ชฉ๋ก ์ถ”์ถœ

```bash
grep -E "^\s+[A-Z_]+:" src/constants/eventName.ts
```
Comment thread
seongwon030 marked this conversation as resolved.

`USER_EVENT` ์•ˆ์˜ ํ‚ค๋งŒ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค (`ADMIN_EVENT`, `PAGE_VIEW`๋Š” ์ œ์™ธ).

### Step 2: ์‹ค์ œ trackEvent ํ˜ธ์ถœ ํ˜„ํ™ฉ

```bash
grep -rn "trackEvent(USER_EVENT\." src/ --include="*.tsx" --include="*.ts"
```

์–ด๋–ค ํŒŒ์ผ์˜ ๋ช‡ ๋ฒˆ์งธ ์ค„์—์„œ ์–ด๋–ค ์ด๋ฒคํŠธ๋ฅผ ํ˜ธ์ถœํ•˜๋Š”์ง€ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค.

### Step 3: ํŠธ๋ž˜ํ‚น ๋ฏธ์ ์šฉ ์ธํ„ฐ๋ž™์…˜ ํƒ์ง€

```bash
grep -rn "onClick\|onSubmit" src/pages/ src/components/ --include="*.tsx" -l
```

์œ„ ํŒŒ์ผ ๋ชฉ๋ก ์ค‘ `trackEvent`๋ฅผ importํ•˜๋Š” ํŒŒ์ผ:

```bash
grep -rln "trackEvent\|useMixpanelTrack" src/pages/ src/components/ --include="*.tsx"
```

๋‘ ๋ชฉ๋ก์˜ **๊ต์ง‘ํ•ฉ ํŒŒ์ผ** โ€” ์ฆ‰, onClick/onSubmit์ด ์žˆ๊ณ  trackEvent๋„ ์“ฐ๋Š” ํŒŒ์ผ โ€” ์—์„œ trackEvent ์—†์ด onClick๋งŒ ์žˆ๋Š” ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํƒ์ง€ํ•ฉ๋‹ˆ๋‹ค:

```bash
grep -n "onClick\|onSubmit" <ํŒŒ์ผ๊ฒฝ๋กœ>
```

๊ฐ ํ•ธ๋“ค๋Ÿฌ ์ฃผ๋ณ€ 5์ค„์„ ์ฝ์–ด trackEvent ํ˜ธ์ถœ์ด ์—†์œผ๋ฉด ๋ˆ„๋ฝ ์˜์‹ฌ์œผ๋กœ ๋ถ„๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.

### Step 4: ๋ฏธ์‚ฌ์šฉ ์ด๋ฒคํŠธ ํƒ์ง€

Step 1์—์„œ ์ˆ˜์ง‘ํ•œ USER_EVENT ํ‚ค ๊ฐ๊ฐ์— ๋Œ€ํ•ด Step 2 ๊ฒฐ๊ณผ์—์„œ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
ํ•œ ๋ฒˆ๋„ ๋“ฑ์žฅํ•˜์ง€ ์•Š๋Š” ํ‚ค๋Š” ๋ฏธ์‚ฌ์šฉ ์ด๋ฒคํŠธ์ž…๋‹ˆ๋‹ค.

---

## ์ถœ๋ ฅ ํ˜•์‹

๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ์•„๋ž˜ 3๊ฐœ ํ‘œ๋กœ ์š”์•ฝํ•ฉ๋‹ˆ๋‹ค.

### โœ… ํŠธ๋ž˜ํ‚น ์ค‘์ธ ์ด๋ฒคํŠธ

| ์ด๋ฒคํŠธ๋ช… | ์‚ฌ์šฉ ํŒŒ์ผ |
| ------------------ | -------------------- |
| `CLUB_MAP_CLICKED` | `ClubDetailPage.tsx` |
| โ€ฆ | โ€ฆ |

### โš ๏ธ ํŠธ๋ž˜ํ‚น ๋ˆ„๋ฝ ์˜์‹ฌ ์ธํ„ฐ๋ž™์…˜

onClick/onSubmit์ด ์žˆ์œผ๋‚˜ trackEvent ํ˜ธ์ถœ์ด ์—†๋Š” ํ•ธ๋“ค๋Ÿฌ. **์‚ฌ์šฉ์ž ์˜๋„๊ฐ€ ๋‹ด๊ธด ์ฃผ์š” ์•ก์…˜**(๋ฒ„ํŠผ ํด๋ฆญ, ํผ ์ œ์ถœ ๋“ฑ)์— ํ•œํ•ด ๋‚˜์—ดํ•˜๊ณ , ๋‹จ์ˆœ ์ƒํƒœ ํ† ๊ธ€์ด๋‚˜ ๋‚ด๋ถ€ UI ์ œ์–ด๋Š” ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค.

| ํŒŒ์ผ | ํ•ธ๋“ค๋Ÿฌ | ๋น„๊ณ  |
| ------------------------ | ------------ | -------------- |
| `ClubDetailPage.tsx:157` | `onMapClick` | ์ง€๋„ ๋ชจ๋‹ฌ ์—ด๊ธฐ |
| โ€ฆ | โ€ฆ | โ€ฆ |

### ๐Ÿ—‘๏ธ ์ •์˜๋งŒ ๋˜๊ณ  ๋ฏธ์‚ฌ์šฉ ์ด๋ฒคํŠธ (USER_EVENT ๊ธฐ์ค€)

์ฝ”๋“œ ์–ด๋””์„œ๋„ `trackEvent`๋กœ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š” ์ด๋ฒคํŠธ.

| ํ‚ค | ์ด๋ฒคํŠธ๋ช… |
| ------------ | -------------- |
| `SOME_EVENT` | `'Some Event'` |
| โ€ฆ | โ€ฆ |

---

## ์ฃผ์˜์‚ฌํ•ญ

- `ADMIN_EVENT`์™€ `PAGE_VIEW`๋Š” ๋ณ„๋„ ํŠธ๋ž˜ํ‚น ์ฒด๊ณ„(useTrackPageView ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ด๋ฒˆ ๊ฐ์‚ฌ ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค.
- ๋ˆ„๋ฝ ์˜์‹ฌ์€ **์‚ฌ์šฉ์ž ํ–‰๋™ ์ถ”์  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š”** ์ธํ„ฐ๋ž™์…˜์— ์ง‘์ค‘ํ•ฉ๋‹ˆ๋‹ค. ๋“œ๋กญ๋‹ค์šด ํ† ๊ธ€, ์ž…๋ ฅ ํฌ์ปค์Šค ๋“ฑ ์„ธ๋ถ€ UI ์ด๋ฒคํŠธ๋Š” ํŒ๋‹จ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ณ„๋„๋กœ ์–ธ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.
- ๊ฒฐ๊ณผ ์ถœ๋ ฅ ํ›„ ์‹ค์ œ ์ถ”๊ฐ€๊ฐ€ ํ•„์š”ํ•œ ํ•ญ๋ชฉ์ด ์žˆ์œผ๋ฉด ์ด์–ด์„œ ์ž‘์—…ํ• ์ง€ ๋ฌผ์–ด๋ด…๋‹ˆ๋‹ค.
13 changes: 13 additions & 0 deletions frontend/.claude/commands/cross-review.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
ํฌ๋กœ์Šค ์—์ด์ „ํŠธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ AI์™€ ๋‹ค๋ฅธ AI๊ฐ€ ๋ฆฌ๋ทฐํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ๋ฒ•:

- `/cross-review claude` โ€” Claude๋กœ ์ž‘์„ฑ โ†’ Codex๊ฐ€ ๋ฆฌ๋ทฐ
- `/cross-review codex` โ€” Codex๋กœ ์ž‘์„ฑ โ†’ Claude๊ฐ€ ๋ฆฌ๋ทฐ
- `/cross-review` โ€” ๊ธฐ๋ณธ๊ฐ’: claude๋กœ ๊ฐ„์ฃผ (Codex๊ฐ€ ๋ฆฌ๋ทฐ)

์•„๋ž˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค:

```bash
./scripts/cross-review.sh --writer ${ARGUMENTS:-claude}
```
44 changes: 44 additions & 0 deletions frontend/.claude/commands/jira-story.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
Jira ์Šคํ† ๋ฆฌ๋ฅผ ๋Œ€ํ™”ํ˜•์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์ˆœ์„œ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ์งˆ๋ฌธํ•˜์„ธ์š”:

1. **์ œ๋ชฉ**: "์Šคํ† ๋ฆฌ ์ œ๋ชฉ์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”. (์˜ˆ: ์‚ฌ์šฉ์ž๋Š” ๋™์•„๋ฆฌ ์นด๋“œ๋ฅผ ํด๋ฆญํ•˜์—ฌ ์ƒ์„ธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค)"
2. **์„ค๋ช…**: "์Šคํ† ๋ฆฌ ์„ค๋ช…์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”. (์—†์œผ๋ฉด Enter)" โ€” ์„ ํƒ์‚ฌํ•ญ
3. **์ธ์ˆ˜ ์กฐ๊ฑด**: "์ธ์ˆ˜ ์กฐ๊ฑด(Acceptance Criteria)์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”. (์—†์œผ๋ฉด Enter)" โ€” ์„ ํƒ์‚ฌํ•ญ

๋ชจ๋“  ์ž…๋ ฅ์ด ์™„๋ฃŒ๋˜๋ฉด ์•„๋ž˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์„ธ์š”:

```bash
./scripts/jira-story.sh "์ œ๋ชฉ" "์„ค๋ช…" "์ธ์ˆ˜์กฐ๊ฑด"
```

- ์„ค๋ช…์ด๋‚˜ ์ธ์ˆ˜ ์กฐ๊ฑด์ด ์—†์œผ๋ฉด ๋นˆ ๋ฌธ์ž์—ด("")๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
- ์‹คํ–‰ ํ›„ ์ƒ์„ฑ๋œ ์Šคํ† ๋ฆฌ ํ‚ค์™€ ๋งํฌ๋ฅผ ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
- `JIRA_EMAIL` ๋˜๋Š” `JIRA_API_TOKEN` ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์—†์œผ๋ฉด ์„ค์ • ๋ฐฉ๋ฒ•์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

---

## GitHub ์ด์Šˆ (ํ•˜์œ„ ์ž‘์—… + ๋ธŒ๋žœ์น˜) ์—ฐ๋™

์Šคํ† ๋ฆฌ ์ƒ์„ฑ ํ›„ ๋ฐ”๋กœ ์ด์–ด์„œ ๋ฌผ์–ด๋ณด์„ธ์š”:

"GitHub ์ด์Šˆ(Jira ํ•˜์œ„ ์ž‘์—… + ๋ธŒ๋žœ์น˜)๋„ ํ•จ๊ป˜ ์ƒ์„ฑํ• ๊นŒ์š”?"

**Yes์ธ ๊ฒฝ์šฐ** ์•„๋ž˜ ์ˆœ์„œ๋กœ ์ถ”๊ฐ€ ์งˆ๋ฌธ:

4. **๋‹ด๋‹น์ž**: "๋‹ด๋‹น์ž๋ฅผ ์„ ํƒํ•ด์ฃผ์„ธ์š”." โ€” seongwon030 / oesnuj / Zepelown / PororoAndFriends / lepitaaar / suhyun113 / alsdddk / yw6938 / seongje973 ์ค‘ ์„ ํƒ
5. **๋ธŒ๋žœ์น˜๋ช…**: "๋ธŒ๋žœ์น˜๋ช…์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”. (์˜ˆ: feature/add-login-page)"
6. **๋ถ„๊ธฐ ๋ธŒ๋žœ์น˜**: "๋ถ„๊ธฐํ•  ๋ธŒ๋žœ์น˜๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”. (๊ธฐ๋ณธ๊ฐ’: develop-fe)" โ€” ์„ ํƒ์‚ฌํ•ญ
7. **ํƒœ์Šคํฌ**: "์ฒดํฌ๋ฆฌ์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”. (์—†์œผ๋ฉด Enter)" โ€” ์„ ํƒ์‚ฌํ•ญ, ๊ธฐ๋ณธ๊ฐ’ `- [ ] Task1`

๋ชจ๋“  ์ž…๋ ฅ์ด ์™„๋ฃŒ๋˜๋ฉด:

```bash
./scripts/jira-task.sh "์ œ๋ชฉ" "๋‹ด๋‹น์ž" "MOA-xxx" "๋ธŒ๋žœ์น˜๋ช…" "๋ถ„๊ธฐ๋ธŒ๋žœ์น˜" "" "ํƒœ์Šคํฌ"
```

- `MOA-xxx`๋Š” ์•ž์„œ ์ƒ์„ฑ๋œ ์Šคํ† ๋ฆฌ ํ‚ค๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
- ๋ถ„๊ธฐ ๋ธŒ๋žœ์น˜ ๋ฏธ์ž…๋ ฅ ์‹œ `develop-fe` ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
- ํƒœ์Šคํฌ ๋ฏธ์ž…๋ ฅ ์‹œ `- [ ] Task1` ๊ธฐ๋ณธ๊ฐ’ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
- ์‹คํ–‰ ํ›„ GitHub ์ด์Šˆ URL์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
- GitHub Actions์ด ์ž๋™์œผ๋กœ Jira ํ•˜์œ„ ์ž‘์—…๊ณผ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
Loading
Loading