Skip to content

Develop fe#1560

Open
seongwon030 wants to merge 43 commits into
mainfrom
develop-fe
Open

Develop fe#1560
seongwon030 wants to merge 43 commits into
mainfrom
develop-fe

Conversation

@seongwon030
Copy link
Copy Markdown
Member

@seongwon030 seongwon030 commented May 17, 2026

🚀 릴리즈 PR

📦 버전 정보

항목 내용
서비스 💾 BE / 💻 FE
Bump 타입 🚨 MAJOR / ➕ MINOR / 🔧 PATCH
예상 버전 vX.Y.Z

⚠️ 반드시 라벨을 지정해주세요: 서비스 라벨(💾 BE, 💻 FE)과 버전 라벨(🚨 MAJOR, ➕ MINOR, 🔧 PATCH)이 없으면 태그가 생성되지 않습니다.

📖 버전 라벨 선택 가이드 (Semantic Versioning)
라벨 버전 변화 선택 기준 예시
🚨 MAJOR v1.0.0v2.0.0 기존 API/기능이 호환되지 않는 변경 API 엔드포인트 삭제/변경, 요청/응답 스펙 변경, DB 스키마 대규모 변경
➕ MINOR v1.0.0v1.1.0 기존 기능은 유지하면서 새 기능 추가 새 API 엔드포인트 추가, 새 기능 도입, 기존 API에 선택적 필드 추가
🔧 PATCH v1.0.0v1.0.1 기능 변경 없이 버그 수정/내부 개선 버그 수정, 성능 개선, 리팩토링, 문서 수정

📋 포함된 변경사항

이번 릴리즈에 포함된 주요 변경사항을 요약합니다.

Summary by CodeRabbit

릴리스 노트

  • New Features

    • 소셜 미디어 공유 미리보기(OG 태그) 기능 추가
    • 배너 로딩 상태에 스켈레톤 UI 표시
    • Jira 스토리 자동 생성 명령줄 도구 추가
    • 크로스 에이전트 코드 리뷰 도구 추가
  • Improvements

    • 배너 및 프로모션 데이터 캐시 전략 최적화
    • 클럽 프로필 카드 레이아웃 안정성 개선
    • 전역 스타일 렌더링 성능 개선
  • Documentation

    • React Query 캐싱 전략 가이드 추가
    • 기능별 구현 명세서 추가

Review Change Stack

suhyun113 and others added 23 commits May 13, 2026 17:19
LocationInfo에 min-width: 0과 overflow: hidden을 추가하여
모바일에서 긴 위치 텍스트가 지도 링크를 밀어내는 현상 해결
- .gitignore: .claude/commands/ 팀 공유 예외 처리
- CLAUDE.md: skill routing 규칙 추가
- .claude/commands/cross-review.md: /cross-review 슬래시 커맨드
- scripts/cross-review.sh: claude/codex 자동 감지, --writer 플래그로 반대 에이전트가 리뷰
- .claude/commands/jira-story.md: /jira-story 슬래시 커맨드 (대화형)
- scripts/jira-story.sh: Jira REST API 호출, 스프린트 지정 지원, .env 자동 로드
카카오톡/페이스북 등 크롤러 요청 시 클럽 정보를 API에서 fetch하여
OG 태그가 포함된 HTML을 반환하는 Vercel Edge Middleware 추가

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
ObjectId만 매칭하던 regex를 @clubname 형식도 포함하도록 수정

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Vercel Edge 5초 실행 제한 대응, API 지연 시 SPA로 fallback

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…-856

[feature] 클럽 상세 페이지 OG 태그 Edge Middleware 적용
JIRA_HOST, PROJECT_KEY 하드코딩 제거 및 .env / shell 환경 변수에서 로드하도록 변경.
누락 시 명확한 오류 메시지와 함께 종료하는 유효성 검사 추가.
- 네트워크 행 방지를 위해 --connect-timeout 5, --max-time 30 추가
- base64 수동 인코딩 제거, curl -u 옵션으로 이식성 보장
…jira-story-MOA-854

