diff --git a/app/(protected)/(channelLinked)/channel/page.ts b/app/(protected)/(channelLinked)/channel/page.ts deleted file mode 100644 index 6587a008..00000000 --- a/app/(protected)/(channelLinked)/channel/page.ts +++ /dev/null @@ -1 +0,0 @@ -export { ChannelPage as default } from '@/pages/channel' diff --git a/app/(protected)/(channelLinked)/channel/page.tsx b/app/(protected)/(channelLinked)/channel/page.tsx new file mode 100644 index 00000000..ccf4445d --- /dev/null +++ b/app/(protected)/(channelLinked)/channel/page.tsx @@ -0,0 +1,26 @@ +import type { Metadata } from 'next' +import { ChannelPage } from '@/pages/channel' + +const title = '내 채널 분석 대시보드 | 인플레이스' +const description = + '구독자 추이, 참여율, 시청자 분포를 한눈에 분석하고 카테고리 평균 대비 내 채널의 위치를 데이터로 확인하세요.' + +export const metadata: Metadata = { + title, + description, + openGraph: { + title, + description, + images: [{ url: '/og-channel-analyze.png' }], + }, + twitter: { + card: 'summary_large_image', + title, + description, + images: ['/og-channel-analyze.png'], + }, +} + +export default function Page() { + return +} diff --git a/app/(protected)/(channelLinked)/videos/[videoId]/page.ts b/app/(protected)/(channelLinked)/videos/[videoId]/page.ts deleted file mode 100644 index ff52fe45..00000000 --- a/app/(protected)/(channelLinked)/videos/[videoId]/page.ts +++ /dev/null @@ -1 +0,0 @@ -export { VideoDetailPage as default } from '@/pages/videoDetail' diff --git a/app/(protected)/(channelLinked)/videos/[videoId]/page.tsx b/app/(protected)/(channelLinked)/videos/[videoId]/page.tsx new file mode 100644 index 00000000..e683b173 --- /dev/null +++ b/app/(protected)/(channelLinked)/videos/[videoId]/page.tsx @@ -0,0 +1,12 @@ +import type { Metadata } from 'next' +import { VideoDetailPage } from '@/pages/videoDetail' + +export const metadata: Metadata = { + title: '영상 분석 | 인플레이스', + openGraph: { title: '영상 분석 | 인플레이스' }, + twitter: { title: '영상 분석 | 인플레이스' }, +} + +export default function Page() { + return +} diff --git a/app/(protected)/(channelLinked)/videos/layout.tsx b/app/(protected)/(channelLinked)/videos/layout.tsx new file mode 100644 index 00000000..f6a195d7 --- /dev/null +++ b/app/(protected)/(channelLinked)/videos/layout.tsx @@ -0,0 +1,25 @@ +import type { Metadata } from 'next' + +const description = + '내 유튜브 영상별 조회수, 참여율, VPH, Outlier 지수를 분석해 성과 높은 콘텐츠 패턴을 발견하세요.' + +export const metadata: Metadata = { + description, + openGraph: { + description, + images: [{ url: '/og-channel-score.png' }], + }, + twitter: { + card: 'summary_large_image', + description, + images: ['/og-channel-score.png'], + }, +} + +export default function VideosLayout({ + children, +}: { + children: React.ReactNode +}) { + return children +} diff --git a/app/(protected)/(channelLinked)/videos/page.ts b/app/(protected)/(channelLinked)/videos/page.ts deleted file mode 100644 index cf5c1795..00000000 --- a/app/(protected)/(channelLinked)/videos/page.ts +++ /dev/null @@ -1 +0,0 @@ -export { VideosPage as default } from '@/pages/videos' diff --git a/app/(protected)/(channelLinked)/videos/page.tsx b/app/(protected)/(channelLinked)/videos/page.tsx new file mode 100644 index 00000000..e60fa720 --- /dev/null +++ b/app/(protected)/(channelLinked)/videos/page.tsx @@ -0,0 +1,12 @@ +import type { Metadata } from 'next' +import { VideosPage } from '@/pages/videos' + +export const metadata: Metadata = { + title: '영상 분석 대시보드 | 인플레이스', + openGraph: { title: '영상 분석 대시보드 | 인플레이스' }, + twitter: { title: '영상 분석 대시보드 | 인플레이스' }, +} + +export default function Page() { + return +} diff --git a/app/(protected)/main/page.ts b/app/(protected)/main/page.ts deleted file mode 100644 index de9b0415..00000000 --- a/app/(protected)/main/page.ts +++ /dev/null @@ -1 +0,0 @@ -export { ChannelProfilePage as default } from '@/pages/main' diff --git a/app/(protected)/main/page.tsx b/app/(protected)/main/page.tsx new file mode 100644 index 00000000..9d8d9e14 --- /dev/null +++ b/app/(protected)/main/page.tsx @@ -0,0 +1,26 @@ +import type { Metadata } from 'next' +import { ChannelProfilePage } from '@/pages/main' + +const title = '쉽고 빠르게 인플루언서를 찾고 분석하기 | 인플레이스' +const description = + '데이터 기반으로 임팩트 있는 유튜브 인플루언서를 찾고, 내 채널을 성장시키세요. 브랜드와 크리에이터를 연결하는 유튜브 마케팅 플랫폼, 인플레이스.' + +export const metadata: Metadata = { + title, + description, + openGraph: { + title, + description, + images: [{ url: '/og-main.png' }], + }, + twitter: { + card: 'summary_large_image', + title, + description, + images: ['/og-main.png'], + }, +} + +export default function Page() { + return +} diff --git a/app/(public)/page.ts b/app/(public)/page.ts deleted file mode 100644 index 91ad8d32..00000000 --- a/app/(public)/page.ts +++ /dev/null @@ -1 +0,0 @@ -export { HomePage as default } from '@/pages/home' diff --git a/app/(public)/page.tsx b/app/(public)/page.tsx new file mode 100644 index 00000000..00d42f1f --- /dev/null +++ b/app/(public)/page.tsx @@ -0,0 +1,26 @@ +import type { Metadata } from 'next' +import { HomePage } from '@/pages/home' + +const title = '쉽고 빠르게 인플루언서를 찾고 분석하기 | 인플레이스' +const description = + '데이터 기반으로 임팩트 있는 유튜브 인플루언서를 찾고, 내 채널을 성장시키세요. 브랜드와 크리에이터를 연결하는 유튜브 마케팅 플랫폼, 인플레이스.' + +export const metadata: Metadata = { + title, + description, + openGraph: { + title, + description, + images: [{ url: '/og-main.png' }], + }, + twitter: { + card: 'summary_large_image', + title, + description, + images: ['/og-main.png'], + }, +} + +export default function Page() { + return +} diff --git a/public/og-channel-analyze.png b/public/og-channel-analyze.png new file mode 100644 index 00000000..635186b8 Binary files /dev/null and b/public/og-channel-analyze.png differ diff --git a/public/og-channel-score.png b/public/og-channel-score.png new file mode 100644 index 00000000..39fcd44e Binary files /dev/null and b/public/og-channel-score.png differ diff --git a/public/og-competitor.png b/public/og-competitor.png new file mode 100644 index 00000000..40285b00 Binary files /dev/null and b/public/og-competitor.png differ diff --git a/public/og-influencer.png b/public/og-influencer.png new file mode 100644 index 00000000..6135539c Binary files /dev/null and b/public/og-influencer.png differ diff --git a/public/og-main.png b/public/og-main.png new file mode 100644 index 00000000..8e2cc75a Binary files /dev/null and b/public/og-main.png differ diff --git a/public/og-me.png b/public/og-me.png new file mode 100644 index 00000000..92213ff6 Binary files /dev/null and b/public/og-me.png differ diff --git a/src/entities/home/featureCard/FeatureCard.tsx b/src/entities/home/featureCard/FeatureCard.tsx index c00b4fa3..2985b575 100644 --- a/src/entities/home/featureCard/FeatureCard.tsx +++ b/src/entities/home/featureCard/FeatureCard.tsx @@ -1,3 +1,5 @@ +'use client' + import Image from 'next/image' import { useRouter } from 'next/navigation' import { Button } from '@/shared/ui/button' diff --git a/src/pages/home/ui/HomePage.tsx b/src/pages/home/ui/HomePage.tsx index 8b52279d..340f3c16 100644 --- a/src/pages/home/ui/HomePage.tsx +++ b/src/pages/home/ui/HomePage.tsx @@ -25,7 +25,7 @@ export default function HomePage() { * 로딩 중 스클롤을 인식해 화면 최하단으로 랜더링 되는 것을 방지함. */ useEffect(() => { - if (isInitializing) return + if (isInitializing || isLoggedIn) return document.documentElement.classList.add('snap-landing') const footer = document.querySelector('footer') footer?.classList.add('snap-start') @@ -33,7 +33,7 @@ export default function HomePage() { document.documentElement.classList.remove('snap-landing') footer?.classList.remove('snap-start') } - }, [isInitializing]) + }, [isInitializing, isLoggedIn]) if (isInitializing || isLoggedIn) return null diff --git a/src/pages/main/ui/ChannelProfilePage.tsx b/src/pages/main/ui/ChannelProfilePage.tsx index 324ad61e..1df52b4b 100644 --- a/src/pages/main/ui/ChannelProfilePage.tsx +++ b/src/pages/main/ui/ChannelProfilePage.tsx @@ -7,7 +7,9 @@ import { useAuth } from '@/features/auth' export function ChannelProfilePage() { const { user } = useAuth() - const channelId = user?.userChannelDetails?.youtubeChannelId as string + const channelId = user?.userChannelDetails?.youtubeChannelId + + if (!channelId) return null return (
diff --git a/public/mock-image.png b/src/shared/assets/mock/mock-image.png similarity index 100% rename from public/mock-image.png rename to src/shared/assets/mock/mock-image.png