From a8b027e46afaa72dcb812e786713ccf1bf8bc433 Mon Sep 17 00:00:00 2001
From: Sidney Swift <158200036+sidneyswift@users.noreply.github.com>
Date: Wed, 25 Mar 2026 16:58:51 -0400
Subject: [PATCH] refactor: split layout into (app) and (funnels) route groups
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Move all existing SaaS routes into (app)/ route group with its own
layout containing Providers, Sidebar, Header, and all shell UI.
Root layout now only has the HTML shell (fonts, metadata, analytics).
Create (funnels)/ route group with a bare layout for standalone
conversion funnels. Add song-drop/ as the first funnel placeholder
at /song-drop.
URLs are unchanged — route groups are invisible to the browser.
Made-with: Cursor
---
app/{ => (app)}/access/page.tsx | 0
app/{ => (app)}/agents/page.tsx | 0
app/{ => (app)}/artists/page.tsx | 0
app/{ => (app)}/catalogs/[catalogId]/page.tsx | 0
app/{ => (app)}/catalogs/page.tsx | 0
app/{ => (app)}/chat/[roomId]/page.tsx | 0
app/{ => (app)}/chat/page.tsx | 0
app/{ => (app)}/docs/account/constants.ts | 0
app/{ => (app)}/docs/account/page.tsx | 0
app/{ => (app)}/docs/base/constants.ts | 0
app/{ => (app)}/docs/base/page.tsx | 0
app/{ => (app)}/docs/fans/constants.ts | 0
app/{ => (app)}/docs/fans/page.tsx | 0
app/{ => (app)}/docs/posts/constants.ts | 0
app/{ => (app)}/docs/posts/page.tsx | 0
.../docs/segment_report/constants.ts | 0
app/{ => (app)}/docs/segment_report/page.tsx | 0
app/{ => (app)}/fans/page.tsx | 0
app/{ => (app)}/files/page.tsx | 0
app/{ => (app)}/keys/page.tsx | 0
app/(app)/layout.tsx | 38 +++++++++++++++++++
app/{ => (app)}/offline/page.tsx | 0
app/{ => (app)}/page.tsx | 0
app/{ => (app)}/posts/page.tsx | 0
app/{ => (app)}/privacy/page.tsx | 0
app/{ => (app)}/sandboxes/layout.tsx | 0
app/{ => (app)}/sandboxes/page.tsx | 0
app/{ => (app)}/segment/[segmentId]/page.tsx | 0
app/{ => (app)}/segments/page.tsx | 0
app/{ => (app)}/settings/connectors/page.tsx | 0
app/{ => (app)}/signin/page.tsx | 0
app/{ => (app)}/sms/page.tsx | 0
app/{ => (app)}/tasks/[runId]/page.tsx | 0
app/{ => (app)}/tasks/page.tsx | 0
app/{ => (app)}/terms/page.tsx | 0
app/(funnels)/layout.tsx | 7 ++++
app/(funnels)/song-drop/page.tsx | 14 +++++++
app/layout.tsx | 36 ++----------------
38 files changed, 63 insertions(+), 32 deletions(-)
rename app/{ => (app)}/access/page.tsx (100%)
rename app/{ => (app)}/agents/page.tsx (100%)
rename app/{ => (app)}/artists/page.tsx (100%)
rename app/{ => (app)}/catalogs/[catalogId]/page.tsx (100%)
rename app/{ => (app)}/catalogs/page.tsx (100%)
rename app/{ => (app)}/chat/[roomId]/page.tsx (100%)
rename app/{ => (app)}/chat/page.tsx (100%)
rename app/{ => (app)}/docs/account/constants.ts (100%)
rename app/{ => (app)}/docs/account/page.tsx (100%)
rename app/{ => (app)}/docs/base/constants.ts (100%)
rename app/{ => (app)}/docs/base/page.tsx (100%)
rename app/{ => (app)}/docs/fans/constants.ts (100%)
rename app/{ => (app)}/docs/fans/page.tsx (100%)
rename app/{ => (app)}/docs/posts/constants.ts (100%)
rename app/{ => (app)}/docs/posts/page.tsx (100%)
rename app/{ => (app)}/docs/segment_report/constants.ts (100%)
rename app/{ => (app)}/docs/segment_report/page.tsx (100%)
rename app/{ => (app)}/fans/page.tsx (100%)
rename app/{ => (app)}/files/page.tsx (100%)
rename app/{ => (app)}/keys/page.tsx (100%)
create mode 100644 app/(app)/layout.tsx
rename app/{ => (app)}/offline/page.tsx (100%)
rename app/{ => (app)}/page.tsx (100%)
rename app/{ => (app)}/posts/page.tsx (100%)
rename app/{ => (app)}/privacy/page.tsx (100%)
rename app/{ => (app)}/sandboxes/layout.tsx (100%)
rename app/{ => (app)}/sandboxes/page.tsx (100%)
rename app/{ => (app)}/segment/[segmentId]/page.tsx (100%)
rename app/{ => (app)}/segments/page.tsx (100%)
rename app/{ => (app)}/settings/connectors/page.tsx (100%)
rename app/{ => (app)}/signin/page.tsx (100%)
rename app/{ => (app)}/sms/page.tsx (100%)
rename app/{ => (app)}/tasks/[runId]/page.tsx (100%)
rename app/{ => (app)}/tasks/page.tsx (100%)
rename app/{ => (app)}/terms/page.tsx (100%)
create mode 100644 app/(funnels)/layout.tsx
create mode 100644 app/(funnels)/song-drop/page.tsx
diff --git a/app/access/page.tsx b/app/(app)/access/page.tsx
similarity index 100%
rename from app/access/page.tsx
rename to app/(app)/access/page.tsx
diff --git a/app/agents/page.tsx b/app/(app)/agents/page.tsx
similarity index 100%
rename from app/agents/page.tsx
rename to app/(app)/agents/page.tsx
diff --git a/app/artists/page.tsx b/app/(app)/artists/page.tsx
similarity index 100%
rename from app/artists/page.tsx
rename to app/(app)/artists/page.tsx
diff --git a/app/catalogs/[catalogId]/page.tsx b/app/(app)/catalogs/[catalogId]/page.tsx
similarity index 100%
rename from app/catalogs/[catalogId]/page.tsx
rename to app/(app)/catalogs/[catalogId]/page.tsx
diff --git a/app/catalogs/page.tsx b/app/(app)/catalogs/page.tsx
similarity index 100%
rename from app/catalogs/page.tsx
rename to app/(app)/catalogs/page.tsx
diff --git a/app/chat/[roomId]/page.tsx b/app/(app)/chat/[roomId]/page.tsx
similarity index 100%
rename from app/chat/[roomId]/page.tsx
rename to app/(app)/chat/[roomId]/page.tsx
diff --git a/app/chat/page.tsx b/app/(app)/chat/page.tsx
similarity index 100%
rename from app/chat/page.tsx
rename to app/(app)/chat/page.tsx
diff --git a/app/docs/account/constants.ts b/app/(app)/docs/account/constants.ts
similarity index 100%
rename from app/docs/account/constants.ts
rename to app/(app)/docs/account/constants.ts
diff --git a/app/docs/account/page.tsx b/app/(app)/docs/account/page.tsx
similarity index 100%
rename from app/docs/account/page.tsx
rename to app/(app)/docs/account/page.tsx
diff --git a/app/docs/base/constants.ts b/app/(app)/docs/base/constants.ts
similarity index 100%
rename from app/docs/base/constants.ts
rename to app/(app)/docs/base/constants.ts
diff --git a/app/docs/base/page.tsx b/app/(app)/docs/base/page.tsx
similarity index 100%
rename from app/docs/base/page.tsx
rename to app/(app)/docs/base/page.tsx
diff --git a/app/docs/fans/constants.ts b/app/(app)/docs/fans/constants.ts
similarity index 100%
rename from app/docs/fans/constants.ts
rename to app/(app)/docs/fans/constants.ts
diff --git a/app/docs/fans/page.tsx b/app/(app)/docs/fans/page.tsx
similarity index 100%
rename from app/docs/fans/page.tsx
rename to app/(app)/docs/fans/page.tsx
diff --git a/app/docs/posts/constants.ts b/app/(app)/docs/posts/constants.ts
similarity index 100%
rename from app/docs/posts/constants.ts
rename to app/(app)/docs/posts/constants.ts
diff --git a/app/docs/posts/page.tsx b/app/(app)/docs/posts/page.tsx
similarity index 100%
rename from app/docs/posts/page.tsx
rename to app/(app)/docs/posts/page.tsx
diff --git a/app/docs/segment_report/constants.ts b/app/(app)/docs/segment_report/constants.ts
similarity index 100%
rename from app/docs/segment_report/constants.ts
rename to app/(app)/docs/segment_report/constants.ts
diff --git a/app/docs/segment_report/page.tsx b/app/(app)/docs/segment_report/page.tsx
similarity index 100%
rename from app/docs/segment_report/page.tsx
rename to app/(app)/docs/segment_report/page.tsx
diff --git a/app/fans/page.tsx b/app/(app)/fans/page.tsx
similarity index 100%
rename from app/fans/page.tsx
rename to app/(app)/fans/page.tsx
diff --git a/app/files/page.tsx b/app/(app)/files/page.tsx
similarity index 100%
rename from app/files/page.tsx
rename to app/(app)/files/page.tsx
diff --git a/app/keys/page.tsx b/app/(app)/keys/page.tsx
similarity index 100%
rename from app/keys/page.tsx
rename to app/(app)/keys/page.tsx
diff --git a/app/(app)/layout.tsx b/app/(app)/layout.tsx
new file mode 100644
index 000000000..7465f7a71
--- /dev/null
+++ b/app/(app)/layout.tsx
@@ -0,0 +1,38 @@
+import Providers from "@/providers/Providers";
+import Sidebar from "@/components/Sidebar";
+import Header from "@/components/Header";
+import { Suspense } from "react";
+import ArtistSettingModal from "@/components/ArtistSettingModal";
+import MobileDownloadModal from "@/components/ModalDownloadModal";
+import ArtistsSidebar from "@/components/Artists/ArtistsSidebar";
+import { ToastContainer } from "react-toastify";
+import { Toaster } from "sonner";
+
+export default function AppLayout({
+ children,
+}: Readonly<{
+ children: React.ReactNode;
+}>) {
+ return (
+
+ We'll do the rest. +
+