[feature] 클로드 커맨드 추가 (cross-review, jira)
정규식 끝에 $ 앵커가 없어 /club/:clubId 하위 경로에도
OG HTML이 반환되던 버그 수정 (MOA-859)
percent-encoded 경로(@%EB...)를 디코딩하지 않아 API 호출 실패 및
og:url에 인코딩된 URL이 노출되던 문제 수정 (MOA-859)
잘못된 percent-encoding 입력 시 URIError가 try 블록 밖에서
발생하여 Edge Function이 500으로 터지는 문제 방지
잘못된 인코딩이어도 원본 문자열로 API 시도 후 fallback
…bug-MOA-860

[fix] OG 미들웨어 정규식 끝 앵커 누락 수정
…l-scroll-webview-MOA-830

fix(webview): 웹뷰 메인페이지 좌우 스크롤 방지 및 렌더링 개선
isPending 상태일 때 null 대신 shimmer 애니메이션 스켈레톤을
모바일/데스크탑/랩탑 전 해상도에서 표시
- useBanner staleTime/gcTime 24h → 1h (긴급 배너 교체 대응)
- usePromotion staleTime 5min → 1min (refetchInterval보다 짧게 조정)
…-strategy-MOA-864

[refactor] React Query 캐싱 전략 개선
SkeletonOverlay를 BannerWrapper 위에 절대 위치로 얹어
API 응답 후 이미지 로딩 중에도 스켈레톤이 유지되도록 처리
…OA-862

[feature] 배너 로딩 중 shimmer 스켈레톤 UI 추가
@seongwon030 seongwon030 self-assigned this May 17, 2026
@seongwon030 seongwon030 added 💻 FE Frontend 📈 release 릴리즈 배포 🔧 PATCH Patch 릴리즈 labels May 17, 2026
@vercel
Copy link
Copy Markdown

vercel Bot commented May 17, 2026

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

Project Deployment Actions Updated (UTC)
moadong Ready Ready Preview, Comment May 19, 2026 0:21am

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 17, 2026

Warning

Rate limit exceeded

@suhyun113 has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 45 minutes and 34 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 53148c24-6054-492a-b024-6d0fabcfd6b8

📥 Commits

Reviewing files that changed from the base of the PR and between 904297f and d3eaf2d.

