@@ -4,6 +4,7 @@ import { ProtectedRoute } from './components/auth/ProtectedRoute';
44import { RequireOrgAdmin } from './components/auth/RequireOrgAdmin' ;
55import { SettingsLayout } from './components/layouts/SettingsLayout' ;
66import { AppLayout } from './components/layouts/AppLayout' ;
7+ import { SkipLink } from './components/ui/skip-link' ;
78
89// ── Public pages ──────────────────────────────────────────────
910const HomePage = lazy ( ( ) => import ( './pages/home' ) ) ;
@@ -44,55 +45,60 @@ export function App() {
4445 ) ;
4546
4647 return (
47- < Suspense fallback = { fallback } >
48- < Routes >
49- { /* Public routes */ }
50- < Route path = "/" element = { < HomePage /> } />
51- < Route path = "/sign-in" element = { < SignInPage /> } />
52- < Route path = "/sign-up" element = { < SignUpPage /> } />
53- < Route path = "/forgot-password" element = { < ForgotPasswordPage /> } />
54- < Route path = "/reset-password" element = { < ResetPasswordPage /> } />
55- < Route path = "/verify-2fa" element = { < Verify2FAPage /> } />
48+ < >
49+ < SkipLink />
50+ < main id = "main-content" >
51+ < Suspense fallback = { fallback } >
52+ < Routes >
53+ { /* Public routes */ }
54+ < Route path = "/" element = { < HomePage /> } />
55+ < Route path = "/sign-in" element = { < SignInPage /> } />
56+ < Route path = "/sign-up" element = { < SignUpPage /> } />
57+ < Route path = "/forgot-password" element = { < ForgotPasswordPage /> } />
58+ < Route path = "/reset-password" element = { < ResetPasswordPage /> } />
59+ < Route path = "/verify-2fa" element = { < Verify2FAPage /> } />
5660
57- { /* Protected routes */ }
58- < Route element = { < ProtectedRoute /> } >
61+ { /* Protected routes */ }
62+ < Route element = { < ProtectedRoute /> } >
5963
60- { /* ── Create Org (accessible to any authenticated user) ── */ }
61- < Route path = "/settings/organization/create" element = { < CreateOrganizationPage /> } />
64+ { /* ── Create Org (accessible to any authenticated user) ── */ }
65+ < Route path = "/settings/organization/create" element = { < CreateOrganizationPage /> } />
6266
63- { /* ── Admin Console (/settings/*) — owner / admin only ── */ }
64- < Route element = { < RequireOrgAdmin /> } >
65- < Route element = { < SettingsLayout /> } >
66- < Route path = "/settings" element = { < SettingsOverviewPage /> } />
67- < Route path = "/settings/organization" element = { < OrganizationSettingsPage /> } />
68- < Route path = "/settings/members" element = { < MembersPage /> } />
69- < Route path = "/settings/teams" element = { < TeamsPage /> } />
70- < Route path = "/settings/invitations" element = { < InvitationsPage /> } />
71- < Route path = "/settings/permissions" element = { < PermissionsPage /> } />
72- < Route path = "/settings/sso" element = { < SSOSettingsPage /> } />
73- < Route path = "/settings/audit" element = { < AuditPage /> } />
74- < Route path = "/settings/packages" element = { < PackagesPage /> } />
75- < Route path = "/settings/jobs" element = { < JobsPage /> } />
76- < Route path = "/settings/plugins" element = { < PluginsPage /> } />
77- < Route path = "/settings/metrics" element = { < MetricsPage /> } />
78- < Route path = "/settings/notifications" element = { < NotificationsPage /> } />
79- < Route path = "/settings/account" element = { < AccountSettingsPage /> } />
80- < Route path = "/settings/security" element = { < SecuritySettingsPage /> } />
81- </ Route >
82- </ Route >
67+ { /* ── Admin Console (/settings/*) — owner / admin only ── */ }
68+ < Route element = { < RequireOrgAdmin /> } >
69+ < Route element = { < SettingsLayout /> } >
70+ < Route path = "/settings" element = { < SettingsOverviewPage /> } />
71+ < Route path = "/settings/organization" element = { < OrganizationSettingsPage /> } />
72+ < Route path = "/settings/members" element = { < MembersPage /> } />
73+ < Route path = "/settings/teams" element = { < TeamsPage /> } />
74+ < Route path = "/settings/invitations" element = { < InvitationsPage /> } />
75+ < Route path = "/settings/permissions" element = { < PermissionsPage /> } />
76+ < Route path = "/settings/sso" element = { < SSOSettingsPage /> } />
77+ < Route path = "/settings/audit" element = { < AuditPage /> } />
78+ < Route path = "/settings/packages" element = { < PackagesPage /> } />
79+ < Route path = "/settings/jobs" element = { < JobsPage /> } />
80+ < Route path = "/settings/plugins" element = { < PluginsPage /> } />
81+ < Route path = "/settings/metrics" element = { < MetricsPage /> } />
82+ < Route path = "/settings/notifications" element = { < NotificationsPage /> } />
83+ < Route path = "/settings/account" element = { < AccountSettingsPage /> } />
84+ < Route path = "/settings/security" element = { < SecuritySettingsPage /> } />
85+ </ Route >
86+ </ Route >
8387
84- { /* ── Business Apps (/apps/:appId/*) ── */ }
85- < Route path = "/apps/:appId" element = { < AppLayout /> } >
86- < Route index element = { < BusinessAppPage /> } />
87- < Route path = ":objectName" element = { < ObjectListPage /> } />
88- < Route path = ":objectName/:recordId" element = { < ObjectRecordPage /> } />
89- </ Route >
88+ { /* ── Business Apps (/apps/:appId/*) ── */ }
89+ < Route path = "/apps/:appId" element = { < AppLayout /> } >
90+ < Route index element = { < BusinessAppPage /> } />
91+ < Route path = ":objectName" element = { < ObjectListPage /> } />
92+ < Route path = ":objectName/:recordId" element = { < ObjectRecordPage /> } />
93+ </ Route >
9094
91- </ Route >
95+ </ Route >
9296
93- { /* Fallback */ }
94- < Route path = "*" element = { < Navigate to = "/" replace /> } />
95- </ Routes >
96- </ Suspense >
97+ { /* Fallback */ }
98+ < Route path = "*" element = { < Navigate to = "/" replace /> } />
99+ </ Routes >
100+ </ Suspense >
101+ </ main >
102+ </ >
97103 ) ;
98104}
0 commit comments