diff --git a/src/app/FamilyProvider.tsx b/src/app/FamilyProvider.tsx index e849285..9f33d54 100644 --- a/src/app/FamilyProvider.tsx +++ b/src/app/FamilyProvider.tsx @@ -52,9 +52,8 @@ export function FamilyProvider({ children: providerChildren }: { children: React const sessionRes = await fetch("/api/auth/signin"); const sessionData = await sessionRes.json(); - // Not authenticated - redirect to login + // Not authenticated - stay on current page, don't redirect if (!sessionData.authenticated) { - router.push("/login"); setLoading(false); return; } @@ -66,8 +65,9 @@ export function FamilyProvider({ children: providerChildren }: { children: React return; } - // Fetch children for this family - const res = await fetch(`/api/children?familyId=${sessionData.familyId}`); + // Authenticated with family - check for children + const familyId = sessionData.familyId; + const res = await fetch(`/api/children?familyId=${familyId}`); const data = await res.json(); if (data.children?.length > 0) { @@ -84,9 +84,11 @@ export function FamilyProvider({ children: providerChildren }: { children: React } else { // No children - go to onboarding router.push("/onboarding"); + setLoading(false); + return; } - setFamilyId(sessionData.familyId); + setFamilyId(familyId); setTier(sessionData.tier || "free"); setMemberCount(2); } catch (err) { diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx index a6d4b8a..67edf2a 100644 --- a/src/app/login/page.tsx +++ b/src/app/login/page.tsx @@ -7,12 +7,16 @@ export default function LoginPage() { const router = useRouter(); useEffect(() => { - // Check if already logged in via session cookie async function checkSession() { const res = await fetch("/api/auth/signin"); const data = await res.json(); + if (data.authenticated) { - router.push("/"); + if (data.familyId) { + router.push("/"); + } else { + router.push("/onboarding"); + } } } checkSession(); @@ -34,7 +38,11 @@ export default function LoginPage() { const data = await res.json(); if (data.success) { - router.push("/"); + if (data.familyId) { + router.push("/"); + } else { + router.push("/onboarding"); + } } else { alert(data.error || "Sign in failed"); } diff --git a/src/app/onboarding/page.tsx b/src/app/onboarding/page.tsx index 8d2d912..5d1e1bf 100644 --- a/src/app/onboarding/page.tsx +++ b/src/app/onboarding/page.tsx @@ -1,12 +1,13 @@ "use client"; -import { useState } from "react"; +import { useState, useEffect } from "react"; import { useRouter } from "next/navigation"; export default function OnboardingPage() { const router = useRouter(); const [step, setStep] = useState(1); const [loading, setLoading] = useState(false); + const [checkingAuth, setCheckingAuth] = useState(true); const [form, setForm] = useState({ familyName: "", memberName: "", @@ -15,6 +16,20 @@ export default function OnboardingPage() { sex: "" as "male" | "female" | "other", }); + useEffect(() => { + async function checkAuth() { + const res = await fetch("/api/auth/signin"); + const data = await res.json(); + if (!data.authenticated) { + router.push("/login"); + } else if (data.familyId) { + router.push("/"); + } + setCheckingAuth(false); + } + checkAuth(); + }, [router]); + const handleSubmit = async () => { setLoading(true); try { @@ -32,6 +47,14 @@ export default function OnboardingPage() { setLoading(false); }; + if (checkingAuth) { + return ( +