Render the landing page without a Base44 session
LandingPage is pure marketing markup — no entity reads, no useAuth — but it sat below both gates in AuthenticatedApp, so anonymous visitors were held on the spinner for a bootstrap round-trip and then redirected to Google before they could read anything about the product. Check the path against a PUBLIC_ROUTES set first and return early. Its CTAs still point at /Dashboard, which stays gated, so signing in is one click away. Drops the old /LandingPage block that sat below the auth gate; the early return makes it unreachable, as the previous ordering already did. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
32
src/App.jsx
32
src/App.jsx
@@ -50,10 +50,34 @@ const LayoutWrapper = ({ children, currentPageName }) => Layout ?
|
||||
<Layout currentPageName={currentPageName}>{children}</Layout>
|
||||
: <>{children}</>;
|
||||
|
||||
// Routes that render for anyone, signed in or not. LandingPage is pure marketing
|
||||
// markup — it reads no entities and never touches useAuth — so the only thing the
|
||||
// auth gate ever did for it was bounce visitors to a Google login before they
|
||||
// could read what the product is. Its CTAs point at /Dashboard, which is still
|
||||
// gated, so signing in stays one click away.
|
||||
const PUBLIC_ROUTES = new Set(['/LandingPage']);
|
||||
|
||||
const isPublicRoute = (pathname) => {
|
||||
// Tolerate a trailing slash so /LandingPage/ isn't quietly sent to login.
|
||||
const normalized = pathname.length > 1 ? pathname.replace(/\/+$/, '') : pathname;
|
||||
return PUBLIC_ROUTES.has(normalized);
|
||||
};
|
||||
|
||||
const AuthenticatedApp = () => {
|
||||
const { isLoadingAuth, isLoadingPublicSettings, authError, isAuthenticated, navigateToLogin } = useAuth();
|
||||
const location = useLocation();
|
||||
|
||||
// Ahead of both gates below. The spinner would stall this page on a network
|
||||
// round-trip it has no use for, and the auth gate would redirect away from it —
|
||||
// either one defeats the point of a public page.
|
||||
if (isPublicRoute(location.pathname)) {
|
||||
return (
|
||||
<Routes>
|
||||
<Route path="/LandingPage" element={<LandingPage />} />
|
||||
</Routes>
|
||||
);
|
||||
}
|
||||
|
||||
// Show loading spinner while checking app public settings or auth
|
||||
if (isLoadingPublicSettings || isLoadingAuth) {
|
||||
return (
|
||||
@@ -92,14 +116,6 @@ const AuthenticatedApp = () => {
|
||||
|
||||
// Render the main app
|
||||
|
||||
if (location.pathname === '/LandingPage') {
|
||||
return (
|
||||
<Routes>
|
||||
<Route path="/LandingPage" element={<LandingPage />} />
|
||||
</Routes>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<LayoutWrapper currentPageName={mainPageKey}>
|
||||
<Routes>
|
||||
|
||||
Reference in New Issue
Block a user