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(
} />
} />
} />
+ } />
}>
- } />
} />
} />
} />