diff --git a/apps/compliance-portal/package.json b/apps/compliance-portal/package.json
index 061d8dd74..38c55881b 100644
--- a/apps/compliance-portal/package.json
+++ b/apps/compliance-portal/package.json
@@ -10,6 +10,8 @@
"preview": "vite preview"
},
"dependencies": {
+ "@probo/react-lazy": "1.0.0",
+ "@probo/routes": "1.0.0",
"@probo/ui": "1.0.0",
"clsx": "^2.1.1",
"react": "^19.2.7",
diff --git a/apps/compliance-portal/src/App.tsx b/apps/compliance-portal/src/App.tsx
index 6670c687e..c63f49ac8 100644
--- a/apps/compliance-portal/src/App.tsx
+++ b/apps/compliance-portal/src/App.tsx
@@ -12,10 +12,10 @@
// OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
// PERFORMANCE OF THIS SOFTWARE.
+import { RouterProvider } from "react-router";
+
+import { router } from "#/routes";
+
export function App() {
- return (
-
- Compliance Portal
-
- );
+ return ;
}
diff --git a/apps/compliance-portal/src/components/skeletons/PageSkeleton.tsx b/apps/compliance-portal/src/components/skeletons/PageSkeleton.tsx
new file mode 100644
index 000000000..32c0f55ca
--- /dev/null
+++ b/apps/compliance-portal/src/components/skeletons/PageSkeleton.tsx
@@ -0,0 +1,21 @@
+// Copyright (c) 2026 Probo Inc .
+//
+// Permission to use, copy, modify, and/or distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+// AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+// OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+// PERFORMANCE OF THIS SOFTWARE.
+
+export function PageSkeleton() {
+ return (
+
+ );
+}
diff --git a/apps/compliance-portal/src/pages/HomePage.tsx b/apps/compliance-portal/src/pages/HomePage.tsx
new file mode 100644
index 000000000..2c8b3f407
--- /dev/null
+++ b/apps/compliance-portal/src/pages/HomePage.tsx
@@ -0,0 +1,21 @@
+// Copyright (c) 2026 Probo Inc .
+//
+// Permission to use, copy, modify, and/or distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+// AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+// OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+// PERFORMANCE OF THIS SOFTWARE.
+
+export default function HomePage() {
+ return (
+
+ Compliance Portal
+
+ );
+}
diff --git a/apps/compliance-portal/src/pages/MainLayout.tsx b/apps/compliance-portal/src/pages/MainLayout.tsx
new file mode 100644
index 000000000..2111cf97c
--- /dev/null
+++ b/apps/compliance-portal/src/pages/MainLayout.tsx
@@ -0,0 +1,23 @@
+// Copyright (c) 2026 Probo Inc .
+//
+// Permission to use, copy, modify, and/or distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+// AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+// OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+// PERFORMANCE OF THIS SOFTWARE.
+
+import { Outlet } from "react-router";
+
+export default function MainLayout() {
+ return (
+
+
+
+ );
+}
diff --git a/apps/compliance-portal/src/routes.tsx b/apps/compliance-portal/src/routes.tsx
new file mode 100644
index 000000000..216df1a77
--- /dev/null
+++ b/apps/compliance-portal/src/routes.tsx
@@ -0,0 +1,35 @@
+// Copyright (c) 2026 Probo Inc .
+//
+// Permission to use, copy, modify, and/or distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+// AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+// OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+// PERFORMANCE OF THIS SOFTWARE.
+
+import { lazy } from "@probo/react-lazy";
+import { type AppRoute, routeFromAppRoute } from "@probo/routes";
+import { createBrowserRouter } from "react-router";
+
+import { PageSkeleton } from "#/components/skeletons/PageSkeleton";
+
+const routes = [
+ {
+ path: "/",
+ Fallback: PageSkeleton,
+ Component: lazy(() => import("#/pages/MainLayout")),
+ children: [
+ {
+ index: true,
+ Component: lazy(() => import("#/pages/HomePage")),
+ },
+ ],
+ },
+] satisfies AppRoute[];
+
+export const router = createBrowserRouter(routes.map(routeFromAppRoute));
diff --git a/package-lock.json b/package-lock.json
index 1f05d8463..ea6ce28a2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -29,6 +29,8 @@
"name": "@probo/compliance-portal",
"version": "0.0.0",
"dependencies": {
+ "@probo/react-lazy": "1.0.0",
+ "@probo/routes": "1.0.0",
"@probo/ui": "1.0.0",
"clsx": "^2.1.1",
"react": "^19.2.7",