Skip to content

Conversation

@Insung-Jo
Copy link

@Insung-Jo Insung-Jo commented Jun 20, 2025

📌 변경 사항 개요

  • 랜딩 페이지 구현

디자인은 기존 피그마와 차이가 없으며 적용된 색상에서 바꾸면 좋을 거 같은 색상들을 말씀해주세요!

✨ 요약

  • 랜딩 페이지 구현

📝 상세 내용

  • 기존의 브레이크 포인트로 진행하려고 했으나 예외적인 상황이 많이 발생하여 새로운 브레이크 포인트를 작성했습니다. (보통은 이미지 크기 때문에 일어나는 오버플로우 현상이 있었습니다.)
      screens: {
        mobile: { max: '375px' }, // 0 ~ 375px
        tablet: { raw: '(min-width: 376px) and (max-width: 744px)' }, // 376 ~ 1919px
        'mobile-wide': { raw: '(min-width: 0px) and (max-width: 683px)' }, // 0 ~ 683px
        'tablet-wide': { raw: '(min-width: 684px) and (max-width: 1439px)' }, // 684 ~ 1439px
      },
  • 전역 스타일에서 최소 너비를 지정했습니다.
html {
  height: 100%;
  min-width: 375px;
}

🔗 관련 이슈

🖼️ 스크린샷

브라우저

image

타블렛

image

모바일

image

화이트

image

## ✅ 체크리스트
  • 브랜치 네이밍 컨벤션을 준수했습니다
  • 커밋 컨벤션을 준수했습니다
  • 코드가 프로젝트의 스타일 가이드라인을 준수합니다

💡 참고 사항

  • 화이트 버전 색상 추천 받습니다! (아래 카드 부분)

Summary by CodeRabbit

Summary by CodeRabbit

  • 신규 기능

    • 랜딩 페이지에 헤더, 푸터, 메인, 히어로 섹션, 기능 카드, 포인트 섹션, 로고, 깃허브 아이콘 등 다양한 UI 컴포넌트가 추가되었습니다.
    • 각 컴포넌트는 반응형 레이아웃과 다크/라이트 테마를 지원합니다.
  • 스타일

    • 글로벌 스타일에 섹션 및 카드 배경색 유틸리티 클래스가 추가되었습니다.
    • 최소 화면 너비 설정과 함께 Tailwind CSS 브레이크포인트가 더욱 세분화되고 세밀하게 조정되었습니다.
  • 리팩터

    • 랜딩 페이지 구조가 모듈형 컴포넌트 기반으로 개선되었습니다.

@Insung-Jo Insung-Jo added this to the 2차 구현 기간 milestone Jun 20, 2025
@Insung-Jo Insung-Jo self-assigned this Jun 20, 2025
@Insung-Jo Insung-Jo added ✨Feat 기능 개발 🎨Style UI, 스타일 관련 수정 labels Jun 20, 2025
@coderabbitai
Copy link

coderabbitai bot commented Jun 20, 2025

"""

Walkthrough

랜딩 페이지를 구성하는 여러 React 컴포넌트가 새로 추가되고, 글로벌 CSS와 Tailwind 설정이 업데이트되어 반응형 디자인과 다크 모드 지원이 강화되었습니다. 기존 단일 구조에서 헤더, 메인, 푸터 등 모듈화된 컴포넌트 기반 구조로 변경되었습니다.

Changes

파일/경로 요약 변경 요약
src/app/features/landing/components/FeatureCard.tsx
.../FeatureCardSection.tsx
.../Footer.tsx
.../GithubIcon.tsx
.../Header.tsx
.../HeroSection.tsx
.../Logo.tsx
.../Main.tsx
.../PointSection.tsx
랜딩 페이지 UI용 React 컴포넌트(FeatureCard, FeatureCardSection, Footer, GithubIcon, Header, HeroSection, Logo, Main, PointSection) 신규 추가
src/app/globals.css body 선택자 제거, htmlmin-widthheight 적용, .BG-section.BG-card 유틸리티 클래스 추가
src/app/page.tsx Home 컴포넌트가 Header, Main, Footer 컴포넌트로 재구성됨
tailwind.config.ts Tailwind 반응형 breakpoint 설정 변경 및 추가, 기존 desktop breakpoint 제거

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant Header
  participant Main
  participant Footer
  participant HeroSection
  participant PointSection
  participant FeatureCardSection

  User->>Header: 페이지 진입 시 헤더 표시
  User->>Main: 메인 콘텐츠 렌더링
  Main->>HeroSection: 히어로 섹션 렌더링
  Main->>PointSection: 포인트 섹션 렌더링
  Main->>FeatureCardSection: 기능 카드 섹션 렌더링
  User->>Footer: 푸터 표시
Loading

Suggested labels

💄Modify

Poem

🐇
새로워진 랜딩에 토끼가 춤춰요,
헤더와 푸터, 카드들이 반짝이고,
Tailwind 바람에 반응형이 펼쳐져요!
어둠과 빛, 테마 따라 로고도 변신,
CoPlan의 시작, 이젠 더 멋진 여정!
🥕✨
"""

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

