Skip to content

[Fix] 랜딩 모바일 헤더 구현#101

Merged
woneeeee merged 2 commits intodevelopfrom
feat/WTH-mobile-header
Apr 30, 2026
Merged

[Fix] 랜딩 모바일 헤더 구현#101
woneeeee merged 2 commits intodevelopfrom
feat/WTH-mobile-header

Conversation

@woneeeee
Copy link
Copy Markdown
Member

@woneeeee woneeeee commented Apr 30, 2026

✅ PR 유형

어떤 변경 사항이 있었나요?

  • 새로운 기능 추가
  • 버그 수정
  • 코드에 영향을 주지 않는 변경사항(오타 수정, 탭 사이즈 변경, 변수명 변경)
  • 코드 리팩토링
  • 주석 추가 및 수정
  • 문서 수정
  • 빌드 부분 혹은 패키지 매니저 수정
  • 파일 혹은 폴더명 수정
  • 파일 혹은 폴더 삭제

📌 관련 이슈번호

  • Closed #

✅ Key Changes

  • 랜딩 모바일 헤더를 구현하였습니다

📸 스크린샷 or 실행영상


🎸 기타 사항 or 추가 코멘트

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능
    • 모바일 환경을 위한 슬라이드식 메뉴 추가로 네비게이션 개선
    • 모바일, 태블릿, 데스크톱에 최적화된 반응형 헤더 레이아웃 재설계

@woneeeee woneeeee requested review from JIN921, dalzzy and nabbang6 April 30, 2026 13:53
@woneeeee woneeeee self-assigned this Apr 30, 2026
@woneeeee woneeeee added the 🎨 Html&css 마크업 & 스타일링 label Apr 30, 2026
@github-actions
Copy link
Copy Markdown

🤖 Claude 테스트 제안

모델: claude-sonnet-4-6 | 토큰: 0 입력 / 0 출력

변경된 컴포넌트에 대해 Claude가 생성한 테스트 코드입니다. 검토 후 적합한 부분만 사용하세요.

src/components/landing/InquiryDialog.tsx

오류: Your credit balance is too low to access the Anthropic API. Please go to Plans & Billing to upgrade or purchase credits.


src/components/layout/header/PublicHeader.tsx

오류: Your credit balance is too low to access the Anthropic API. Please go to Plans & Billing to upgrade or purchase credits.


이 코멘트는 Claude API를 통해 자동 생성되었습니다. 반드시 검토 후 사용하세요.

@github-actions
Copy link
Copy Markdown

PR 테스트 결과

Jest: 통과

🎉 모든 테스트를 통과했습니다!

@github-actions
Copy link
Copy Markdown

구현한 기능 Preview: https://weeth-eurkbfbcm-weethsite-4975s-projects.vercel.app

@github-actions
Copy link
Copy Markdown

PR 검증 결과

TypeScript: 통과
ESLint: 통과
Prettier: 통과
Build: 통과

🎉 모든 검증을 통과했습니다!

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 30, 2026

Warning

Rate limit exceeded

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

To keep reviews running without waiting, you can enable usage-based add-on for your organization. This allows additional reviews beyond the hourly cap. Account admins can enable it under billing.

⌛ 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: f00932c3-7088-4161-826a-fe830cfecfa1

📥 Commits

Reviewing files that changed from the base of the PR and between 0c18683 and c088cad.

📒 Files selected for processing (5)
  • src/components/landing/CTASection.tsx
  • src/components/landing/InquiryDialog.tsx
  • src/components/landing/heroSection.shared.tsx
  • src/components/layout/header/Header.tsx
  • src/constants/landing/landing.ts
📝 Walkthrough

개요

InquiryDialog 컴포넌트가 제어/비제어 상태 관리를 지원하도록 업데이트되었으며, PublicHeader에 반응형 모바일 메뉴가 추가되었습니다. 두 컴포넌트 모두 더 유연한 사용성을 위해 개선되었습니다.

변경 사항

cohort / File(s) 요약
InquiryDialog 상태 관리
src/components/landing/InquiryDialog.tsx
openonOpenChange props를 추가하여 제어/비제어 상태 관리를 모두 지원합니다. 내부 internalOpen 상태를 도입하고 조건부 논리로 외부 또는 내부 상태를 관리합니다. children prop을 선택사항으로 변경하고 DialogTrigger 렌더링을 조건부로 처리합니다.
PublicHeader 반응형 UI
src/components/layout/header/PublicHeader.tsx
Sheet 기반 모바일 메뉴 컴포넌트(PublicMobileMenu)를 추가합니다. 모바일에서는 로고와 메뉴 버튼만 표시하고, 태블릿/데스크톱에서는 기존 네비게이션 항목을 유지합니다. 로고에 스무스 스크롤-투-탑 핸들러를 추가하고 레이아웃을 반응형으로 개선합니다.

