diff --git a/app/frontend/src/app/App.tsx b/app/frontend/src/app/App.tsx
index 0812169..417ff9f 100644
--- a/app/frontend/src/app/App.tsx
+++ b/app/frontend/src/app/App.tsx
@@ -1,40 +1,50 @@
+import { lazy, Suspense, type ReactNode } from 'react';
import { Link, Navigate, Outlet, Route, Routes, useLocation } from 'react-router-dom';
import { useQuery } from '@tanstack/react-query';
import { Compass, ShieldCheck } from 'lucide-react';
import { PlatformShell } from './layout/PlatformShell';
-import { ProjectsPage } from '@/features/projects/pages/ProjectsPage';
-import { ProjectWorkspacePage } from '@/features/workspace/pages/ProjectWorkspacePage';
-import { ServiceDetailPage } from '@/features/service/pages/ServiceDetailPage';
-import { ServiceMetricsDashboard } from '@/features/service/pages/ServiceMetricsDashboard';
-import { BuildsPage } from '@/features/builds/pages/BuildsPage';
-import { TemplatesPage } from '@/features/templates/pages/TemplatesPage';
-import { AuditLogsPage } from '@/features/audit/pages/AuditLogsPage';
-import { WebhooksPage } from '@/features/webhooks/pages/WebhooksPage';
-import { OperationsPage } from '@/features/operations/pages/OperationsPage';
-import { ActivityPage } from '@/features/activity/pages/ActivityPage';
-import { AdminPage } from '@/features/admin/pages/AdminPage';
-import { LandingPage } from '@/features/landing/LandingPage';
-import { DashboardPage } from '@/features/dashboard/pages/DashboardPage';
import { useBranding } from '@/lib/use-branding';
-import {
- DocsPage,
- PeoplePage,
- SettingsPage,
- UsagePage,
- DatabasesPage,
- HighAvailabilityPage,
- SecurityPage,
- ComponentShowcase,
- GitHubAppCallbackPage,
-} from '@/features/secondary/pages';
-import { NodeDetailPage } from '@/features/nodes/NodeDetailPage';
-import { AcceptInvitePage, SignInPage, SignUpPage } from '@/features/auth/pages';
-import { SetupWizardPage } from '@/features/setup/SetupWizardPage';
import { useAuthSession } from '@/lib/use-auth-session';
import { useDemoMode } from '@/lib/demo-mode';
import { getCurrentUserProfile } from '@/lib/api-client';
import { ErrorBoundary, LoadingState } from '@/shared/components';
+const LandingPage = lazy(() => import('@/features/landing/LandingPage').then((m) => ({ default: m.LandingPage })));
+const SignInPage = lazy(() => import('@/features/auth/pages').then((m) => ({ default: m.SignInPage })));
+const SignUpPage = lazy(() => import('@/features/auth/pages').then((m) => ({ default: m.SignUpPage })));
+const AcceptInvitePage = lazy(() => import('@/features/auth/pages').then((m) => ({ default: m.AcceptInvitePage })));
+const SetupWizardPage = lazy(() => import('@/features/setup/SetupWizardPage').then((m) => ({ default: m.SetupWizardPage })));
+const ProjectWorkspacePage = lazy(() => import('@/features/workspace/pages/ProjectWorkspacePage').then((m) => ({ default: m.ProjectWorkspacePage })));
+const ServiceDetailPage = lazy(() => import('@/features/service/pages/ServiceDetailPage').then((m) => ({ default: m.ServiceDetailPage })));
+const ServiceMetricsDashboard = lazy(() => import('@/features/service/pages/ServiceMetricsDashboard').then((m) => ({ default: m.ServiceMetricsDashboard })));
+const DashboardPage = lazy(() => import('@/features/dashboard/pages/DashboardPage').then((m) => ({ default: m.DashboardPage })));
+const ProjectsPage = lazy(() => import('@/features/projects/pages/ProjectsPage').then((m) => ({ default: m.ProjectsPage })));
+const TemplatesPage = lazy(() => import('@/features/templates/pages/TemplatesPage').then((m) => ({ default: m.TemplatesPage })));
+const DatabasesPage = lazy(() => import('@/features/secondary/pages').then((m) => ({ default: m.DatabasesPage })));
+const HighAvailabilityPage = lazy(() => import('@/features/secondary/pages').then((m) => ({ default: m.HighAvailabilityPage })));
+const OperationsPage = lazy(() => import('@/features/operations/pages/OperationsPage').then((m) => ({ default: m.OperationsPage })));
+const ActivityPage = lazy(() => import('@/features/activity/pages/ActivityPage').then((m) => ({ default: m.ActivityPage })));
+const SecurityPage = lazy(() => import('@/features/secondary/pages').then((m) => ({ default: m.SecurityPage })));
+const UsagePage = lazy(() => import('@/features/secondary/pages').then((m) => ({ default: m.UsagePage })));
+const DocsPage = lazy(() => import('@/features/secondary/pages').then((m) => ({ default: m.DocsPage })));
+const BuildsPage = lazy(() => import('@/features/builds/pages/BuildsPage').then((m) => ({ default: m.BuildsPage })));
+const PeoplePage = lazy(() => import('@/features/secondary/pages').then((m) => ({ default: m.PeoplePage })));
+const SettingsPage = lazy(() => import('@/features/secondary/pages').then((m) => ({ default: m.SettingsPage })));
+const GitHubAppCallbackPage = lazy(() => import('@/features/secondary/pages').then((m) => ({ default: m.GitHubAppCallbackPage })));
+const AuditLogsPage = lazy(() => import('@/features/audit/pages/AuditLogsPage').then((m) => ({ default: m.AuditLogsPage })));
+const WebhooksPage = lazy(() => import('@/features/webhooks/pages/WebhooksPage').then((m) => ({ default: m.WebhooksPage })));
+const ComponentShowcase = lazy(() => import('@/features/secondary/pages').then((m) => ({ default: m.ComponentShowcase })));
+const AdminPage = lazy(() => import('@/features/admin/pages/AdminPage').then((m) => ({ default: m.AdminPage })));
+const NodeDetailPage = lazy(() => import('@/features/nodes/NodeDetailPage').then((m) => ({ default: m.NodeDetailPage })));
+
+function Page({ children }: { children: ReactNode }) {
+ return (
+ }>
+ {children}
+
+ );
+}
+
function AuthRequired() {
const location = useLocation();
const isDemoMode = useDemoMode();
@@ -136,44 +146,44 @@ export default function App() {
return (
- } />
- } />
- } />
- } />
- } />
+ } />
+ } />
+ } />
+ } />
+ } />
{/* Public browsing — approved projects, templates, docs. */}
{/* Project workspace renders outside the shell — fullscreen canvas, no nav chrome */}
- } />
- } />
+ } />
+ } />
}>
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
{/* Authenticated areas */}
}>
- } />
- } />
- } />
- } />
- } />
- } />
- } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
{/* Platform owner only */}
}>
- } />
- } />
+ } />
+ } />
} />
@@ -181,7 +191,7 @@ export default function App() {
{/* Full-bleed design demo — renders its own chrome, no app shell */}
}>
- } />
+ } />