diff --git a/public/images/landing-1.png b/public/images/landing-1.png new file mode 100644 index 00000000..826acfa4 Binary files /dev/null and b/public/images/landing-1.png differ diff --git a/public/images/landing-2.png b/public/images/landing-2.png new file mode 100644 index 00000000..d28bb6ec Binary files /dev/null and b/public/images/landing-2.png differ diff --git a/public/images/landing-3.png b/public/images/landing-3.png new file mode 100644 index 00000000..c384808e Binary files /dev/null and b/public/images/landing-3.png differ diff --git a/public/images/landing-4.png b/public/images/landing-4.png new file mode 100644 index 00000000..b8331c0a Binary files /dev/null and b/public/images/landing-4.png differ diff --git a/public/images/landing-5.png b/public/images/landing-5.png new file mode 100644 index 00000000..d28bb6ec Binary files /dev/null and b/public/images/landing-5.png differ diff --git a/public/images/landing-6.png b/public/images/landing-6.png new file mode 100644 index 00000000..c384808e Binary files /dev/null and b/public/images/landing-6.png differ diff --git a/public/images/landing-7.png b/public/images/landing-7.png new file mode 100644 index 00000000..b8331c0a Binary files /dev/null and b/public/images/landing-7.png differ diff --git a/public/images/landing-add.png b/public/images/landing-add.png new file mode 100644 index 00000000..29dc5c3f Binary files /dev/null and b/public/images/landing-add.png differ diff --git a/public/images/landing-ai.png b/public/images/landing-ai.png new file mode 100644 index 00000000..efc87840 Binary files /dev/null and b/public/images/landing-ai.png differ diff --git a/public/images/landing-chatbot.png b/public/images/landing-chatbot.png new file mode 100644 index 00000000..15d59b94 Binary files /dev/null and b/public/images/landing-chatbot.png differ diff --git a/public/images/landing-extension.png b/public/images/landing-extension.png new file mode 100644 index 00000000..d12674a7 Binary files /dev/null and b/public/images/landing-extension.png differ diff --git a/public/images/landing_icon_bookmark.png b/public/images/landing_icon_bookmark.png new file mode 100644 index 00000000..30bd52e7 Binary files /dev/null and b/public/images/landing_icon_bookmark.png differ diff --git a/public/images/landing_icon_questionmark.png b/public/images/landing_icon_questionmark.png new file mode 100644 index 00000000..509a1750 Binary files /dev/null and b/public/images/landing_icon_questionmark.png differ diff --git a/public/images/landing_icon_searchoff.png b/public/images/landing_icon_searchoff.png new file mode 100644 index 00000000..d8fcf72a Binary files /dev/null and b/public/images/landing_icon_searchoff.png differ diff --git a/src/app/LandingPage.tsx b/src/app/LandingPage.tsx deleted file mode 100644 index ae3361ca..00000000 --- a/src/app/LandingPage.tsx +++ /dev/null @@ -1,76 +0,0 @@ -'use client'; - -import ICLandingIcLogo from '@/components/Icons/svgs/ic_landing_ic_logo.svg'; -import ICLandingTextLogo from '@/components/Icons/svgs/ic_landing_text_logo.svg'; -import Image from 'next/image'; - -const ERROR_MESSAGES: Record = { - auth_failed: '로그인에 실패했습니다.', - server_error: '서버 오류가 발생했습니다.', - unauthorized: '로그인이 필요합니다.', - session_expired: '세션이 만료되었습니다. 다시 로그인해주세요.', -}; - -type Props = { - error?: string; -}; - -export default function Landing({ error }: Props) { - const handleGoogleLogin = () => { - const baseUrl = process.env.NEXT_PUBLIC_BASE_API_URL; - - if (!baseUrl) { - console.error('NEXT_PUBLIC_BASE_API_URL is not configured'); - return; - } - - window.location.href = `${baseUrl}/oauth2/authorization/google`; - }; - - return ( -
-
- 배경 이미지 -
- -
-
-
- -
-
- -
-
- -

로그인

- -

서비스 이용을 위해 구글 계정으로 로그인해 주세요.

- -
- - {error && ( -
- {ERROR_MESSAGES[error] ?? '오류가 발생했습니다.'} -
- 잠시 후 다시 시도해주세요. -
- )} - - -
-
- ); -} diff --git a/src/app/layout-client.tsx b/src/app/layout-client.tsx index f37f9ff2..10c383a6 100644 --- a/src/app/layout-client.tsx +++ b/src/app/layout-client.tsx @@ -14,7 +14,7 @@ export default function LayoutClient({ children }: { children: React.ReactNode }
{showSideNav && } -
{children}
+
{children}
); diff --git a/src/app/page.tsx b/src/app/page.tsx index bd8a9c5a..7d50a195 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,7 +1,8 @@ +import FeatureSection from '@/components/layout/Landing/FeatureSection'; +import HeroSection from '@/components/layout/Landing/HeroSection'; +import LandingHeader from '@/components/layout/Landing/LandingHeader'; import type { Metadata } from 'next'; -import Landing from './LandingPage'; - export const metadata: Metadata = { title: 'Linkiving - 북마크들을 더 똑똑하게 관리해요', description: @@ -65,12 +66,12 @@ export const metadata: Metadata = { }, }; -export default async function Page({ - searchParams, -}: { - searchParams: Promise<{ error?: string }>; -}) { - const params = await searchParams; - - return ; +export default function Page() { + return ( +
+ + + +
+ ); } diff --git a/src/components/Icons/icons.ts b/src/components/Icons/icons.ts index bafadfc1..24aaff76 100644 --- a/src/components/Icons/icons.ts +++ b/src/components/Icons/icons.ts @@ -94,6 +94,7 @@ export const IconSizes = { md: 18, lg: 20, xl: 24, + '2xl': 44, } as const; export type IconSizeTypes = keyof typeof IconSizes; diff --git a/src/components/basics/Footer/Footer.tsx b/src/components/basics/Footer/Footer.tsx index 11c2271a..49c4fec8 100644 --- a/src/components/basics/Footer/Footer.tsx +++ b/src/components/basics/Footer/Footer.tsx @@ -1,5 +1,3 @@ -import React from 'react'; - const Footer = () => { return (