코드 리뷰 소요 시간

🎯 3 (보통) | ⏱️ ~25분

관련된 가능성 있는 PR

제안 라벨

✨ Feature, 🎨 Html&css

제안 리뷰어

  • nabbang6
  • JIN921
  • dalzzy

축하 시

🐰 모바일 메뉴가 펄럭이네요, 반응형 마법!
상태 관리는 이제 유연하고 자유로워,
대화상자는 둘 다 알 수 있고,
헤더는 화면 어디서나 빛나요.
깔끔한 코드, 기쁜 마음! ✨

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check ❓ Inconclusive PR 설명이 필수 섹션 대부분을 포함하나, 관련 이슈번호가 누락되고 Key Changes가 매우 간략합니다. 관련 이슈번호를 명시하고, Key Changes를 더 상세히 작성하여 변경사항의 구체적 내용을 설명해주세요.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목이 주요 변경사항인 랜딩 페이지 모바일 헤더 구현을 명확하게 설명하고 있습니다.
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 feat/WTH-mobile-header

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
Review rate limit: 0/1 reviews remaining, refill in 51 minutes and 10 seconds.

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@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: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/components/layout/header/PublicHeader.tsx`:
- Around line 41-45: The SheetContent and header container currently use
hardcoded background classes (e.g., "bg-white" or raw hex) in the className on
the PublicHeader component; replace those raw color classes with design token
classes such as "bg-background" or "bg-container-neutral" (or
"bg-container-neutral-interaction" where interactive state styling is needed) in
the SheetContent className and the corresponding header container className(s)
(refer to the SheetContent usage and the header wrapper in PublicHeader.tsx) so
the component uses token-based background colors consistently instead of
hardcoded values.
- Around line 73-95: The header uses raw Tailwind utility values for typography
and colors across the menu/CTA buttons (e.g., text-[24px], leading-[30px],
tracking-[-0.005em], text-[`#909599`], bg-[`#E6EAED`], bg-[`#00C8AA`]) inside
PublicHeader (the "가입문의", login Link, and "지금 무료로 시작하기" CTA when showAuthButtons
is true); replace these raw values by creating CVA variants (e.g., menuItemCva
and ctaButtonCva) and switching the className props to use those CVA classes
along with the project token classes (typo-*, text-text-*, bg-button-*), and
apply the appropriate variant for common menu items vs CTA in the
SheetClose/Link/button elements so styling is centralized and tokens are used
instead of hardcoded values (also update the similar blocks at the other
occurrence noted).
- Around line 69-100: The mobile nav is missing the NAV_ITEMS links; update the
nav in PublicHeader to iterate NAV_ITEMS.map and render each item similarly to
desktop, using SheetClose asChild and Link for normal items and treating the
item with id === 'contact' specially by rendering a button that calls
setInquiryOpen(true); keep existing showAuthButtons handling intact and preserve
the same className/text styles used for other nav entries so mobile shows the
same landing section links as desktop.
🪄 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: 360781d3-0346-4630-8f34-1ee9da955aba

📥 Commits

Reviewing files that changed from the base of the PR and between 0c02f3c and 0c18683.

📒 Files selected for processing (2)
  • src/components/landing/InquiryDialog.tsx
  • src/components/layout/header/PublicHeader.tsx

Comment thread src/components/layout/header/PublicHeader.tsx
Comment on lines +69 to +100
<nav className="flex flex-col items-start gap-200 px-450 py-400" aria-label="랜딩 메뉴">
<SheetClose asChild>
<button
type="button"
className="cursor-pointer py-300 text-[24px] leading-[30px] font-bold tracking-[-0.005em]"
onClick={() => setInquiryOpen(true)}
>
가입문의
</button>
</SheetClose>

{showAuthButtons && (
<>
<SheetClose asChild>
<Link
href="/login"
className="cursor-pointer py-300 text-[24px] leading-[30px] font-bold tracking-[-0.005em]"
>
로그인
</Link>
</SheetClose>
<SheetClose asChild>
<Link
href="/login?intent=create"
className="cursor-pointer py-300 text-[24px] leading-[30px] font-bold tracking-[-0.005em]"
>
지금 무료로 시작하기
</Link>
</SheetClose>
</>
)}
</nav>
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

