Skip to content

클래스 페이지 모바일 반응형 버그 수정#706

Merged
HA-SEUNG-JEONG merged 6 commits into
developfrom
fix/bug
May 27, 2026
Merged

클래스 페이지 모바일 반응형 버그 수정#706
HA-SEUNG-JEONG merged 6 commits into
developfrom
fix/bug

Conversation

@HA-SEUNG-JEONG

@HA-SEUNG-JEONG HA-SEUNG-JEONG commented May 26, 2026

Copy link
Copy Markdown
Contributor

Problem

클래스 목록/상세/로드맵·랜딩·마이페이지 등 다수 페이지에서 모바일(390px) 뷰포트 기준 레이아웃 깨짐 및 UX 버그가 존재했음.

  • 클래스 상세 사이드바가 모바일에서도 2열 그리드로 고정되어 컨텐츠 잘림
  • 탭 네비 항목이 좁은 화면에서 줄바꿈 없이 overflow
  • 로드맵 journey map이 모바일 화면 너비를 초과
  • 랜딩·클래스 CTA 바가 모바일에서 iOS safe-area를 침범
  • 푸터 텍스트가 좁은 화면에서 overflow
  • 클래스 카드 타이틀이 카드 너비를 초과해 줄바꿈 없이 넘침
  • 16 배수 spacing 토큰 일부가 px 단위로 정의되어 있어 폰트 크기 설정(브라우저)에 반응하지 않음

Solution

  • spacing 토큰 rem 통일 (200, 400, 600, 800, 1000, 1200, 1400, 1600, 3400, 5000, 5600): 16 나눠떨어지는 값은 rem으로 변환하여 브라우저 폰트 설정 대응
  • 클래스 상세 그리드 grid-cols-1 lg:grid-cols-content-sidebar-360: 모바일 1열, lg 이상 2열
  • 탭 네비 overflow-x-auto [&::-webkit-scrollbar]:hidden + 오른쪽 그라데이션 fade: 수평 스크롤 가능하게, 스크롤 힌트 제공
  • 로드맵 journey map hidden md:flex: 데스크탑 전용으로 숨김, 모바일은 챕터 카드 뷰만 표시
  • 레슨 카드 min-w-0 flex-1 truncate: 카드 내 타이틀 overflow 방지
  • CTA 바(랜딩·로드맵) calc(env(safe-area-inset-bottom, 0px) + 24px): iOS 홈 인디케이터 영역 침범 방지
  • 푸터 flex-col sm:flex-row + flex-wrap gap-y-100: 모바일 세로 스택, 텍스트 줄바꿈
  • 클래스 목록 hero/h1 text-[32px] sm:text-[50px] / font-designer-36b sm:font-designer-62b: 모바일 타이포 축소
  • ASSET_SLUG_OVERRIDE (vibe-intro-claude-code → vibe-intro): 에셋 경로 슬러그 오버라이드로 이미지 404 수정, onError fallback 추가

Changes

Bug Fixes

File Description
src/app/global.css 16 배수 spacing 토큰 px → rem 통일, 신규 토큰 3개 추가
src/app/(landing)/class/[slug]/page.tsx 사이드바 그리드 모바일 1열 처리
src/app/(landing)/class/page.tsx hero/h1 텍스트 반응형 크기, 썸네일 arbitrary px → 토큰
src/app/(service)/(my)/my-page/page.tsx 라벨-인풋 모바일 flex-col, 닉네임 flex-wrap
src/components/common/layout/footer.tsx 모바일 세로 스택, 텍스트 줄바꿈
src/components/common/ui/floating-class-action-buttons.tsx 플로팅 버튼 모바일 위치 조정
src/components/pages/class/class-detail-tab-nav.tsx 탭 수평 스크롤 + 그라데이션 fade, arbitrary px 제거
src/components/pages/class/roadmap-tab.tsx journey map 모바일 숨김, 레슨 카드 truncate, CTA safe-area, 에셋 슬러그 오버라이드
src/components/pages/landing/landing-content.tsx 랜딩 CTA 바 모바일 full-width + safe-area, 섹션 헤더 중앙정렬

Result

  • 390px 모바일 기준 클래스·랜딩·마이페이지 레이아웃 정상 렌더링
  • iOS Safari safe-area 하단 침범 해소 (CTA 바, 플로팅 버튼)
  • 탭 항목 overflow 대신 수평 스크롤로 전환
  • 브라우저 폰트 크기 설정 변경 시 rem 토큰 적용 영역 올바르게 스케일

