diff --git a/packages/app/api/routes/auth.ts b/packages/app/api/routes/auth.ts index 3d581b3..d56f7b8 100644 --- a/packages/app/api/routes/auth.ts +++ b/packages/app/api/routes/auth.ts @@ -146,7 +146,7 @@ authRouter.get('/status', async (_req, res) => { const tenant = await db.tenant.findFirst({ select: { name: true, settings: true } }); const settings = tenant?.settings as TenantSettings | null; const allowRegistration = settings?.allowRegistration !== false; - res.json({ ok: true, data: { hasProject: !!tenant, projectName: tenant?.name ?? null, allowRegistration, logoUrl: settings?.logoUrl ?? null } }); + res.json({ ok: true, data: { hasProject: !!tenant, projectName: tenant?.name ?? null, allowRegistration, logoUrl: settings?.logoUrl ?? null, defaultHomePage: settings?.defaultHomePage ?? null } }); }); // ── POST /auth/login ───────────────────────────────────────────────────────── diff --git a/packages/app/web/app/main.tsx b/packages/app/web/app/main.tsx index 8d2df86..3f2615e 100644 --- a/packages/app/web/app/main.tsx +++ b/packages/app/web/app/main.tsx @@ -1,4 +1,4 @@ -import { StrictMode } from 'react'; +import { StrictMode, useEffect, useState } from 'react'; import { createRoot } from 'react-dom/client'; import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'; import './globals.css'; @@ -16,12 +16,25 @@ import Login from './pages/Login'; import Register from './pages/Register'; import Onboard from './pages/Onboard'; import { getTenant } from '@/lib/auth'; -import type { TenantSettings } from '@clawscale/shared'; +import { api } from '@/lib/api'; +import type { TenantSettings, ApiResponse } from '@clawscale/shared'; function HomeRedirect() { + // If we have tenant data in localStorage, use it directly const tenant = getTenant(); - const defaultHomePage = (tenant?.settings as TenantSettings | undefined)?.defaultHomePage ?? '/dashboard'; - return ; + const localDefault = (tenant?.settings as TenantSettings | undefined)?.defaultHomePage; + if (localDefault) return ; + if (tenant) return ; + + // No tenant in localStorage (unauthenticated) — fetch from public endpoint + const [target, setTarget] = useState(null); + useEffect(() => { + api.get>('/auth/status').then((res) => { + setTarget(res.ok && res.data.defaultHomePage ? res.data.defaultHomePage : '/dashboard'); + }).catch(() => setTarget('/dashboard')); + }, []); + if (!target) return null; + return ; } createRoot(document.getElementById('root')!).render( @@ -31,8 +44,8 @@ createRoot(document.getElementById('root')!).render( } /> } /> } /> + } /> }> - } /> } /> } /> } />