npm error Exit handler never called!
npm error This is an error with npm itself. Please report this error at:
npm error https://github.com/npm/cli/issues
npm error A complete log of this run can be found in: /.npm/_logs/2025-06-21T06_46_15_269Z-debug-0.log


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0bc9d36 and 372d85a.

📒 Files selected for processing (1)
  • src/app/features/landing/components/FeatureCard.tsx (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/app/features/landing/components/FeatureCard.tsx
⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: eslint-check
✨ Finishing Touches
  • 📝 Generate Docstrings

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • 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

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

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

🧹 Nitpick comments (6)
src/app/features/landing/components/GithubIcon.tsx (1)

1-28: 테마 대응 GitHub 아이콘 구현이 우수합니다.

useThemeuseMounted 훅을 활용한 테마별 아이콘 처리와 SSR 호환성을 위한 폴백 처리가 잘 구현되어 있습니다. suppressHydrationWarning 사용도 적절합니다.

다만 GitHub URL을 하드코딩하는 대신 환경변수나 설정 파일로 분리하는 것을 고려해보세요:

- href="https://github.com/CoPlay-FE/coplan"
+ href={process.env.NEXT_PUBLIC_GITHUB_URL || "https://github.com/CoPlay-FE/coplan"}
src/app/features/landing/components/FeatureCard.tsx (1)

21-35: 반응형 카드 레이아웃이 우수하게 구현되었습니다.

새로운 브레이크포인트와 BG 유틸리티 클래스를 활용한 반응형 디자인이 잘 구현되어 있습니다. 다만 하드코딩된 값들을 개선할 수 있습니다.

유지보수성 향상을 위해 다음과 같은 개선을 고려해보세요:

- <p className="mb-16 text-18 font-bold text-white">{title}</p>
- <p className="text-16 font-normal text-white">{description}</p>
+ <p className="mb-16 text-18 font-bold Text-white">{title}</p>
+ <p className="text-16 font-normal Text-white">{description}</p>

기존 글로벌 CSS의 테마 대응 클래스를 활용하는 것이 일관성 측면에서 더 좋습니다.

src/app/features/landing/components/Header.tsx (1)

13-14: 네비게이션 링크의 접근성 개선을 고려해보세요.

로그인과 회원가입 링크에 aria-label 속성을 추가하거나, 활성 상태 스타일을 추가하면 사용자 경험이 향상될 수 있습니다.

-          <Link href="/login">로그인</Link>
-          <Link href="/signup">회원 가입</Link>
+          <Link href="/login" className="hover:text-blue-600 transition-colors">로그인</Link>
+          <Link href="/signup" className="hover:text-blue-600 transition-colors">회원 가입</Link>
src/app/features/landing/components/HeroSection.tsx (1)

21-26: CTA 버튼의 접근성을 개선할 수 있습니다.

버튼에 포커스 스타일과 hover 효과를 추가하면 사용자 경험이 향상됩니다.

-        className="BG-blue mt-8 flex h-54 w-280 items-center justify-center rounded-8 text-center text-lg font-medium text-white"
+        className="BG-blue mt-8 flex h-54 w-280 items-center justify-center rounded-8 text-center text-lg font-medium text-white hover:opacity-90 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 transition-all"
src/app/features/landing/components/FeatureCardSection.tsx (1)

9-9: 복잡한 반응형 클래스를 정리할 수 있습니다.

여러 반응형 클래스가 중복되고 복잡합니다. 가독성을 위해 정리하는 것을 고려해보세요.

-      <div className="mobile-wide:flex-col tablet-wide:flex-col mobile-wide:gap-40 tablet-wide:justify-center flex w-full flex-row items-center justify-between gap-33">
+      <div className="flex w-full flex-row items-center justify-between gap-33 mobile-wide:flex-col mobile-wide:gap-40 tablet-wide:flex-col tablet-wide:justify-center">
src/app/features/landing/components/PointSection.tsx (1)

6-21: 매우 긴 className 문자열의 가독성 개선을 고려해보세요.

현재 className이 매우 길어서 유지보수성이 떨어집니다. CSS 모듈이나 클래스 변수를 사용하여 가독성을 향상시킬 수 있습니다.

예시:

const sectionClasses = [
  'mobile-wide:pl-0 mobile-wide:pt-60',
  'BG-section',
  'tablet-wide:flex-col tablet-wide:max-w-664 tablet-wide:gap-224',
  'mobile-wide:flex-col mobile-wide:max-w-343 mobile-wide:gap-194',
  'mb-59 flex h-auto w-full max-w-1200 justify-between rounded-8 pl-60 pt-103'
].join(' ')

// 사용시
<section className={sectionClasses}>
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 92dd511 and 6d26ed5.

⛔ Files ignored due to path filters (11)
  • public/images/banner.png is excluded by !**/*.png
  • public/images/dashboard.png is excluded by !**/*.png
  • public/images/github-icon-block.svg is excluded by !**/*.svg
  • public/images/github-icon-white.svg is excluded by !**/*.svg
  • public/images/invite.svg is excluded by !**/*.svg
  • public/images/logo-dark2.svg is excluded by !**/*.svg
  • public/images/logo-icon-dark.svg is excluded by !**/*.svg
  • public/images/logo-icon-light.svg is excluded by !**/*.svg
  • public/images/member.svg is excluded by !**/*.svg
  • public/images/newdashboard.svg is excluded by !**/*.svg
  • public/images/todomodal.svg is excluded by !**/*.svg
📒 Files selected for processing (12)
  • src/app/features/landing/components/FeatureCard.tsx (1 hunks)
  • src/app/features/landing/components/FeatureCardSection.tsx (1 hunks)
  • src/app/features/landing/components/Footer.tsx (1 hunks)
  • src/app/features/landing/components/GithubIcon.tsx (1 hunks)
  • src/app/features/landing/components/Header.tsx (1 hunks)
  • src/app/features/landing/components/HeroSection.tsx (1 hunks)
  • src/app/features/landing/components/Logo.tsx (1 hunks)
  • src/app/features/landing/components/Main.tsx (1 hunks)
  • src/app/features/landing/components/PointSection.tsx (1 hunks)
  • src/app/globals.css (2 hunks)
  • src/app/page.tsx (1 hunks)
  • tailwind.config.ts (1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (6)
src/app/features/landing/components/Footer.tsx (1)
src/app/features/landing/components/GithubIcon.tsx (1)
  • GithubIcon (8-28)
src/app/page.tsx (2)
src/app/features/landing/components/Main.tsx (1)
  • Main (5-15)
src/app/features/landing/components/Footer.tsx (1)
  • Footer (3-10)
src/app/features/landing/components/FeatureCardSection.tsx (1)
src/app/features/landing/components/FeatureCard.tsx (1)
  • FeatureCard (12-36)
src/app/features/landing/components/Header.tsx (2)
src/app/features/landing/components/Logo.tsx (1)
  • Logo (8-50)
src/app/shared/components/ThemeToggle.tsx (1)
  • ThemeToggle (6-27)
src/app/features/landing/components/GithubIcon.tsx (1)
src/app/shared/hooks/useMounted.ts (1)
  • useMounted (3-11)
src/app/features/landing/components/Logo.tsx (1)
src/app/shared/hooks/useMounted.ts (1)
  • useMounted (3-11)
⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: eslint-check
🔇 Additional comments (15)
src/app/globals.css (2)

11-14: 최소 너비 설정이 적절합니다.

min-width: 375px 설정은 PR 목표에서 언급된 대로 이미지 크기로 인한 오버플로우 문제를 해결하는 좋은 접근법입니다. 모바일 디바이스에서 일관된 레이아웃을 보장할 수 있습니다.


87-93: 새로운 배경 유틸리티 클래스가 잘 구현되었습니다.

.BG-section.BG-card 클래스가 기존 패턴과 일관되게 구현되어 있으며, 다크/라이트 테마 모두 적절히 지원합니다. 새로 추가된 랜딩 페이지 컴포넌트들에서 활용되는 것을 확인했습니다.

src/app/features/landing/components/FeatureCard.tsx (1)

3-10: Props 인터페이스가 잘 정의되었습니다.

타입 안전성을 위한 인터페이스 정의가 명확하고, 이미지 관련 속성들이 적절히 분리되어 있습니다.

src/app/page.tsx (2)

1-3: 컴포넌트 임포트가 적절합니다.

모듈화된 컴포넌트들의 임포트 경로가 일관성 있게 정의되어 있습니다.


7-11: 페이지 구조가 모듈화되어 개선되었습니다.

기존의 단순한 제목 표시에서 Header, Main, Footer로 구성된 의미있는 페이지 구조로 개선되었습니다. Fragment 사용으로 불필요한 DOM 노드도 제거했네요.

src/app/features/landing/components/Footer.tsx (2)

5-5: 반응형 레이아웃이 잘 구현되었습니다.

커스텀 브레이크포인트(tablet-wide, mobile-wide)를 사용한 반응형 디자인이 적절하게 적용되었고, 레이아웃 변경이 자연스럽게 구현되었습니다.


6-7: 저작권 표시와 소셜 링크 구성이 적절합니다.

Footer의 핵심 요소들(저작권, GitHub 링크)이 깔끔하게 배치되어 있고, GithubIcon 컴포넌트와의 조합도 잘 되어 있습니다.

src/app/features/landing/components/Header.tsx (1)

9-9: 헤더의 sticky 포지셔닝과 z-index 설정이 적절합니다.

sticky 포지션과 z-50 설정으로 헤더가 스크롤 시에도 상단에 고정되도록 잘 구현되었습니다.

src/app/features/landing/components/HeroSection.tsx (2)

8-14: 이미지 최적화가 잘 구현되었습니다.

priority 속성과 적절한 sizes 속성을 사용하여 LCP(Largest Contentful Paint) 성능을 개선했고, 반응형 이미지 로딩이 적절히 설정되었습니다.


17-19: 브랜드 강조 효과가 효과적입니다.

제목에서 "CoPlan" 브랜드명을 Text-blue 클래스로 강조한 것이 시각적으로 좋은 효과를 만들어냅니다.

src/app/features/landing/components/FeatureCardSection.tsx (2)

4-4: 반응형 레이아웃 구현이 우수합니다.

max-w-1200으로 최대 너비를 제한하고, 다양한 브레이크포인트에서 적절한 정렬을 적용한 것이 좋습니다.


10-33: 피처 카드들의 이미지 높이가 일관성이 없습니다.

각 카드의 이미지 높이(123px, 239px, 195px)가 달라서 시각적 균형이 맞지 않을 수 있습니다. 디자인 의도가 아니라면 통일하는 것을 고려해보세요.

이미지 높이 차이가 의도된 디자인인지 확인이 필요합니다. 균일한 카드 높이를 원한다면 이미지 컨테이너 높이를 고정하고 object-contain을 사용하는 것을 고려해보세요.

src/app/features/landing/components/Main.tsx (2)

5-15: 깔끔한 레이아웃 구조입니다.

메인 콘텐츠 영역을 논리적으로 구성했고, 각 섹션을 적절히 분리하여 유지보수성이 좋습니다. 시맨틱 HTML(<main>)을 올바르게 사용한 점도 좋습니다.


9-12: 섹션 그룹핑이 합리적입니다.

HeroSection을 별도로 두고, PointSectionFeatureCardSection을 함께 그룹핑한 것이 시각적 계층 구조에 적합합니다.

src/app/features/landing/components/Logo.tsx (1)

8-50: 테마 인식 로고 컴포넌트 구현이 우수합니다.

hydration mismatch를 방지하기 위한 useMounted 훅 사용과 테마별 로고 이미지 처리 로직이 적절하게 구현되어 있습니다. 반응형 디자인과 접근성 고려사항도 잘 반영되었습니다.

Copy link

@LeeCh0129 LeeCh0129 left a comment

Choose a reason for hiding this comment

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

랜딩 페이지 구현 고생많으셨습니다~ 얼른 머지하시고 다음 작업으로 가시죠!

@Insung-Jo Insung-Jo merged commit 076d3c3 into develop Jun 21, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨Feat 기능 개발 🎨Style UI, 스타일 관련 수정

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants