diff --git a/app/chat/layout.tsx b/app/chat/layout.tsx new file mode 100644 index 0000000..ee18e92 --- /dev/null +++ b/app/chat/layout.tsx @@ -0,0 +1,21 @@ +import { redirect } from 'next/navigation'; +import { cookies } from 'next/headers'; + +/** + * Chat route layout - ensures user is authenticated before showing chat + */ +export default async function ChatLayout({ + children, +}: { + children: React.ReactNode; +}) { + const cookieStore = await cookies(); + const authCookie = cookieStore.get('ponderants-auth'); + + // Redirect to login if not authenticated + if (!authCookie) { + redirect('/login'); + } + + return <>{children}; +} diff --git a/app/chat/page.tsx b/app/chat/page.tsx index d87580e..3315da4 100644 --- a/app/chat/page.tsx +++ b/app/chat/page.tsx @@ -12,12 +12,10 @@ import { Group, Text, } from '@mantine/core'; -import { useRouter } from 'next/navigation'; -import { useEffect, useRef, useState } from 'react'; +import { useRef, useState, useEffect } from 'react'; import { MicrophoneRecorder } from '@/components/MicrophoneRecorder'; export default function ChatPage() { - const router = useRouter(); const viewport = useRef(null); const [input, setInput] = useState(''); diff --git a/app/page.tsx b/app/page.tsx index e5b532d..3a31472 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,14 +1,16 @@ -import { Stack, Title, Paper, Button, Center } from '@mantine/core'; +import { redirect } from 'next/navigation'; +import { cookies } from 'next/headers'; -export default function Home() { - return ( -
- - - Ponderants - - - -
- ); +/** + * Root page - redirects to /chat if authenticated, /login if not + */ +export default async function Home() { + const cookieStore = await cookies(); + const authCookie = cookieStore.get('ponderants-auth'); + + if (authCookie) { + redirect('/chat'); + } else { + redirect('/login'); + } }