⛔ Files ignored due to path filters (1)
  • frontend/src/assets/images/icons/location_icon.svg is excluded by !**/*.svg
📒 Files selected for processing (17)
  • frontend/.claude/commands/check-tracking.md
  • frontend/.claude/commands/jira-story.md
  • frontend/.claude/commands/jira-task.md
  • frontend/.claude/commands/prd.md
  • frontend/docs/features/club-detail/map-event-tracking.md
  • frontend/scripts/jira-story.sh
  • frontend/scripts/jira-task.sh
  • frontend/src/components/common/Header/Header.tsx
  • frontend/src/constants/eventName.ts
  • frontend/src/hooks/Header/useHeaderNavigation.ts
  • frontend/src/pages/ClubDetailPage/ClubDetailPage.tsx
  • frontend/src/pages/ClubDetailPage/components/ClubDetailTopBar/ClubDetailTopBar.tsx
  • frontend/src/pages/MainPage/components/ClubCard/ClubCard.tsx
  • frontend/src/pages/MainPage/components/SearchBox/SearchBox.tsx
  • frontend/src/pages/PromotionPage/components/detail/PromotionDetailTopBar/PromotionDetailTopBar.tsx
  • frontend/src/pages/PromotionPage/components/list/PromotionCard/CardMeta/CardMeta.styles.ts
  • frontend/src/pages/PromotionPage/components/list/PromotionCard/CardMeta/CardMeta.tsx

Warning

.coderabbit.yaml has a parsing error

The CodeRabbit configuration file in this repository has a parsing error and default settings were used instead. Please fix the error(s) in the configuration file. You can initialize chat with CodeRabbit to get help with the configuration file.

💥 Parsing errors (1)
Validation error: Invalid regex pattern for base branch. Received: "**" at "reviews.auto_review.base_branches[0]"
⚙️ Configuration instructions
  • Please see the configuration documentation for more information.
  • You can also validate your configuration using the online YAML validator.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Walkthrough

PR은 개발자 도구(크로스 에이전트 코드 리뷰, Jira 스토리 생성), OG 태그 생성을 위한 Edge Middleware, 배너 스켈레톤 UI 및 React Query 캐시 전략을 추가합니다. 이를 통해 팀 협업, 소셜 미디어 공유 미리보기, 로딩 UX 개선이 구현됩니다.

Changes

Developer Tools & Documentation

Layer / File(s) Summary
Claude/Jira 명령 문서 및 .gitignore 설정
frontend/.claude/commands/cross-review.md, frontend/.claude/commands/jira-story.md, frontend/.gitignore
크로스 에이전트 리뷰와 Jira 스토리 생성 CLI 명령 사용법을 정의하고, .claude/* 무시 규칙을 세분화하여 팀 공유 명령(/commands/)은 추적 허용.
Skill routing 문서 및 캐싱 전략 가이드
frontend/CLAUDE.md, frontend/docs/claude/api.md, frontend/docs/features/hooks/cacheStrategy.md
요청 유형별 Skill 도구/엔드포인트 라우팅 규칙 및 데이터 성격별 React Query staleTime/gcTime 설정 기준 문서화.
크로스 에이전트 코드 리뷰 스크립트
frontend/scripts/cross-review.sh
작성 도구 선택(--writer claude|codex)에 따라 반대 CLI를 실행하고 git diff를 통합 프롬프트로 리뷰 자동화.
Jira 스토리 생성 스크립트
frontend/scripts/jira-story.sh
대화형 입력(제목/설명/인수조건)으로 ADF 형식 description을 구성하여 Jira REST API 호출.

OG Tag Generation for Social Sharing

Layer / File(s) Summary
OG HTML 생성 Edge Middleware 구현
frontend/middleware.ts
크롤러 User-Agent 감지, /club/clubDetail 라우트 매칭, 클럽 API 호출(3초 타임아웃), OG/Twitter 메타 태그 포함 HTML 반환.
OG 태그 및 Edge Middleware 문서
frontend/docs/claude/features.md
크롤러 감지 기반 OG 생성 흐름, OG 커버 라우트, middleware 수정 방법, 현재 구조의 한계점 및 위험 시나리오 문서화.

Banner Skeleton UI & Cache Optimization

Layer / File(s) Summary
배너 스켈레톤 스타일 및 애니메이션
frontend/src/pages/MainPage/components/Banner/Banner.styles.ts
shimmer 키프레임 정의, SkeletonBannerWrapper(전체 배너 스켈레톤), SkeletonOverlay(이미지 로드 대기) styled 컴포넌트.
배너 컴포넌트 스켈레톤 UI 통합
frontend/src/pages/MainPage/components/Banner/Banner.tsx
isPending 기반 스켈레톤 래퍼 렌더링, isImageLoaded 상태 추가, 첫 번째 이미지만 onLoad 핸들러 부착하여 Swiper loop 모드 중복 방지.
배너 스켈레톤 UI 문서
frontend/docs/features/main/banner.md
배너 스켈레톤 2단계 렌더링 조건(isPending, !isImageLoaded), 첫 이미지 onLoad 규칙, 반응형 사양 정리.
React Query 캐시 설정 및 전역 스타일 조정
frontend/src/hooks/Queries/useBanner.ts, frontend/src/hooks/Queries/usePromotion.ts, frontend/src/pages/ClubDetailPage/components/ClubProfileCard/ClubProfileCard.styles.ts, frontend/src/styles/WebviewGlobal.styles.ts
배너 staleTime(24h→1h), 프로모션 staleTime(5min→1min), LocationInfo overflow 처리, 전역 스타일에 가로 오버플로우 차단 및 WebKit 폰트 최적화.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • Moadong/moadong#1546: 크로스 리뷰 및 Jira 스토리 도구 스크립트와 Claude 명령 문서의 동일 기능 추가
  • Moadong/moadong#1543: ClubProfileCard.styles.ts의 LocationInfo min-width: 0, overflow: hidden 스타일 조정이 동일한 오버플로우 수정
  • Moadong/moadong#1557: Banner 컴포넌트의 shimmer 스켈레톤 UI(SkeletonBannerWrapper, SkeletonOverlay) 구현이 동일

Suggested labels

🚁AI

Suggested reviewers

  • lepitaaar
  • suhyun113
  • oesnuj
🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Title check ⚠️ Warning PR 제목 'Develop fe'는 매우 모호하며, 실제 변경사항의 핵심을 전혀 반영하지 못함. 배너 스켈레톤 UI, OG 미들웨어, 문서화, 클라이언트 명령어 등 다양한 기능이 포함되어 있으나 제목에서 알 수 없음. 제목을 더 구체적으로 변경 (예: 'Add banner skeleton UI, OG middleware, and CLI commands' 또는 기능별 주요 변경사항을 명시)
Docstring Coverage ⚠️ Warning Docstring coverage is 10.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch develop-fe

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 and usage tips.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 17, 2026

✅ UI 변경사항 없음

구분 링크
📖 Storybook https://67904e61c16daa99a63b44a7-rzokelunkp.chromatic.com/

전체 57개 스토리 · 22개 컴포넌트

seongwon030 and others added 6 commits May 18, 2026 14:56
- CLUB_MAP_CLICKED 이벤트명 추가
- 지도 카드 및 프로필 카드 내 지도 버튼 두 진입점 트래킹 적용
- jira-task.sh: gh issue create로 GitHub 이슈 생성 → Actions가 Jira 하위 작업 + 브랜치 자동 생성
- /jira-story 스킬에 GitHub 이슈 연동 플로우 추가
- SearchBox: 하드코딩 문자열 → USER_EVENT.SEARCH_BOX_CLICKED 교체
- ClubCard: mixpanel.track() 직접 호출 → useMixpanelTrack 훅으로 통일
- ClubDetailTopBar, PromotionDetailTopBar: 뒤로가기 버튼 BACK_BUTTON_CLICKED 추가
- useHeaderNavigation: handleMenuOpen 추가 (MOBILE_MENU_BUTTON_CLICKED)
- Header: 모바일 메뉴 열 때 handleMenuOpen 호출
- /check-tracking: 정의된 USER_EVENT와 실제 trackEvent 호출 현황 비교
- 트래킹 중인 이벤트 / 누락 의심 인터랙션 / 미사용 이벤트 표 형식 출력
- /prd: 기능 인터뷰 → 하위 작업 분해 → Jira 스토리 + GitHub 이슈 일괄 생성
- jira-story.sh + jira-task.sh를 연계해 스토리-하위작업 전체 플로우 자동화
…w-MOA-842

[fix] 동아리방 상세 위치가 긴 경우 지도 버튼이 가려지는 현상 수정
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 8

🧹 Nitpick comments (2)
frontend/src/pages/MainPage/components/Banner/Banner.styles.ts (1)

16-16: ⚡ Quick win

prefers-reduced-motion 대응을 추가해 주세요.

현재 shimmer가 무한 애니메이션이라 모션 민감 사용자에게 부담이 될 수 있습니다. prefers-reduced-motion: reduce에서 애니메이션을 비활성화하는 게 안전합니다.

♻️ 제안 코드
 export const SkeletonBannerWrapper = styled.div`
   width: 100%;
@@
   animation: ${shimmer} 1.5s infinite linear;
+  `@media` (prefers-reduced-motion: reduce) {
+    animation: none;
+  }

   ${media.mobile} {
@@
 export const SkeletonOverlay = styled.div`
   position: absolute;
@@
   animation: ${shimmer} 1.5s infinite linear;
+  `@media` (prefers-reduced-motion: reduce) {
+    animation: none;
+  }
 `;

Also applies to: 30-30

🤖 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 `@frontend/src/pages/MainPage/components/Banner/Banner.styles.ts` at line 16,
The shimmer animation is always running and should be disabled for users who
prefer reduced motion; update the Banner.styles.ts where the animation is
applied (the line using animation: ${shimmer} 1.5s infinite linear;) to wrap or
override that rule with a prefers-reduced-motion: reduce media query that
disables the animation (e.g., remove animation or set animation: none) for that
query; apply the same change to the other occurrence referenced (the second
animation line around the 30-30 area) so both shimmer usages respect
reduced-motion preferences.
frontend/docs/features/hooks/cacheStrategy.md (1)

19-19: ⚡ Quick win

refetchInterval 규칙 설명을 명확히 할 수 있습니다.

현재 설명이 약간 복잡합니다. 더 직관적으로 표현하면 이해하기 쉬울 것 같습니다.

✨ 명확성 개선 제안
-- `refetchInterval`을 함께 쓸 때는 `staleTime < refetchInterval`이어야 한다. 그렇지 않으면 폴링 후 refetch된 데이터가 여전히 stale로 판단되지 않아 `staleTime`이 의미를 잃는다.
+- `refetchInterval`을 함께 쓸 때는 `staleTime < refetchInterval`이어야 폴링으로 가져온 새 데이터를 즉시 사용할 수 있다. `staleTime`이 더 길면 새 데이터도 여전히 fresh로 간주되어 리렌더링이 발생하지 않는다.
🤖 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 `@frontend/docs/features/hooks/cacheStrategy.md` at line 19, 현재 문장이 다소 복잡하니
`refetchInterval`과 `staleTime` 규칙을 더 직관적으로 바꿔서 설명하세요; 예를 들어 "`refetchInterval`을
사용하는 경우 `staleTime`은 `refetchInterval`보다 작아야 합니다. 그렇지 않으면 폴링으로 다시 불러온 데이터가 여전히
`stale`로 간주되어 `staleTime`의 의미가 없어집니다."처럼 `refetchInterval`과 `staleTime`을 명시적으로
비교하고 결과를 간단히 설명하도록 `cacheStrategy.md`의 해당 문장을 교체하세요.
🤖 Prompt for all review comments with 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.

Inline comments:
In `@frontend/docs/claude/api.md`:
- Around line 12-32: The "React Query 캐싱 전략 (staleTime / gcTime)" table is
duplicated between frontend/docs/claude/api.md and cacheStrategy.md; remove the
full table and rules block from api.md (the section titled "React Query 캐싱 전략
(staleTime / gcTime)") and replace it with a short paragraph that notes the
existence of the caching strategy and links to cacheStrategy.md (as suggested in
the review), leaving the detailed table and rules only in cacheStrategy.md;
ensure the link path in api.md points to the canonical document (e.g.,
../features/hooks/cacheStrategy.md) and keep the section heading in api.md
minimal to preserve navigation.
- Around line 16-19: Remove the duplicated markdown table header and its
separator row so only one header remains; specifically delete the second
occurrence of the header row "데이터 성격 | staleTime | gcTime | 사용 예" and the
following separator row of dashes, leaving a single header + separator before
the table body to fix the rendering.

In `@frontend/docs/claude/features.md`:
- Around line 57-65: The example regex assigned to match is missing the end
anchor, causing overmatching; update the pattern used in the example for the
match variable so it exactly matches the middleware implementation by adding the
terminal anchor (i.e., ensure the regex for match is
^\/club(?:Detail)?\/([a-f0-9]{24}|@[^/]+)$), and confirm the config object
(export const config = { matcher: [...] }) examples remain consistent with the
actual routes shown (e.g., '/club/:path*' and '/clubDetail/:path*') so the docs
mirror the implemented middleware behavior.
- Around line 36-42: The fenced code block that begins with "크롤러 요청 →
middleware.ts (User-Agent 감지)" is missing a language tag and triggers
markdownlint MD040; update that block to include a language specifier (e.g.,
```text or ```plain) so the markdown linter recognizes it as a code fence and
suppresses the warning, leaving the block contents unchanged.

In `@frontend/middleware.ts`:
- Around line 64-69: The decoded clubId from safeDecode is being interpolated
directly into the fetch URL in the middleware (see safeDecode, API_BASE and the
fetch call), which can produce invalid or unintended paths; re-encode the
segment before building the URL (e.g., use encodeURIComponent on clubId) so the
request path is safe and consistent with other callers (see calendarOAuth.ts
pattern), and ensure the fetch uses the re-encoded value when calling
`${API_BASE}/api/club/...`.

In `@frontend/scripts/cross-review.sh`:
- Around line 11-15: The --writer branch currently reads "$2" blindly and
silently accepts invalid or missing values; update the case handling around the
--writer pattern to first assert an argument exists before using "$2"
(preventing set -u failures), validate that the value assigned to WRITER is one
of the allowed tokens (e.g., list of permitted writers) and on invalid or
missing value print a clear error and exit non‑zero, and change the default case
so unknown options are treated as errors instead of being ignored; refer to the
--writer pattern, the WRITER variable assignment and the case/esac block (and
STAGED handling) to locate where to add the presence check, allowed-values
check, error messages and proper shifts.

In `@frontend/scripts/jira-story.sh`:
- Around line 80-93: The script currently hardcodes the Jira sprint custom field
as .fields.customfield_10020 which breaks on other Jira instances; make the
sprint custom field name configurable (e.g., via an env var SPRINT_CUSTOM_FIELD
or JIRA_SPRINT_FIELD) and pass it into jq (similar to how SPRINT_ID is passed)
so the code conditionally sets .fields[$sprintField] = $sprintId instead of
.fields.customfield_10020; update the jq invocation and variable name references
around the existing SPRINT_ID handling to use the new SPRINT_CUSTOM_FIELD,
defaulting to null when unset.

In `@frontend/src/pages/MainPage/components/Banner/Banner.tsx`:
- Around line 133-139: The first banner's image currently only flips the loading
flag on success via onLoad, so if the first image errors the isImageLoaded flag
stays false and the skeleton/overlay never clears; add an onError handler to the
same <img> used in the Banner component that, when index === 0, calls
setIsImageLoaded(true) (or otherwise clears the loading state) so the
skeleton/overlay is removed on failure; look for the img element and the
setIsImageLoaded/isImageLoaded state in Banner.tsx and add the conditional
onError mirroring the onLoad behavior.

---

Nitpick comments:
In `@frontend/docs/features/hooks/cacheStrategy.md`:
- Line 19: 현재 문장이 다소 복잡하니 `refetchInterval`과 `staleTime` 규칙을 더 직관적으로 바꿔서 설명하세요;
예를 들어 "`refetchInterval`을 사용하는 경우 `staleTime`은 `refetchInterval`보다 작아야 합니다. 그렇지
않으면 폴링으로 다시 불러온 데이터가 여전히 `stale`로 간주되어 `staleTime`의 의미가 없어집니다."처럼
`refetchInterval`과 `staleTime`을 명시적으로 비교하고 결과를 간단히 설명하도록 `cacheStrategy.md`의 해당
문장을 교체하세요.

In `@frontend/src/pages/MainPage/components/Banner/Banner.styles.ts`:
- Line 16: The shimmer animation is always running and should be disabled for
users who prefer reduced motion; update the Banner.styles.ts where the animation
is applied (the line using animation: ${shimmer} 1.5s infinite linear;) to wrap
or override that rule with a prefers-reduced-motion: reduce media query that
disables the animation (e.g., remove animation or set animation: none) for that
query; apply the same change to the other occurrence referenced (the second
animation line around the 30-30 area) so both shimmer usages respect
reduced-motion preferences.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 52d6ae61-356d-480c-92ea-2f0adfa6141f

📥 Commits

Reviewing files that changed from the base of the PR and between f6a927e and 904297f.

📒 Files selected for processing (17)
  • frontend/.claude/commands/cross-review.md
  • frontend/.claude/commands/jira-story.md
  • frontend/.gitignore
  • frontend/CLAUDE.md
  • frontend/docs/claude/api.md
  • frontend/docs/claude/features.md
  • frontend/docs/features/hooks/cacheStrategy.md
  • frontend/docs/features/main/banner.md
  • frontend/middleware.ts
  • frontend/scripts/cross-review.sh
  • frontend/scripts/jira-story.sh
  • frontend/src/hooks/Queries/useBanner.ts
  • frontend/src/hooks/Queries/usePromotion.ts
  • frontend/src/pages/ClubDetailPage/components/ClubProfileCard/ClubProfileCard.styles.ts
  • frontend/src/pages/MainPage/components/Banner/Banner.styles.ts
  • frontend/src/pages/MainPage/components/Banner/Banner.tsx
  • frontend/src/styles/WebviewGlobal.styles.ts

Comment thread frontend/docs/claude/api.md
Comment thread frontend/docs/claude/api.md
Comment thread frontend/docs/claude/features.md
Comment thread frontend/docs/claude/features.md
Comment thread frontend/middleware.ts
Comment thread frontend/scripts/cross-review.sh
Comment thread frontend/scripts/jira-story.sh
Comment thread frontend/src/pages/MainPage/components/Banner/Banner.tsx
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

💻 FE Frontend 🔧 PATCH Patch 릴리즈 📈 release 릴리즈 배포

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants