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 ( + + +
+ +
+ +
+
+
+ {children} +
+
+ +
+ +
+ + +
+
+ ); +} diff --git a/app/offline/page.tsx b/app/(app)/offline/page.tsx similarity index 100% rename from app/offline/page.tsx rename to app/(app)/offline/page.tsx diff --git a/app/page.tsx b/app/(app)/page.tsx similarity index 100% rename from app/page.tsx rename to app/(app)/page.tsx diff --git a/app/posts/page.tsx b/app/(app)/posts/page.tsx similarity index 100% rename from app/posts/page.tsx rename to app/(app)/posts/page.tsx diff --git a/app/privacy/page.tsx b/app/(app)/privacy/page.tsx similarity index 100% rename from app/privacy/page.tsx rename to app/(app)/privacy/page.tsx diff --git a/app/sandboxes/layout.tsx b/app/(app)/sandboxes/layout.tsx similarity index 100% rename from app/sandboxes/layout.tsx rename to app/(app)/sandboxes/layout.tsx diff --git a/app/sandboxes/page.tsx b/app/(app)/sandboxes/page.tsx similarity index 100% rename from app/sandboxes/page.tsx rename to app/(app)/sandboxes/page.tsx diff --git a/app/segment/[segmentId]/page.tsx b/app/(app)/segment/[segmentId]/page.tsx similarity index 100% rename from app/segment/[segmentId]/page.tsx rename to app/(app)/segment/[segmentId]/page.tsx diff --git a/app/segments/page.tsx b/app/(app)/segments/page.tsx similarity index 100% rename from app/segments/page.tsx rename to app/(app)/segments/page.tsx diff --git a/app/settings/connectors/page.tsx b/app/(app)/settings/connectors/page.tsx similarity index 100% rename from app/settings/connectors/page.tsx rename to app/(app)/settings/connectors/page.tsx diff --git a/app/signin/page.tsx b/app/(app)/signin/page.tsx similarity index 100% rename from app/signin/page.tsx rename to app/(app)/signin/page.tsx diff --git a/app/sms/page.tsx b/app/(app)/sms/page.tsx similarity index 100% rename from app/sms/page.tsx rename to app/(app)/sms/page.tsx diff --git a/app/tasks/[runId]/page.tsx b/app/(app)/tasks/[runId]/page.tsx similarity index 100% rename from app/tasks/[runId]/page.tsx rename to app/(app)/tasks/[runId]/page.tsx diff --git a/app/tasks/page.tsx b/app/(app)/tasks/page.tsx similarity index 100% rename from app/tasks/page.tsx rename to app/(app)/tasks/page.tsx diff --git a/app/terms/page.tsx b/app/(app)/terms/page.tsx similarity index 100% rename from app/terms/page.tsx rename to app/(app)/terms/page.tsx diff --git a/app/(funnels)/layout.tsx b/app/(funnels)/layout.tsx new file mode 100644 index 000000000..591113789 --- /dev/null +++ b/app/(funnels)/layout.tsx @@ -0,0 +1,7 @@ +export default function FunnelsLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return
{children}
; +} diff --git a/app/(funnels)/song-drop/page.tsx b/app/(funnels)/song-drop/page.tsx new file mode 100644 index 000000000..7100089a2 --- /dev/null +++ b/app/(funnels)/song-drop/page.tsx @@ -0,0 +1,14 @@ +export default function SongDropPage() { + return ( +
+
+

+ Drop your song. +

+

+ We'll do the rest. +

+
+
+ ); +} diff --git a/app/layout.tsx b/app/layout.tsx index da9869e8d..e6a66ae04 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,16 +1,7 @@ import type { Metadata, Viewport } from "next"; import "./globals.css"; import "react-toastify/dist/ReactToastify.css"; -import Providers from "@/providers/Providers"; import { META_DESCRIPTION, TITLE } from "@/lib/consts"; -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"; import { Geist, Geist_Mono } from "next/font/google"; import DeferredAnalytics from "@/components/DeferredAnalytics"; @@ -71,32 +62,13 @@ export default function RootLayout({ children: React.ReactNode; }>) { return ( - - - -
- -
- -
-
-
- {children} -
-
- -
- -
- - -
-
+ {children}