Screenshots

랜딩 (/)

모바일 (390px) 태블릿 (768px) 데스크탑 (1280px)

클래스 목록 (/class)

모바일 (390px) 태블릿 (768px) 데스크탑 (1280px)

클래스 상세 (/class/vibe-intro)

모바일 (390px) 태블릿 (768px) 데스크탑 (1280px)

빌더 피드 리스트 (/class/vibe-intro/feed)

모바일 (390px) 태블릿 (768px) 데스크탑 (1280px)

빌더 피드 상세 (/class/vibe-intro/feed/19)

모바일 (390px) 태블릿 (768px) 데스크탑 (1280px)

질문답변 리스트 (/class/vibe-intro/qa)

모바일 (390px) 태블릿 (768px) 데스크탑 (1280px)

질문답변 상세 (/class/vibe-intro/qa/4)

모바일 (390px) 태블릿 (768px) 데스크탑 (1280px)

마이페이지 — 빌더 프로필 (/my-page)

모바일 (390px) 태블릿 (768px) 데스크탑 (1280px)

마이페이지 — 마이 클래스 (/my-class)

모바일 (390px) 태블릿 (768px) 데스크탑 (1280px)

마이페이지 — 내가 작성한 글 (/my-posts)

모바일 (390px) 태블릿 (768px) 데스크탑 (1280px)

마이페이지 — 결제 관리 (/class-payment-management)

모바일 (390px) 태블릿 (768px) 데스크탑 (1280px)

Test plan

  • 390px (모바일) 뷰포트에서 클래스 목록·상세·로드맵·랜딩·마이페이지 레이아웃 확인
  • 768px (태블릿) 뷰포트에서 레이아웃 확인
  • 1280px (데스크탑) 뷰포트에서 기존 레이아웃 회귀 없음 확인
  • iOS Safari에서 랜딩 CTA 바·로드맵 CTA 바 safe-area 확인
  • 클래스 상세 탭 네비 좁은 화면에서 수평 스크롤 동작 확인
  • vibe-intro-claude-code 클래스 로드맵 탭 이미지 정상 표시 확인
  • 마이페이지 프로필 편집 모바일 레이아웃 확인

🤖 Generated with Claude Code

HA-SEUNG-JEONG and others added 3 commits May 26, 2026 19:59
…75 추가

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- footer: 모바일 flex-col + pb 여백 / 텍스트 flex-wrap
- my-page-mobile-nav: webkit 스크롤바 숨김
- floating-buttons: 모바일 bottom 위치 조정

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- feed-tab: 컨트롤 영역 flex-wrap으로 iPhone SE 가로 스크롤 방지
- roadmap-tab: 말풍선 텍스트 SVG 꼬리 보정 수직 중앙 정렬
- class-detail-roadmap-section: h-[150px] → h-1875 토큰 교체
- tab-nav, qna-tab, layout 등: 반응형 개선

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

vercel Bot commented May 26, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
study-platform-client-dev Ready Ready Preview, Comment May 26, 2026 12:33pm

@coderabbitai

coderabbitai Bot commented May 26, 2026

Copy link
Copy Markdown
📝 Walkthrough

전체 요약

이 PR은 모바일 중심의 반응형 레이아웃 개선Tailwind 설계 토큰 표준화를 중점적으로 진행합니다. 전체 설계 시스템의 간격 변수를 px에서 rem 단위로 통일하고, 학습/클래스/랜딩 페이지의 각 영역에서 모바일 우선 중단점 기반 레이아웃을 구성합니다. 드롭다운/모달/버튼의 상태 스타일 추가와 safe-area 기반 안전영역 여백 처리도 함께 적용됩니다.

변경사항

모바일 우선 반응형 설계 및 토큰 표준화

