diff --git a/packages/builder/src/pages/builder/portal/apps/[appId].svelte b/packages/builder/src/pages/builder/portal/apps/[appId].svelte
new file mode 100644
index 0000000000..3059f51077
--- /dev/null
+++ b/packages/builder/src/pages/builder/portal/apps/[appId].svelte
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
diff --git a/packages/builder/src/pages/builder/portal/apps/_components/PortalSideBar.svelte b/packages/builder/src/pages/builder/portal/apps/_components/PortalSideBar.svelte
new file mode 100644
index 0000000000..4ab0e2e9ca
--- /dev/null
+++ b/packages/builder/src/pages/builder/portal/apps/_components/PortalSideBar.svelte
@@ -0,0 +1,131 @@
+
+
+
+
+
+
+
+
+
$goto("./create")}>
+
+
+
+
+
+ {#each filteredApps as app}
+
+ {/each}
+
+
+
+
diff --git a/packages/builder/src/pages/builder/portal/apps/_components/PortalSideNavItem.svelte b/packages/builder/src/pages/builder/portal/apps/_components/PortalSideNavItem.svelte
new file mode 100644
index 0000000000..41158c10ef
--- /dev/null
+++ b/packages/builder/src/pages/builder/portal/apps/_components/PortalSideNavItem.svelte
@@ -0,0 +1,42 @@
+
+
+ $goto(url)} class:selected>
+
+
{text}
+
+
+
diff --git a/packages/builder/src/pages/builder/portal/apps/_layout.svelte b/packages/builder/src/pages/builder/portal/apps/_layout.svelte
index bf0bca0df4..c4a0bfd913 100644
--- a/packages/builder/src/pages/builder/portal/apps/_layout.svelte
+++ b/packages/builder/src/pages/builder/portal/apps/_layout.svelte
@@ -11,6 +11,7 @@
import { onMount } from "svelte"
import { redirect } from "@roxi/routify"
import { sdk } from "@budibase/shared-core"
+ import PortalSideBar from "./_components/PortalSideBar.svelte"
// Don't block loading if we've already hydrated state
let loaded = $apps.length != null
@@ -44,5 +45,18 @@
{#if loaded}
-
+
{/if}
+
+