From d752c31baf6be30b18b2037d3dea708bcedbf672 Mon Sep 17 00:00:00 2001 From: Roland Tannous Date: Sun, 15 Feb 2026 06:29:52 +0000 Subject: [PATCH] feat: redirect first-time users to signup page instead of login --- studio/frontend/src/app/auth-guards.ts | 14 +++++++++++++- .../src/features/auth/components/auth-form.tsx | 13 ++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/studio/frontend/src/app/auth-guards.ts b/studio/frontend/src/app/auth-guards.ts index 83e4e39a32..6aaa6694ef 100644 --- a/studio/frontend/src/app/auth-guards.ts +++ b/studio/frontend/src/app/auth-guards.ts @@ -12,9 +12,21 @@ async function hasActiveSession(): Promise { return refreshSession(); } +async function checkAuthInitialized(): Promise { + try { + const res = await fetch("/api/auth/status"); + if (!res.ok) return true; // fallback to login on error + const data = (await res.json()) as { initialized: boolean }; + return data.initialized; + } catch { + return true; // fallback to login on error + } +} + export async function requireAuth(): Promise { if (await hasActiveSession()) return; - throw redirect({ to: "/login" }); + const initialized = await checkAuthInitialized(); + throw redirect({ to: initialized ? "/login" : "/signup" }); } export async function requireGuest(): Promise { diff --git a/studio/frontend/src/features/auth/components/auth-form.tsx b/studio/frontend/src/features/auth/components/auth-form.tsx index f17d2af13b..5ed529a9e8 100644 --- a/studio/frontend/src/features/auth/components/auth-form.tsx +++ b/studio/frontend/src/features/auth/components/auth-form.tsx @@ -63,7 +63,18 @@ export function AuthForm({ mode }: AuthFormProps): ReactElement | null { const response = await fetch("/api/auth/status"); if (!response.ok) throw new Error("Failed to load auth status."); const result = (await response.json()) as AuthStatusResponse; - if (!canceled) setInitialized(result.initialized); + if (!canceled) { + setInitialized(result.initialized); + // Auto-redirect to the correct page based on init state + if (mode === "login" && result.initialized === false) { + navigate({ to: "/signup" }); + return; + } + if (mode === "signup" && result.initialized === true) { + navigate({ to: "/login" }); + return; + } + } } catch (err: unknown) { if (!canceled) { setError(err instanceof Error ? err.message : "Failed to load.");