Skip to content

feat: 랜딩 페이지 구현 (#1) - #3

Merged
wjswlgh96 merged 20 commits into
developfrom
feat/#1/landing-page
Jul 6, 2026
Merged

feat: 랜딩 페이지 구현 (#1)#3
wjswlgh96 merged 20 commits into
developfrom
feat/#1/landing-page

Conversation

@wjswlgh96

@wjswlgh96 wjswlgh96 commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

작업 내용

  • Figma 디자인 기반 랜딩 페이지 구현 (네비게이션 / 히어로 / 팀 유형 소개 / 기능 소개 / CTA / 푸터)
  • Motion 기반 애니메이션 적용 (히어로 스태거 등장, 그라데이션 텍스트 무빙, 스크롤 리빌, 카드 호버 lift, CTA 배경 그라데이션 시프트, 헤더 스크롤 blur 전환)
  • FSD(Feature-Sliced Design) 구조 도입 — views / widgets / shared 레이어 (Next.js Pages Router 충돌로 FSD의 pages 레이어는 views로 명명)
  • 브랜드 디자인 토큰 정의 (@theme, brand-* 9종 — Figma 전 화면 공통 컬러 검증 후 추출)
  • 개발 환경 정비: Prettier 팀 설정 적용, ESLint 코드 품질/FSD 경계 규칙, check 스크립트 추가

작업 결과

  • / 진입 시 Figma 랜딩 디자인과 일치하는 화면 렌더링 (데스크톱/모바일)
  • 모바일(375px)에서 기능 카드 2열, 히어로 CTA 버튼 풀폭 스택 등 Figma 모바일 프레임과 대조 검증 완료
  • 치환한 Tailwind 프리셋(max-w-4xl, p-6.25 등)이 Figma 원본 px과 동일함을 computed 값으로 확인

변경 사항

Added

  • src/views/landing — 랜딩 페이지 조립 컴포넌트 (Public API index.ts)
  • src/widgets/landing/* — landing-header / landing-hero / landing-teams / landing-features / landing-cta 위젯 5종
  • src/shared/lib/motion — 공용 애니메이션 상수 (fadeUp, staggerContainer, hoverLift 등)
  • src/app/globals.cssbrand-* 디자인 토큰, gradient-x keyframes
  • package.json — motion 의존성, typecheck / format / format:check / check 스크립트
  • eslint.config.mjs — no-console, no-explicit-any, FSD 레이어 경계 규칙

Changed

  • src/components/ui, src/libsrc/shared/ui, src/shared/lib 이동 (FSD)
  • components.json alias를 @/shared/* 기준으로 변경 (shadcn CLI 생성 경로)
  • .prettierrc 팀 컨벤션 설정 적용 및 전체 포맷
  • src/app/page.tsx — views/landing 렌더 전용으로 변경

Fixed

  • 해당 없음 (신규 구현)

테스트

  • 로컬 실행 확인

  • 주요 시나리오 확인

  • 영향 범위 확인

  • npm run check(lint + typecheck + format:check) 통과

  • npm run build 통과 (라우트 / 정적 생성 확인)

  • 데스크톱(1280)/모바일(375) 렌더링을 Figma 프레임과 대조 확인

  • FSD 경계 ESLint 규칙 위반 파일로 스모크 테스트 통과 확인

리뷰 체크리스트

  • PR base branch가 올바릅니다. (feature/* -> develop, 배포 시 develop 또는 release/* -> main)
  • 브랜치명이 Type/#issue-number/description 형식을 따릅니다.
  • 커밋 메시지가 컨벤션을 따릅니다.
  • 불필요한 console.log, 주석, 임시 코드를 제거했습니다.
  • 타입 에러와 린트 에러를 확인했습니다.
  • CodeRabbit 1차 리뷰를 확인했습니다.
  • CodeRabbit 리뷰 반영 후 Discord에 공유했습니다.
  • 최소 1명 이상의 approve 후 merge합니다.

리뷰 요청사항

  • FSD 구조가 처음 도입된 PR입니다. views(FSD pages 레이어 개명 — Next.js src/pages Pages Router 충돌 회피) / widgets/landing/* 폴더 구조와 import 방향이 컨벤션에 맞는지 봐주세요.
  • 브랜드 디자인 토큰(brand-*) 네이밍과 shadcn 변수를 건드리지 않은 additive 방식이 괜찮은지 확인 부탁드립니다.
  • ESLint FSD 경계 규칙(eslint.config.mjs)이 앞으로의 작업에 방해되지 않을지 의견 주세요.

관련 이슈

Closes #1

Summary by CodeRabbit

  • New Features
    • 첫 화면용 랜딩 페이지가 추가되었으며, 헤더(스크롤 반응), 히어로, 기능 소개(캐러셀), 단계 안내, 템플릿 선택 미리보기, CTA, 푸터로 구성됩니다. 섹션 전반에 진입 애니메이션과 캐러셀 자동 회전/일시중지 등의 인터랙션이 적용되었습니다.
  • Documentation
    • README 및 개발 문서의 표기/구성 형식을 전반적으로 정리하고, 스크립트/프로젝트 구조 안내를 재구성했습니다.
  • Chores
    • 코드 스타일·검증 및 포맷 관련 설정과 실행 스크립트를 일관되게 정비했습니다.

@coderabbitai

coderabbitai Bot commented Jul 3, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

랜딩 페이지가 FSD 구조로 추가되고, 공용 유틸·모션 설정·경로 별칭이 shared 레이어로 정리되었습니다. 헤더, 히어로, 템플릿, 기능 소개, 온보딩 단계, CTA, 푸터가 조립되며 ESLint, Prettier, 스크립트, 문서도 함께 갱신되었습니다.

Changes

랜딩 페이지 기능 구현

Layer / File(s) Summary
공용 유틸과 랜딩 진입점
src/shared/lib/motion/*, src/shared/lib/utils.ts, src/shared/ui/button.tsx, src/app/layout.tsx, src/shared/lib/client.ts, src/shared/lib/server.ts, src/shared/lib/middleware.ts, components.json, src/views/landing/*, src/app/page.tsx
cn 유틸과 motion variants가 shared 레이어에 추가되고, import 경로/alias가 갱신되었으며, LandingPage와 루트 페이지 연결이 추가되었습니다.
헤더와 히어로 섹션
src/widgets/landing/landing-header/*, src/widgets/landing/landing-hero/*, src/widgets/landing/landing-cta/*
스크롤 반응형 헤더, 애니메이션 히어로, 하단 CTA와 푸터 및 각 위젯의 public export가 추가되었습니다.
템플릿, 기능 소개, 온보딩 단계 섹션
src/widgets/landing/landing-templates/*, src/widgets/landing/landing-features/*, src/widgets/landing/landing-steps/*, src/views/landing/ui/LandingPage.tsx
템플릿 3종·기능 카드 7종 데이터와 이를 렌더링하는 선택형 미리보기, 자동 순환 카드, 온보딩 3단계 UI가 추가되었고 랜딩 페이지 조립에 포함되었습니다.
ESLint 규칙과 체크 스크립트
eslint.config.mjs, package.json
FSD 레이어 import 제한 규칙과 no-console/no-explicit-any 규칙이 추가되고, typecheck/format/format:check/check 스크립트가 신설되었습니다.
설정 파일 포맷 정리
.prettierrc, .prettierignore, next.config.ts, postcss.config.mjs, .coderabbit.yaml, .gitignore, .github/ISSUE_TEMPLATE/issue_template.md, src/app/globals.css
인용부호와 포맷이 정리되고, ignore 규칙·Prettier 규칙·테마/애니메이션 변수·이슈 템플릿 배치가 갱신되었습니다.
README와 컨벤션 문서 표 정리
README.md, docs/conventions/code-convention.md, docs/conventions/prettier-convention.md
README의 개념/기능/기술 스택/스크립트/프로젝트 구조와 컨벤션 문서의 규칙 표가 마크다운 테이블로 재정리되었습니다.

Estimated code review effort: 3 (Moderate) | ~30 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Browser
  participant Home as src/app/page.tsx
  participant LandingPage as src/views/landing/ui/LandingPage.tsx
  participant Widgets as LandingHeader/HeroSection/TemplatesSection/FeaturesSection/StepsSection/CtaSection/LandingFooter

  Browser->>Home: GET /
  Home->>LandingPage: render LandingPage
  LandingPage->>Widgets: sections 조립
  Widgets-->>Browser: 랜딩 페이지 UI
Loading

Related issues: #1
Suggested labels: feature, frontend, tooling
Suggested reviewers: 프로젝트 유지관리자

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed 제목이 랜딩 페이지 구현이라는 핵심 변경을 정확히 요약합니다.
Description check ✅ Passed 템플릿의 필수 섹션과 체크리스트가 모두 채워져 있어 구조와 내용이 충분합니다.
Linked Issues check ✅ Passed 네비게이션, 히어로, 3종 팀 유형, 7종 기능, CTA, 푸터와 반응형·체크 스크립트가 요구사항을 충족합니다.
Out of Scope Changes check ✅ Passed 추가 설정과 문서 정리가 있지만 PR 설명에 명시된 FSD·품질·포맷 정비 범위 안입니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/#1/landing-page

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

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

🤖 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 `@eslint.config.mjs`:
- Around line 30-42: `no-restricted-imports` in eslint.config.mjs only checks
import specifier strings, so relative paths can bypass the FSD layer
restriction. Update the import-boundary enforcement to use a path-aware rule
such as `eslint-plugin-import`’s `no-restricted-paths` or
`eslint-plugin-boundaries`, and configure it around the existing
`forbidden`/`layer` logic so it validates real file locations rather than
alias-only imports.
- Around line 7-43: The FSD import restriction patterns in fsdLayerRules are too
shallow and only match one path segment, so imports like deeper public API paths
can bypass the rule. Update the forbidden patterns in the layer mapping used by
no-restricted-imports to use recursive matching for each upper layer (for
example in the fsdLayerRules configuration for views, widgets, features,
entities, and shared) so nested imports are covered as well.

In `@README.md`:
- Around line 82-87: The README script table is missing the newly added
validation commands, so update the table to match the actual scripts defined in
package.json. In the README section with npm run dev/build/start/lint, add
entries for typecheck, format, and check, and keep the descriptions aligned with
the existing script names so the documented entry points stay in sync.

In `@src/widgets/landing/landing-cta/ui/LandingFooter.tsx`:
- Line 5: The footer copyright year is hardcoded in LandingFooter, so update the
JSX in LandingFooter.tsx to derive the year dynamically instead of embedding a
fixed 2026. Use the existing footer text element and replace the static year
with a value from new Date().getFullYear() so the displayed copyright stays
current without manual edits.

In `@src/widgets/landing/landing-hero/ui/HeroSection.tsx`:
- Line 33: The gradient text in HeroSection is using the removed Tailwind v4
utility bg-gradient-to-r, so update the class on the affected span in
HeroSection to use bg-linear-to-r instead while keeping the existing gradient
stops and text-clip styling unchanged.
- Line 51: In HeroSection, the hover scaling utility uses a non-standard
Tailwind class, so the hover effect won’t apply; update the button’s className
in the landing hero component to use the valid arbitrary scale syntax instead of
hover:scale-103. Check the class string on the primary CTA in HeroSection and
replace the invalid scale utility with the Tailwind-supported form.

In `@src/widgets/landing/landing-teams/config/teams.ts`:
- Around line 9-13: The card color values in the teams landing config are
hardcoded hex literals, which creates sync burden across similar config files
like landing-features/config/features.ts. Update the teams config mapping to
reference shared design tokens or CSS variables instead of direct hex values,
and apply the same pattern consistently to the gradient, borderColor, tagBg, and
tagText fields so color changes stay centralized.
🪄 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: ASSERTIVE

Plan: Pro Plus

Run ID: 33c99c46-729b-407f-8423-e859bfd75c57

📥 Commits

Reviewing files that changed from the base of the PR and between c827378 and c4b77d7.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json, !package-lock.json
📒 Files selected for processing (39)
  • .coderabbit.yaml
  • .github/ISSUE_TEMPLATE/issue_template.md
  • .gitignore
  • .prettierignore
  • .prettierrc
  • README.md
  • components.json
  • docs/conventions/code-convention.md
  • docs/conventions/prettier-convention.md
  • eslint.config.mjs
  • next.config.ts
  • package.json
  • postcss.config.mjs
  • src/app/globals.css
  • src/app/layout.tsx
  • src/app/page.tsx
  • src/lib/utils.ts
  • src/shared/lib/client.ts
  • src/shared/lib/middleware.ts
  • src/shared/lib/motion/index.ts
  • src/shared/lib/motion/variants.ts
  • src/shared/lib/server.ts
  • src/shared/lib/utils.ts
  • src/shared/ui/button.tsx
  • src/views/landing/index.ts
  • src/views/landing/ui/LandingPage.tsx
  • src/widgets/landing/landing-cta/index.ts
  • src/widgets/landing/landing-cta/ui/CtaSection.tsx
  • src/widgets/landing/landing-cta/ui/LandingFooter.tsx
  • src/widgets/landing/landing-features/config/features.ts
  • src/widgets/landing/landing-features/index.ts
  • src/widgets/landing/landing-features/ui/FeaturesSection.tsx
  • src/widgets/landing/landing-header/index.ts
  • src/widgets/landing/landing-header/ui/LandingHeader.tsx
  • src/widgets/landing/landing-hero/index.ts
  • src/widgets/landing/landing-hero/ui/HeroSection.tsx
  • src/widgets/landing/landing-teams/config/teams.ts
  • src/widgets/landing/landing-teams/index.ts
  • src/widgets/landing/landing-teams/ui/TeamsSection.tsx
💤 Files with no reviewable changes (1)
  • src/lib/utils.ts

Comment thread eslint.config.mjs
Comment thread eslint.config.mjs
Comment thread README.md Outdated
Comment thread src/widgets/landing/landing-cta/ui/LandingFooter.tsx Outdated
Comment thread src/widgets/landing/landing-hero/ui/HeroSection.tsx Outdated
Comment thread src/widgets/landing/landing-hero/ui/HeroSection.tsx Outdated
Comment thread src/widgets/landing/landing-templates/config/templates.ts

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

🤖 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/widgets/landing/landing-header/ui/LandingHeader.tsx`:
- Line 36: `LandingHeader` contains a repeated gradient class pattern that is
also used in `HeroSection` and `CtaSection`, so extract the shared gradient
styling into a reusable utility/helper instead of duplicating the Tailwind class
string. Introduce a common class builder or `@utility` for the gradient
container, and update the `LandingHeader` element to use that shared symbol so
the direction/color variations stay centralized and easier to maintain.
🪄 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: ASSERTIVE

Plan: Pro Plus

Run ID: e98f9d44-0316-4694-bd20-6247f8242bb9

📥 Commits

Reviewing files that changed from the base of the PR and between c4b77d7 and 91144f3.

📒 Files selected for processing (5)
  • README.md
  • src/widgets/landing/landing-cta/ui/CtaSection.tsx
  • src/widgets/landing/landing-cta/ui/LandingFooter.tsx
  • src/widgets/landing/landing-header/ui/LandingHeader.tsx
  • src/widgets/landing/landing-hero/ui/HeroSection.tsx

Comment thread src/widgets/landing/landing-header/ui/LandingHeader.tsx

@seongjinss555 seongjinss555 left a comment

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.

나중에 디자인 토큰 정해지게 되면 색상이나 글꼴 같은 건 디자인 토큰으로만 수정 하시면 될 거 같습니다~ 고생하셨습니다

@wjswlgh96

wjswlgh96 commented Jul 3, 2026

Copy link
Copy Markdown
Contributor Author

@seongjinss555 일단은 globals.css에 변수 적용은 해놨어요~ 추후에 컬러 제대로 정해지면 그 부분 수정하면 될 것 같습니다^^

globals.css theme 블록에 적용되어 있고 현재 토큰은

  • 컬러 토큰 9개: brand(주색) / brand-ink(헤딩) / brand-muted(보조 텍스트) / brand-surface(섹션 배경) / brand-soft(배지 배경) / brand-secondary(보조 버튼) / brand-start·brand-end(그라데이션) / brand-deep(CTA 그라데이션)
  • 애니메이션 토큰 1개: --animate-gradient-x + keyframes (그라데이션 무빙용)

이렇게 사용중입니다~~

@theme {
--color-brand: #5b4ee8;
--color-brand-ink: #1a1b2e;
--color-brand-muted: #7b7fa8;
--color-brand-surface: #f7f8fc;
--color-brand-soft: #eef0fb;
--color-brand-secondary: #f1f3f9;
--color-brand-start: #615fff;
--color-brand-end: #8e51ff;
--color-brand-deep: #7f22fe;
--animate-gradient-x: gradient-x 6s ease infinite;

해당 코드 위치입니다^^

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/widgets/landing/landing-features/ui/FeaturesSection.tsx (1)

38-95: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

가로 스크롤 영역에 접근성 힌트 보강 고려.

overflow-x-auto 컨테이너에 포커스 가능한 인터랙티브 요소가 없어 현재는 심각한 문제는 아니지만, 스크린리더/키보드 사용자를 위해 role="region"aria-label, 또는 tabIndex={0}을 추가하면 스크롤 가능 영역임을 명확히 알릴 수 있습니다.

🤖 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/widgets/landing/landing-features/ui/FeaturesSection.tsx` around lines 38
- 95, In FeaturesSection’s horizontal scroll container (the motion.div wrapping
featureCards), add accessible scroll-region semantics so assistive tech can
recognize it as scrollable. Update that container to expose a clear label such
as a region with an aria-label, and consider making it keyboard focusable with
tabIndex={0} so users can discover and operate the overflow-x-auto area. Keep
the change localized to the motion.div in FeaturesSection and preserve the
existing layout and animation props.
🤖 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/widgets/landing/landing-hero/ui/HeroSection.tsx`:
- Around line 16-22: The Image in HeroSection uses fill without an explicit
sizes prop, so update that background Image to include sizes="100vw". Keep the
change localized to the Image component in HeroSection and preserve the existing
fill, priority, and styling props while adding the responsive sizing hint.

In `@src/widgets/landing/landing-templates/ui/TemplatesSection.tsx`:
- Around line 42-70: The template selection button in TemplatesSection only
exposes selection through visual styles, so add an aria-pressed state to the
button using the existing isSelected value. Update the button element that calls
setSelectedId(item.id) so screen readers can announce which template is
selected, while keeping the current styling logic unchanged.

---

Outside diff comments:
In `@src/widgets/landing/landing-features/ui/FeaturesSection.tsx`:
- Around line 38-95: In FeaturesSection’s horizontal scroll container (the
motion.div wrapping featureCards), add accessible scroll-region semantics so
assistive tech can recognize it as scrollable. Update that container to expose a
clear label such as a region with an aria-label, and consider making it keyboard
focusable with tabIndex={0} so users can discover and operate the
overflow-x-auto area. Keep the change localized to the motion.div in
FeaturesSection and preserve the existing layout and animation props.
🪄 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: ASSERTIVE

Plan: Pro Plus

Run ID: c90fae77-be99-4714-8dda-c3f499b76f0a

📥 Commits

Reviewing files that changed from the base of the PR and between 91144f3 and 1a2ef65.

⛔ Files ignored due to path filters (4)
  • public/landing/avatar-1.png is excluded by !**/*.png, !public/**
  • public/landing/avatar-2.png is excluded by !**/*.png, !public/**
  • public/landing/avatar-3.png is excluded by !**/*.png, !public/**
  • public/landing/hero-bg.png is excluded by !**/*.png, !public/**
📒 Files selected for processing (12)
  • src/views/landing/ui/LandingPage.tsx
  • src/widgets/landing/landing-cta/ui/CtaSection.tsx
  • src/widgets/landing/landing-cta/ui/LandingFooter.tsx
  • src/widgets/landing/landing-features/config/features.ts
  • src/widgets/landing/landing-features/ui/FeaturesSection.tsx
  • src/widgets/landing/landing-header/ui/LandingHeader.tsx
  • src/widgets/landing/landing-hero/ui/HeroSection.tsx
  • src/widgets/landing/landing-steps/index.ts
  • src/widgets/landing/landing-steps/ui/StepsSection.tsx
  • src/widgets/landing/landing-templates/config/templates.ts
  • src/widgets/landing/landing-templates/index.ts
  • src/widgets/landing/landing-templates/ui/TemplatesSection.tsx

Comment thread src/widgets/landing/landing-hero/ui/HeroSection.tsx Outdated
Comment thread src/widgets/landing/landing-templates/ui/TemplatesSection.tsx

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

🤖 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/widgets/landing/landing-features/ui/FeaturesSection.tsx`:
- Around line 36-44: The auto-rotation in FeaturesSection’s useEffect currently
keeps advancing the carousel with no way to pause, so add a hover/focus pause
mechanism around the interval logic. Update the FeaturesSection component to
stop the timer when the card area is hovered or focused, and restart it when
interaction ends, using the existing AUTO_ROTATE_MS interval and the
setActiveIndex/clearInterval flow so users can read content without being forced
to advance.
- Around line 28-30: `FeaturesSection`의 `getDisplayVariant`가 인덱스만 보고
`light`/`accent`를 고정 반환해서 `feature.variant`와 `CARD_STYLES.soft`가 무시되고 있습니다.
`featureCards`의 실제 `variant` 값을 우선 사용하도록 `getDisplayVariant`와 카드 렌더링 로직을 수정하고,
`soft`일 때도 아이콘 배경/텍스트 색상 분기가 적용되도록 `FeatureCard` 스타일 매핑과 `CARD_STYLES` 사용처를 함께
업데이트하세요.
🪄 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: ASSERTIVE

Plan: Pro Plus

Run ID: 9506fc2a-4df4-497b-af11-f409e012cbe3

📥 Commits

Reviewing files that changed from the base of the PR and between 1a2ef65 and 221ec76.

⛔ Files ignored due to path filters (1)
  • public/landing/hero-bg.png is excluded by !**/*.png, !public/**
📒 Files selected for processing (7)
  • src/widgets/landing/landing-cta/ui/CtaSection.tsx
  • src/widgets/landing/landing-cta/ui/LandingFooter.tsx
  • src/widgets/landing/landing-features/ui/FeaturesSection.tsx
  • src/widgets/landing/landing-header/ui/LandingHeader.tsx
  • src/widgets/landing/landing-hero/ui/HeroSection.tsx
  • src/widgets/landing/landing-steps/ui/StepsSection.tsx
  • src/widgets/landing/landing-templates/ui/TemplatesSection.tsx

Comment thread src/widgets/landing/landing-features/ui/FeaturesSection.tsx Outdated
Comment thread src/widgets/landing/landing-features/ui/FeaturesSection.tsx Outdated
- 백그라운드 탭 복귀 시 카드가 사라지던 문제 수정 (Page Visibility로 순환 정지 + 리셋 조건 방어)
- 캐러셀 트랙 양쪽 엣지 mask 페이드 추가
- hover/focus 시 자동 순환 일시정지
- 템플릿 선택 버튼 aria-pressed 추가
- 사용되지 않던 soft variant dead code 정리

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

🤖 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/widgets/landing/landing-features/ui/FeaturesSection.tsx`:
- Around line 39-65: Add an explicit pause/stop control for the rotating feature
in FeaturesSection so touch/mobile users can stop auto-rotation without relying
on hover or focus events. Update the existing auto-rotate flow around isPaused,
onMouseEnter/Leave, and onFocusCapture/BlurCapture so the new control toggles
the same pause state and remains accessible for keyboard and touch interactions.
Keep the visibility-based stop behavior intact, but make sure the user can
manually pause/resume the carousel from the UI.
🪄 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: ASSERTIVE

Plan: Pro Plus

Run ID: b904bb0b-fdba-42f0-b7ff-8780e46b392b

📥 Commits

Reviewing files that changed from the base of the PR and between 221ec76 and 09fc21e.

📒 Files selected for processing (3)
  • src/widgets/landing/landing-features/config/features.ts
  • src/widgets/landing/landing-features/ui/FeaturesSection.tsx
  • src/widgets/landing/landing-templates/ui/TemplatesSection.tsx

Comment thread src/widgets/landing/landing-features/ui/FeaturesSection.tsx Outdated
wjswlgh96 added 2 commits July 6, 2026 15:18
- 헤더 z-index를 z-50으로 올려 스크롤 시 히어로 콘텐츠 위로 고정
- 기능 캐러셀 트랙을 우측 뷰포트 끝까지 full-bleed 확장 (Figma 정합)
- 100vw 계산으로 생기던 가로 스크롤바를 overflow-x-clip으로 제거
- 터치/모바일 사용자를 위한 명시적 일시정지·재생 토글 버튼 추가
- hover/focus와 충돌하지 않도록 isManuallyPaused 상태로 분리
- interval을 isPaused/isManuallyPaused/isPageVisible로 게이팅
- APG 미디어 패턴에 맞춰 동적 aria-label 사용
@wjswlgh96
wjswlgh96 merged commit ccf6b02 into develop Jul 6, 2026
1 check passed
@wjswlgh96
wjswlgh96 deleted the feat/#1/landing-page branch July 6, 2026 06:49
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.

feat: 랜딩 페이지 구현

2 participants