diff --git a/src/app/(public)/_components/Header.tsx b/src/app/(public)/_components/Header.tsx
deleted file mode 100644
index 52ae353..0000000
--- a/src/app/(public)/_components/Header.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-import { RootInner } from './Inner';
-import Logo from './Logo';
-import Nav from './Nav';
-
-export default function Header() {
- return (
-
- );
-}
diff --git a/src/app/(public)/_components/Logo.tsx b/src/app/(public)/_components/Logo.tsx
deleted file mode 100644
index f24d62f..0000000
--- a/src/app/(public)/_components/Logo.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import Link from 'next/link';
-import Image from 'next/image';
-import LogoBI from '@/assets/images/logo_bi_white.svg';
-import LogoCI from '@/assets/images/logo_ci_white.svg';
-
-export default function Logo() {
- return (
-
-
-
-
- );
-}
diff --git a/src/app/(public)/_components/Nav.tsx b/src/app/(public)/_components/Nav.tsx
deleted file mode 100644
index 227eead..0000000
--- a/src/app/(public)/_components/Nav.tsx
+++ /dev/null
@@ -1,29 +0,0 @@
-import Link from 'next/link';
-import { BaseLinkItem } from './type';
-
-const ROOT_NAV_LIST: BaseLinkItem[] = [
- {
- path: '/login',
- label: '로그인',
- },
- {
- path: '/signup',
- label: '회원가입',
- },
-];
-
-export default function Nav() {
- return (
-
- );
-}
diff --git a/src/app/(public)/faq/page.tsx b/src/app/(public)/faq/page.tsx
index 857f1d8..39cd1c5 100644
--- a/src/app/(public)/faq/page.tsx
+++ b/src/app/(public)/faq/page.tsx
@@ -1,5 +1,5 @@
-import SubHeader from '../_components/SubHeader';
-import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from './_components/Accordion';
+import SubHeader from '@/components/landing/layout/SubHeader';
+import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/landing/Accordion';
const FAQ_CONTENTS = [
{
diff --git a/src/app/(public)/landing/page.tsx b/src/app/(public)/landing/page.tsx
deleted file mode 100644
index 08a478a..0000000
--- a/src/app/(public)/landing/page.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-'use client';
-
-import Feature from './_components/Feature';
-import Hero from './_components/Hero';
-import Setting from './_components/Setting';
-import SmoothScroll from './_components/SmoothScroll';
-
-export default function LandingPage() {
- return (
-
-
-
-
-
- );
-}
diff --git a/src/app/(public)/layout.tsx b/src/app/(public)/layout.tsx
index c7bccfc..82f61b6 100644
--- a/src/app/(public)/layout.tsx
+++ b/src/app/(public)/layout.tsx
@@ -1,14 +1,66 @@
import { PropsWithChildren } from 'react';
-import Header from './_components/Header';
-import Footer from './_components/Footer';
-import Main from './_components/Main';
+import Footer from '@/components/landing/layout/Footer';
+import Main from '@/components/landing/layout/Main';
+import SmoothScroll from '@/components/landing/SmoothScroll';
+import Header from '@/components/landing/layout/Header';
+import { BaseLinkItem, IconLinkItem } from '@/components/landing/layout/type';
+import ICON_MAIL from '@/assets/icons/email.svg';
+import ICON_FACEBOOK from '@/assets/icons/facebook.svg';
+import ICON_INSTAGRAM from '@/assets/icons/Instagram.svg';
+
+const ROOT_NAV_LIST: BaseLinkItem[] = [
+ {
+ path: '/login',
+ label: '로그인',
+ },
+ {
+ path: '/signup',
+ label: '회원가입',
+ },
+];
+
+const FOOTER_NAV_LIST: BaseLinkItem[] = [
+ {
+ path: '/privacy',
+ label: 'Privacy Policy',
+ },
+ {
+ path: '/faq',
+ label: 'FAQ',
+ },
+];
+
+const SNS_LIST: IconLinkItem[] = [
+ {
+ path: '#',
+ icon: ICON_MAIL,
+ label: 'Email',
+ },
+ {
+ path: '#',
+ icon: ICON_FACEBOOK,
+ label: 'Facebook',
+ },
+ {
+ path: '#',
+ icon: ICON_INSTAGRAM,
+ label: 'Instagram',
+ },
+];
export default function layout({ children }: PropsWithChildren) {
return (
-
-
- {children}
-
-
+
+
+ {/* header */}
+
+
+ {/* contents */}
+ {children}
+
+ {/* footer */}
+
+
+
);
}
diff --git a/src/app/(public)/page.tsx b/src/app/(public)/page.tsx
new file mode 100644
index 0000000..bbe3536
--- /dev/null
+++ b/src/app/(public)/page.tsx
@@ -0,0 +1,15 @@
+'use client';
+
+import Feature from '@/components/landing/Feature';
+import Hero from '@/components/landing/Hero';
+import Setting from '@/components/landing/Setting';
+
+export default function page() {
+ return (
+ <>
+
+
+
+ >
+ );
+}
diff --git a/src/app/(public)/privacy/page.tsx b/src/app/(public)/privacy/page.tsx
index 2602333..9a64fad 100644
--- a/src/app/(public)/privacy/page.tsx
+++ b/src/app/(public)/privacy/page.tsx
@@ -1,4 +1,4 @@
-import SubHeader from '../_components/SubHeader';
+import SubHeader from '@/components/landing/layout/SubHeader';
type PRIVACY_CONTENT = {
title: string;
diff --git a/src/app/page.tsx b/src/app/page.tsx
deleted file mode 100644
index ea905d0..0000000
--- a/src/app/page.tsx
+++ /dev/null
@@ -1,3 +0,0 @@
-export default function Home() {
- return 홈페이지입니다.;
-}
diff --git a/src/app/(public)/faq/_components/Accordion.tsx b/src/components/landing/Accordion.tsx
similarity index 100%
rename from src/app/(public)/faq/_components/Accordion.tsx
rename to src/components/landing/Accordion.tsx
diff --git a/src/app/(public)/landing/_components/Feature.tsx b/src/components/landing/Feature.tsx
similarity index 100%
rename from src/app/(public)/landing/_components/Feature.tsx
rename to src/components/landing/Feature.tsx
diff --git a/src/app/(public)/landing/_components/Hero.tsx b/src/components/landing/Hero.tsx
similarity index 94%
rename from src/app/(public)/landing/_components/Hero.tsx
rename to src/components/landing/Hero.tsx
index 23e5472..048bfbe 100644
--- a/src/app/(public)/landing/_components/Hero.tsx
+++ b/src/components/landing/Hero.tsx
@@ -4,6 +4,7 @@ import Image from 'next/image';
import { easeInOut, motion } from 'motion/react';
import LottieData from '@/assets/landings/hero.json';
import LogoFull from '@/assets/images/logo_full_white.svg';
+import Link from 'next/link';
const Lottie = dynamic(() => import('lottie-react'), { ssr: false });
@@ -22,6 +23,8 @@ const childVariants = {
animate: { y: 0, opacity: 1, transition: { ease: easeInOut } },
};
+const MotionLink = motion.create(Link);
+
export default function Hero() {
const [lottieLoaded, setLottieLoaded] = useState(false);
@@ -56,12 +59,13 @@ export default function Hero() {
새로운 일정 관리
Taskify
-
로그인하기
-
+
);
}
diff --git a/src/app/(public)/landing/_components/Setting.tsx b/src/components/landing/Setting.tsx
similarity index 100%
rename from src/app/(public)/landing/_components/Setting.tsx
rename to src/components/landing/Setting.tsx
diff --git a/src/app/(public)/landing/_components/SmoothScroll.tsx b/src/components/landing/SmoothScroll.tsx
similarity index 100%
rename from src/app/(public)/landing/_components/SmoothScroll.tsx
rename to src/components/landing/SmoothScroll.tsx
diff --git a/src/app/(public)/_components/Footer.tsx b/src/components/landing/layout/Footer.tsx
similarity index 62%
rename from src/app/(public)/_components/Footer.tsx
rename to src/components/landing/layout/Footer.tsx
index 8d89362..9e707a6 100644
--- a/src/app/(public)/_components/Footer.tsx
+++ b/src/components/landing/layout/Footer.tsx
@@ -1,48 +1,16 @@
-import ICON_MAIL from '@/assets/icons/email.svg';
-import ICON_FACEBOOK from '@/assets/icons/facebook.svg';
-import ICON_INSTAGRAM from '@/assets/icons/Instagram.svg';
import Image from 'next/image';
import Link from 'next/link';
import { RootInner } from './Inner';
import { BaseLinkItem, IconLinkItem } from './type';
-const FOOTER_NAV_LIST: BaseLinkItem[] = [
- {
- path: '/privacy',
- label: 'Privacy Policy',
- },
- {
- path: '/faq',
- label: 'FAQ',
- },
-];
-
-const SNS_LIST: IconLinkItem[] = [
- {
- path: '#',
- icon: ICON_MAIL,
- label: 'Email',
- },
- {
- path: '#',
- icon: ICON_FACEBOOK,
- label: 'Facebook',
- },
- {
- path: '#',
- icon: ICON_INSTAGRAM,
- label: 'Instagram',
- },
-];
-
-export default function Footer() {
+export default function Footer({ menus, sns }: { menus: BaseLinkItem[]; sns: IconLinkItem[] }) {
return (