Layer / File(s) Summary
설계 토큰 기초: Spacing 토큰 rem 표준화
src/app/global.css
--spacing-200부터 --spacing-5600 구간의 간격 토큰을 px에서 rem 단위로 변환하고, --spacing-3650, --spacing-4425의 새로운 중간값을 추가하여 일관된 스케일 시스템을 구축합니다.
학습 영역 반응형 레이아웃
src/app/(class-lesson)/class/[slug]/lesson/[id]/page.tsx, src/app/(landing)/class/[slug]/(learning)/layout.tsx, src/app/(landing)/class/[slug]/(learning)/_components/feed-tab.tsx, src/app/(landing)/class/[slug]/(learning)/_components/qna-tab.tsx, src/app/(landing)/class/[slug]/(learning)/qa/[id]/page.tsx
레슨 페이지의 좌측 콘텐츠를 모바일 세로→md 이상 가로로 전환하고, 우측 QnA 사이드바를 모바일에서 숨깁니다. 피드탭과 QnA탭의 컨트롤 UI를 모바일 중심으로 재구성하고, 리액션 버튼의 텍스트 wrapping을 제어하며, 배너 제목과 탭 내비게이션의 반응형 폰트/폭을 조정합니다.
클래스 상세 페이지: 로드맵 및 탭 네비게이션
src/app/(landing)/class/[slug]/page.tsx, src/components/pages/class/class-detail-roadmap-section.tsx, src/components/pages/class/class-detail-tab-nav.tsx, src/components/pages/class/roadmap-tab.tsx
클래스 상세 페이지 그리드를 lg 이상에서만 2열로 표시하고, 로드맵 탭의 타겟 오디언스를 모바일 2열→sm 3열로 전환합니다. 탭 내비게이션이 가로 스크롤 가능하게 재구성되며, 이미지 자산 slug를 재매핑하고 여정 맵을 md 이상에서만 표시합니다. 버튼의 active 상태 스타일과 레슨 카드의 제목 truncate 처리를 추가합니다.
랜딩 페이지: 코스 카드 및 플로팅 CTA
src/app/(landing)/class/page.tsx, src/components/pages/landing/landing-content.tsx
코스 카드 썸네일 높이와 오버레이 텍스트를 모바일 소형→sm 대형으로 조정하고, 배지 섹션을 세로 정렬로 변경합니다. 플로팅 CTA 바를 모바일 풀폭→sm 중앙 배치로 전환하며 safe-area-inset-bottom을 반영한 padding 계산을 추가합니다.
공통 컴포넌트: 프로필, 푸터, 모달
src/app/(service)/(my)/my-page/page.tsx, src/app/(landing)/class/[slug]/(learning)/feed/[id]/page.tsx, src/components/common/layout/footer.tsx, src/components/common/layout/sidebar/my-page-mobile-nav.tsx, src/components/common/ui/floating-class-action-buttons.tsx
프로필 행을 모바일 세로→sm 가로로 전환하고, 닉네임 입력을 flex-wrap으로 변경합니다. 피드/삭제 모달의 폭을 고정→반응형으로 조정하고, 푸터 정보 영역을 flex-wrap 줄바꿈으로 재구성합니다. 모바일 네비게이션의 스크롤바를 숨기고 고정 액션 버튼의 위치를 조정합니다.

관련 PR

추천 라벨

release:patch

시인의 한 마디

🐰 모바일 화면 담요를 펼쳐서
rem 단위로 촘촘히 박음질하고
반응형 스프링으로 늘였다 줄였다
안전한 영역까지 배려한 마음 가득
작은 기기부터 큰 화면까지 쏙 맞춰 🌱


🎯 2 (Simple) | ⏱️ ~12 분

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 13.04% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목이 변경의 주요 목적을 명확하게 반영하고 있습니다. '클래스 페이지 모바일 반응형 버그 수정'은 390px 모바일 뷰포트 기준 레이아웃 버그 수정이라는 핵심 내용과 일치합니다.
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

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

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/bug

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.

@HA-SEUNG-JEONG HA-SEUNG-JEONG self-assigned this May 26, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 6

🧹 Nitpick comments (3)
src/app/global.css (1)

436-474: 💤 Low value

토큰 정렬 개선을 고려해볼 수 있습니다.

spacing 토큰들이 숫자 순서대로 정렬되지 않아 유지보수 시 찾기가 어려울 수 있습니다. 예를 들어:

  • --spacing-6750--spacing-9250--spacing-7125 (역순) → --spacing-10500--spacing-3400 (큰 폭 역순)

기능적으로는 문제없지만, 향후 토큰을 추가하거나 수정할 때 오름차순으로 정렬하면 가독성과 유지보수성이 개선됩니다.

💡 정렬 개선 제안

토큰명의 숫자 부분을 기준으로 오름차순 정렬:

  --spacing-1875: 150px;
+ --spacing-2000: 10rem;
  --spacing-2125: 170px;
  --spacing-2250: 180px;
  ...