모바일 메뉴에서 NAV_ITEMS가 빠져 있습니다.

현재 모바일 메뉴는 가입문의와 인증 액션만 렌더링하고, 데스크톱에서 노출하는 랜딩 섹션 링크들은 전혀 보여주지 않습니다. 이 상태면 작은 화면에서는 주요 섹션으로 이동할 수 없어서 헤더 기능이 축소됩니다. 데스크톱과 동일하게 NAV_ITEMS.map(...)을 사용하고, contact만 예외 처리해서 다이얼로그를 여는 쪽이 안전합니다.

가능한 수정 예시
-          <nav className="flex flex-col items-start gap-200 px-450 py-400" aria-label="랜딩 메뉴">
-            <SheetClose asChild>
-              <button
-                type="button"
-                className="cursor-pointer py-300 text-[24px] leading-[30px] font-bold tracking-[-0.005em]"
-                onClick={() => setInquiryOpen(true)}
-              >
-                가입문의
-              </button>
-            </SheetClose>
+          <nav className="flex flex-col items-start gap-200 px-450 py-400" aria-label="랜딩 메뉴">
+            {NAV_ITEMS.map(({ id, label, href }) =>
+              id === 'contact' ? (
+                <SheetClose key={id} asChild>
+                  <button
+                    type="button"
+                    className="cursor-pointer py-300 text-[24px] leading-[30px] font-bold tracking-[-0.005em]"
+                    onClick={() => setInquiryOpen(true)}
+                  >
+                    {label}
+                  </button>
+                </SheetClose>
+              ) : (
+                <SheetClose key={id} asChild>
+                  <Link
+                    href={href}
+                    className="cursor-pointer py-300 text-[24px] leading-[30px] font-bold tracking-[-0.005em]"
+                  >
+                    {label}
+                  </Link>
+                </SheetClose>
+              ),
+            )}
 
             {showAuthButtons && (
               <>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/components/layout/header/PublicHeader.tsx` around lines 69 - 100, The
mobile nav is missing the NAV_ITEMS links; update the nav in PublicHeader to
iterate NAV_ITEMS.map and render each item similarly to desktop, using
SheetClose asChild and Link for normal items and treating the item with id ===
'contact' specially by rendering a button that calls setInquiryOpen(true); keep
existing showAuthButtons handling intact and preserve the same className/text
styles used for other nav entries so mobile shows the same landing section links
as desktop.

Comment thread src/components/layout/header/PublicHeader.tsx
@github-actions
Copy link
Copy Markdown

🤖 Claude 테스트 제안

모델: claude-sonnet-4-6 | 토큰: 0 입력 / 0 출력

변경된 컴포넌트에 대해 Claude가 생성한 테스트 코드입니다. 검토 후 적합한 부분만 사용하세요.

src/components/landing/CTASection.tsx

오류: Your credit balance is too low to access the Anthropic API. Please go to Plans & Billing to upgrade or purchase credits.


src/components/landing/InquiryDialog.tsx

오류: Your credit balance is too low to access the Anthropic API. Please go to Plans & Billing to upgrade or purchase credits.


src/components/landing/heroSection.shared.tsx

오류: Your credit balance is too low to access the Anthropic API. Please go to Plans & Billing to upgrade or purchase credits.


src/components/layout/header/Header.tsx

오류: Your credit balance is too low to access the Anthropic API. Please go to Plans & Billing to upgrade or purchase credits.


src/components/layout/header/PublicHeader.tsx

오류: Your credit balance is too low to access the Anthropic API. Please go to Plans & Billing to upgrade or purchase credits.


이 코멘트는 Claude API를 통해 자동 생성되었습니다. 반드시 검토 후 사용하세요.

@github-actions
Copy link
Copy Markdown

PR 테스트 결과

Jest: 통과

🎉 모든 테스트를 통과했습니다!

@github-actions
Copy link
Copy Markdown

구현한 기능 Preview: https://weeth-17q5df3h3-weethsite-4975s-projects.vercel.app

@github-actions
Copy link
Copy Markdown

PR 검증 결과

TypeScript: 통과
ESLint: 통과
Prettier: 통과
Build: 통과

🎉 모든 검증을 통과했습니다!

@woneeeee woneeeee merged commit e23a96a into develop Apr 30, 2026
5 checks passed
@woneeeee woneeeee deleted the feat/WTH-mobile-header branch April 30, 2026 14:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🎨 Html&css 마크업 & 스타일링

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant