diff --git a/src/app/(marketing)/page.tsx b/src/app/(marketing)/page.tsx index 3e575a2..943e8c7 100644 --- a/src/app/(marketing)/page.tsx +++ b/src/app/(marketing)/page.tsx @@ -1,3 +1,4 @@ +import { LandingFeaturesSection1 } from "@/components/landing/LandingFeaturesSection1"; import { LandingHeroSection } from "@/components/landing/LandingHeroSection"; export const revalidate = 21600; @@ -6,6 +7,7 @@ export default function Home() { return ( <> + ); } diff --git a/src/components/landing/LandingFeatureGrid.tsx b/src/components/landing/LandingFeatureGrid.tsx new file mode 100644 index 0000000..4575b9e --- /dev/null +++ b/src/components/landing/LandingFeatureGrid.tsx @@ -0,0 +1,27 @@ +"use client"; + +import { FEATURES } from "@/lib/constants"; +import { cn } from "@/lib/utils"; +import { FeatureButton } from "@/shared/FeatureButton"; +import { Icon } from "@/shared/Icon"; +import { useFeaturePreviewStore } from "@/stores/featurePreviewStore"; +import type { LandingFeatureGridProps } from "@/types/landing"; + +export function LandingFeatureGrid({ className }: LandingFeatureGridProps) { + const setActiveFeature = useFeaturePreviewStore((state) => state.setActiveFeature); + + return ( +
+ {FEATURES.map((feature) => ( + } + title={feature.title} + description={feature.description} + onMouseEnter={() => setActiveFeature(feature)} + onFocus={() => setActiveFeature(feature)} + /> + ))} +
+ ); +} diff --git a/src/components/landing/LandingFeaturesSection1.tsx b/src/components/landing/LandingFeaturesSection1.tsx new file mode 100644 index 0000000..dead725 --- /dev/null +++ b/src/components/landing/LandingFeaturesSection1.tsx @@ -0,0 +1,57 @@ +"use client"; + +import { LandingFeatureGrid } from "@/components/landing/LandingFeatureGrid"; +import { cn } from "@/lib/utils"; +import { useFeaturePreviewStore } from "@/stores/featurePreviewStore"; +import type { LandingFeaturesSection1Props } from "@/types/landing"; +import Image from "next/image"; + +export function LandingFeaturesSection1({ className }: LandingFeaturesSection1Props) { + const activeFeature = useFeaturePreviewStore((state) => state.activeFeature); + + return ( +
+ {/* Left: 제목 + 기능 리스트 */} +
+
+

+ 필요한 기능만 골라 쓰는 +
+ 데일리 플래너 +

+

+ 나에게 필요한 모듈만 선택해 나만의 플래너를 만들 수 있습니다. +

+
+ + +
+ + {/* Right: 화면 미리보기 카드 */} +
+
+
+ {`${activeFeature.title} +
+
+
+
+ ); +} diff --git a/src/components/landing/LandingHeroCtas.tsx b/src/components/landing/LandingHeroCtas.tsx index 3e945f7..9401c78 100644 --- a/src/components/landing/LandingHeroCtas.tsx +++ b/src/components/landing/LandingHeroCtas.tsx @@ -5,9 +5,7 @@ import Link from "next/link"; export function LandingHeroCtas() { return ( -
+