+ --spacing-3000: 15rem;
  --spacing-3400: 17rem;
  --spacing-3500: 280px;
  --spacing-3650: 292px;
  ...
+ --spacing-4000: 20rem;
  --spacing-4275: 342px;
  --spacing-4425: 354px;
  ...

(현재 PR 범위를 벗어나므로 선택적으로 향후 개선 시 고려하시면 됩니다.)

🤖 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 `@src/app/global.css` around lines 436 - 474, The spacing CSS custom properties
are not ordered by their numeric suffix which reduces readability and
maintainability; reorder the --spacing-... declarations in src/app/global.css
into ascending numeric order (e.g., ensure --spacing-3400 comes before
--spacing-3650, --spacing-3750, etc., and that --spacing-6750, --spacing-7000,
--spacing-7125, --spacing-7500, --spacing-7850, --spacing-7925, --spacing-8288,
--spacing-8875, --spacing-9175, --spacing-9250, --spacing-10000, --spacing-10500
follow numeric order) so all tokens are consistently sorted by their numeric
part.
src/components/pages/landing/landing-content.tsx (1)

717-717: ⚡ Quick win

safe-area 계산에 하드코딩된 값을 고려하세요.

인라인 스타일의 calc(env(safe-area-inset-bottom, 0px) + 24px)에서 24px가 하드코딩되어 있습니다. env()와 결합해야 하므로 인라인 스타일 사용은 적절하지만, CSS 변수(예: var(--spacing-300))를 사용하면 디자인 시스템과의 일관성을 유지할 수 있습니다.

♻️ 제안: CSS 변수 사용
-      style={{ paddingBottom: 'calc(env(safe-area-inset-bottom, 0px) + 24px)' }}
+      style={{ paddingBottom: 'calc(env(safe-area-inset-bottom, 0px) + var(--spacing-300))' }}
🤖 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 `@src/components/pages/landing/landing-content.tsx` at line 717, Replace the
hardcoded "24px" in the inline style calc with a design-system CSS variable so
the safe-area value composes with spacing consistently; update the JSX style
expression (the element using style={{ paddingBottom:
'calc(env(safe-area-inset-bottom, 0px) + 24px)' }}) to use
calc(env(safe-area-inset-bottom, 0px) + var(--spacing-300)) (or your project
spacing token name) and ensure that the CSS variable is defined in the
global/theme so the fallback behavior remains intact.
src/components/pages/class/roadmap-tab.tsx (1)

608-613: ⚡ Quick win

하단 패딩을 rem 단위로 통일하세요.

safe-area 계산에서 24px를 하드코딩하고 있습니다. PR 전체 목표인 spacing 토큰 rem 표준화와 일관성을 맞추기 위해 1.5rem (또는 var(--spacing-300))을 사용하는 것이 좋습니다.

♻️ 권장 수정안
           style={{
-            paddingBottom: 'calc(env(safe-area-inset-bottom, 0px) + 24px)',
+            paddingBottom: 'calc(env(safe-area-inset-bottom, 0px) + 1.5rem)',
           }}
🤖 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 `@src/components/pages/class/roadmap-tab.tsx` around lines 608 - 613, Replace
the hardcoded "24px" in the inline style on the bottom fixed container (the div
with className including "fixed bottom-0" that sets style.paddingBottom) with a
rem-based spacing token; change the expression from
"calc(env(safe-area-inset-bottom, 0px) + 24px)" to use "1.5rem" or
"var(--spacing-300)" (e.g., "calc(env(safe-area-inset-bottom, 0px) + 1.5rem)"),
ensuring the change is applied to the paddingBottom property in the same inline
style.
🤖 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 `@src/app/`(landing)/class/[slug]/(learning)/_components/feed-tab.tsx:
- Line 217: The element in feed-tab.tsx uses an arbitrary Tailwind class
`max-w-[90vw]`; replace it with a project token: add a CSS variable
`--width-dropdown-mobile-max: 90vw;` to global.css, add a matching key under
theme.extend.maxWidth in your Tailwind config (e.g., "dropdown-mobile-max":
"var(--width-dropdown-mobile-max)"), then update the JSX class on the div to use
the new token class (e.g., `max-w-dropdown-mobile-max`) instead of
`max-w-[90vw]`; this removes the arbitrary value and follows the project's
custom token pattern.

