+
diff --git a/apps/compliance-portal/src/pages/MainLayoutSkeleton.tsx b/apps/compliance-portal/src/pages/MainLayoutSkeleton.tsx
index 74d354850..822be44c8 100644
--- a/apps/compliance-portal/src/pages/MainLayoutSkeleton.tsx
+++ b/apps/compliance-portal/src/pages/MainLayoutSkeleton.tsx
@@ -16,7 +16,7 @@ import { TopBarSkeleton } from "#/components/TopBar/TopBarSkeleton";
export function MainLayoutSkeleton() {
return (
-
+
);
diff --git a/apps/compliance-portal/src/pages/RequestsPage.tsx b/apps/compliance-portal/src/pages/RequestsPage.tsx
new file mode 100644
index 000000000..bbf084f9d
--- /dev/null
+++ b/apps/compliance-portal/src/pages/RequestsPage.tsx
@@ -0,0 +1,31 @@
+// 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 { PlusIcon } from "@phosphor-icons/react";
+import { Button } from "@probo/ui/src/v2/Button/Button";
+
+import { PageHeader } from "#/components/PageHeader/PageHeader";
+
+export default function RequestsPage() {
+ return (
+ }>
+ New Request
+
+ )}
+ />
+ );
+}
diff --git a/apps/compliance-portal/src/pages/SubprocessorsPage.tsx b/apps/compliance-portal/src/pages/SubprocessorsPage.tsx
new file mode 100644
index 000000000..6dc812a07
--- /dev/null
+++ b/apps/compliance-portal/src/pages/SubprocessorsPage.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.
+
+import { PageHeader } from "#/components/PageHeader/PageHeader";
+
+// Toolbar (category/region filters, search, Download CSV) and the subprocessor
+// count are deferred until the v2 Select/TextField components exist.
+export default function SubprocessorsPage() {
+ return ;
+}
diff --git a/apps/compliance-portal/src/pages/UpdatesPage.tsx b/apps/compliance-portal/src/pages/UpdatesPage.tsx
new file mode 100644
index 000000000..f70e32415
--- /dev/null
+++ b/apps/compliance-portal/src/pages/UpdatesPage.tsx
@@ -0,0 +1,31 @@
+// 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 { BellIcon } from "@phosphor-icons/react";
+import { Button } from "@probo/ui/src/v2/Button/Button";
+
+import { PageHeader } from "#/components/PageHeader/PageHeader";
+
+export default function UpdatesPage() {
+ return (
+ }>
+ Subscribe to updates
+
+ )}
+ />
+ );
+}
diff --git a/apps/compliance-portal/src/routes.tsx b/apps/compliance-portal/src/routes.tsx
index d37a610ee..4e55ece32 100644
--- a/apps/compliance-portal/src/routes.tsx
+++ b/apps/compliance-portal/src/routes.tsx
@@ -18,6 +18,7 @@ import { createBrowserRouter } from "react-router";
import { PageSkeleton } from "#/components/skeletons/PageSkeleton";
import { getPathPrefix } from "#/lib/http/pathPrefix";
+import { HomePageSkeleton } from "#/pages/HomePageSkeleton";
const routes = [
{
@@ -27,23 +28,24 @@ const routes = [
children: [
{
index: true,
- Component: lazy(() => import("#/pages/HomePage")),
+ Fallback: HomePageSkeleton,
+ Component: lazy(() => import("#/pages/HomePageLoader")),
},
{
path: "documents",
- Component: lazy(() => import("#/pages/PlaceholderPage")),
+ Component: lazy(() => import("#/pages/DocumentsPage")),
},
{
path: "subprocessors",
- Component: lazy(() => import("#/pages/PlaceholderPage")),
+ Component: lazy(() => import("#/pages/SubprocessorsPage")),
},
{
path: "updates",
- Component: lazy(() => import("#/pages/PlaceholderPage")),
+ Component: lazy(() => import("#/pages/UpdatesPage")),
},
{
path: "requests",
- Component: lazy(() => import("#/pages/PlaceholderPage")),
+ Component: lazy(() => import("#/pages/RequestsPage")),
},
],
},