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