In `@src/app/`(landing)/class/[slug]/(learning)/layout.tsx:
- Line 179: The paragraph element uses Tailwind arbitrary values ("text-[18px]",
"sm:text-[22px]", "tracking-[-0.418px]") which violates the guideline; replace
those classes on the <p> element (the className containing text-[18px]
sm:text-[22px] tracking-[-0.418px]) with the appropriate project typography
token from global.css (for example use the matching font-designer-* token like
font-designer-22b or font-designer-24b and keep existing semantic classes such
as font-semibold and text-gray-800); if no suitable token exists, add a new CSS
variable/token in global.css (e.g., --font-designer-22b) and then reference that
new token class on the same <p> element.

In `@src/app/`(landing)/class/page.tsx:
- Line 257: Replace the inline arbitrary font-size utilities in the className
string ("text-[32px] text-[50px]") with the project's design tokens from
global.css; locate the className on the heading in page.tsx and swap those px
utilities for the appropriate token-based classes (e.g., the token IDs defined
in global.css or token utility names your project uses) so sizing follows the
project's design tokens across breakpoints while preserving the existing
responsive behavior and other classes (whitespace-nowrap, font-extrabold,
leading-normal, text-gray-500).
- Line 97: Replace the arbitrary pixel font-size utilities in the className on
the heading element (the JSX element using className="... text-[32px]
sm:text-[50px] ...") with the project's design token classes from global.css;
locate the className string that contains text-[32px] and sm:text-[50px] and
swap those two tokens for the corresponding project token utility names (the
global.css custom font-size tokens used across the app) so sizes come from the
design system rather than hardcoded px values.
- Line 78: Replace the arbitrary tailwind utilities text-[32px] and
sm:text-[50px] in the className string with the project's design tokens defined
in global.css (use the font-designer-* tokens); e.g. change text-[32px] to the
appropriate token (font-designer-...) and sm:text-[50px] to the matching
responsive token (sm:font-designer-...), keeping the rest of the className
(absolute left-1/2 -translate-x-1/2 whitespace-nowrap font-extrabold
leading-normal text-gray-1000) intact and verifying the exact token names in
global.css before committing.

In `@src/components/pages/class/class-detail-roadmap-section.tsx`:
- Line 22: The div in the ClassDetailRoadmapSection component uses an arbitrary
spacing class "mx-[10.35%]" which violates the no-arbitrary-values rule; replace
it with a named spacing token (e.g., add --spacing-curriculum-inset: 10.35% to
global.css and expose it via Tailwind config) and then update the JSX to use the
corresponding utility (e.g., mx-curriculum-inset) or an existing spacing token
(e.g., mx-1000) instead of the arbitrary value; ensure you update
tailwind.config.js to map the new token so the class resolves correctly.

---

Nitpick comments:
In `@src/app/global.css`:
- Around line 436-474: The spacing CSS custom properties are not ordered by
their numeric suffix which reduces readability and maintainability; reorder the
--spacing-... declarations in src/app/global.css into ascending numeric order
(e.g., ensure --spacing-3400 comes before --spacing-3650, --spacing-3750, etc.,
and that --spacing-6750, --spacing-7000, --spacing-7125, --spacing-7500,
--spacing-7850, --spacing-7925, --spacing-8288, --spacing-8875, --spacing-9175,
--spacing-9250, --spacing-10000, --spacing-10500 follow numeric order) so all
tokens are consistently sorted by their numeric part.

In `@src/components/pages/class/roadmap-tab.tsx`:
- Around line 608-613: Replace the hardcoded "24px" in the inline style on the
bottom fixed container (the div with className including "fixed bottom-0" that
sets style.paddingBottom) with a rem-based spacing token; change the expression
from "calc(env(safe-area-inset-bottom, 0px) + 24px)" to use "1.5rem" or
"var(--spacing-300)" (e.g., "calc(env(safe-area-inset-bottom, 0px) + 1.5rem)"),
ensuring the change is applied to the paddingBottom property in the same inline
style.

In `@src/components/pages/landing/landing-content.tsx`:
- Line 717: Replace the hardcoded "24px" in the inline style calc with a
design-system CSS variable so the safe-area value composes with spacing
consistently; update the JSX style expression (the element using style={{
paddingBottom: 'calc(env(safe-area-inset-bottom, 0px) + 24px)' }}) to use
calc(env(safe-area-inset-bottom, 0px) + var(--spacing-300)) (or your project
spacing token name) and ensure that the CSS variable is defined in the
global/theme so the fallback behavior remains intact.
🪄 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: fdda44e4-b145-4a39-95ba-53ac1bc66e51

📥 Commits

Reviewing files that changed from the base of the PR and between 1f4ec85 and a49d9e4.

📒 Files selected for processing (17)
  • src/app/(class-lesson)/class/[slug]/lesson/[id]/page.tsx
  • src/app/(landing)/class/[slug]/(learning)/_components/feed-tab.tsx
  • src/app/(landing)/class/[slug]/(learning)/_components/qna-tab.tsx
  • src/app/(landing)/class/[slug]/(learning)/feed/[id]/page.tsx
  • src/app/(landing)/class/[slug]/(learning)/layout.tsx
  • src/app/(landing)/class/[slug]/(learning)/qa/[id]/page.tsx
  • src/app/(landing)/class/[slug]/page.tsx
  • src/app/(landing)/class/page.tsx
  • src/app/(service)/(my)/my-page/page.tsx
  • src/app/global.css
  • src/components/common/layout/footer.tsx
  • src/components/common/layout/sidebar/my-page-mobile-nav.tsx
  • src/components/common/ui/floating-class-action-buttons.tsx
  • src/components/pages/class/class-detail-roadmap-section.tsx
  • src/components/pages/class/class-detail-tab-nav.tsx
  • src/components/pages/class/roadmap-tab.tsx
  • src/components/pages/landing/landing-content.tsx

</button>
{filterOpen && (
<div className="absolute right-0 top-full z-10 mt-75 flex max-h-4000 min-w-2000 flex-col overflow-y-auto rounded-150 border border-border-default bg-background-default p-125 shadow-1">
<div className="absolute left-0 top-full z-10 mt-75 flex max-h-4000 w-max max-w-[90vw] flex-col overflow-y-auto rounded-150 border border-border-default bg-background-default p-125 shadow-1">

Copy link
Copy Markdown

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

임의 값 사용 금지 가이드라인 위반

max-w-[90vw]는 임의(arbitrary) 값으로, 프로젝트 코딩 가이드라인을 위반합니다. global.css에 적절한 커스텀 토큰을 정의하거나 기존 토큰을 사용해야 합니다.

As per coding guidelines: "No arbitrary px values for spacing/sizing utilities (p-[4px], w-[320px], h-[100px], gap-[10px]). Use project custom tokens."

🔧 권장 수정안

global.css에 새로운 토큰 추가:

--width-dropdown-mobile-max: 90vw;

그 후 Tailwind 설정에서 해당 토큰을 width 스케일에 추가하거나, 또는 기존의 적절한 토큰(예: max-w-7xl 등)을 활용하세요.

-<div className="absolute left-0 top-full z-10 mt-75 flex max-h-4000 w-max max-w-[90vw] flex-col overflow-y-auto rounded-150 border border-border-default bg-background-default p-125 shadow-1">
+<div className="absolute left-0 top-full z-10 mt-75 flex max-h-4000 w-max max-w-dropdown-mobile flex-col overflow-y-auto rounded-150 border border-border-default bg-background-default p-125 shadow-1">
🤖 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 `@src/app/`(landing)/class/[slug]/(learning)/_components/feed-tab.tsx at line
217, The element in feed-tab.tsx uses an arbitrary Tailwind class
`max-w-[90vw]`; replace it with a project token: add a CSS variable
`--width-dropdown-mobile-max: 90vw;` to global.css, add a matching key under
theme.extend.maxWidth in your Tailwind config (e.g., "dropdown-mobile-max":
"var(--width-dropdown-mobile-max)"), then update the JSX class on the div to use
the new token class (e.g., `max-w-dropdown-mobile-max`) instead of
`max-w-[90vw]`; this removes the arbitrary value and follows the project's
custom token pattern.

Comment thread src/app/(landing)/class/[slug]/(learning)/layout.tsx
Comment thread src/app/(landing)/class/page.tsx
Comment thread src/app/(landing)/class/page.tsx
Comment thread src/app/(landing)/class/page.tsx
Comment thread src/components/pages/class/class-detail-roadmap-section.tsx
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@HA-SEUNG-JEONG HA-SEUNG-JEONG merged commit 79cffa0 into develop May 27, 2026
13 of 20 checks passed
@HA-SEUNG-JEONG HA-SEUNG-JEONG deleted the fix/bug branch May 27, 2026 00:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant