diff --git a/src/app/(dashboard)/studies/[id]/experiments/new/page.tsx b/src/app/(dashboard)/studies/[id]/experiments/new/page.tsx
new file mode 100644
index 0000000..ad29fb8
--- /dev/null
+++ b/src/app/(dashboard)/studies/[id]/experiments/new/page.tsx
@@ -0,0 +1,21 @@
+"use client";
+
+import { useParams } from "next/navigation";
+import { useEffect } from "react";
+import { ExperimentForm } from "~/components/experiments/ExperimentForm";
+import { useStudyContext } from "~/lib/study-context";
+
+export default function NewStudyExperimentPage() {
+ const params = useParams();
+ const studyId: string = typeof params.id === "string" ? params.id : "";
+ const { setSelectedStudyId, selectedStudyId } = useStudyContext();
+
+ // Sync selected study (unified study-context)
+ useEffect(() => {
+ if (studyId && selectedStudyId !== studyId) {
+ setSelectedStudyId(studyId);
+ }
+ }, [studyId, selectedStudyId, setSelectedStudyId]);
+
+ return ;
+}
diff --git a/src/app/(dashboard)/studies/[id]/experiments/page.tsx b/src/app/(dashboard)/studies/[id]/experiments/page.tsx
new file mode 100644
index 0000000..f6faf49
--- /dev/null
+++ b/src/app/(dashboard)/studies/[id]/experiments/page.tsx
@@ -0,0 +1,55 @@
+"use client";
+
+import { useParams } from "next/navigation";
+import { Suspense, useEffect } from "react";
+import { FlaskConical, Plus } from "lucide-react";
+import { ExperimentsDataTable } from "~/components/experiments/experiments-data-table";
+import { PageHeader } from "~/components/ui/page-header";
+import { Button } from "~/components/ui/button";
+import { useBreadcrumbsEffect } from "~/components/ui/breadcrumb-provider";
+import { useStudyContext } from "~/lib/study-context";
+import { useSelectedStudyDetails } from "~/hooks/useSelectedStudyDetails";
+
+export default function StudyExperimentsPage() {
+ const params = useParams();
+ const studyId: string = typeof params.id === "string" ? params.id : "";
+ const { setSelectedStudyId, selectedStudyId } = useStudyContext();
+ const { study } = useSelectedStudyDetails();
+
+ // Set breadcrumbs
+ useBreadcrumbsEffect([
+ { label: "Dashboard", href: "/dashboard" },
+ { label: "Studies", href: "/studies" },
+ { label: study?.name ?? "Study", href: `/studies/${studyId}` },
+ { label: "Experiments" },
+ ]);
+
+ // Sync selected study (unified study-context)
+ useEffect(() => {
+ if (studyId && selectedStudyId !== studyId) {
+ setSelectedStudyId(studyId);
+ }
+ }, [studyId, selectedStudyId, setSelectedStudyId]);
+
+ return (
+
}>
+
+
+
+ );
+}
diff --git a/src/app/(dashboard)/studies/[id]/plugins/browse/page.tsx b/src/app/(dashboard)/studies/[id]/plugins/browse/page.tsx
new file mode 100644
index 0000000..3c31e30
--- /dev/null
+++ b/src/app/(dashboard)/studies/[id]/plugins/browse/page.tsx
@@ -0,0 +1,40 @@
+"use client";
+
+import { useParams } from "next/navigation";
+import { Suspense, useEffect } from "react";
+import { PluginStoreBrowse } from "~/components/plugins/plugin-store-browse";
+import { ManagementPageLayout } from "~/components/ui/page-layout";
+import { useStudyContext } from "~/lib/study-context";
+import { useSelectedStudyDetails } from "~/hooks/useSelectedStudyDetails";
+
+export default function StudyPluginBrowsePage() {
+ const params = useParams();
+ const studyId: string = typeof params.id === "string" ? params.id : "";
+ const { setSelectedStudyId, selectedStudyId } = useStudyContext();
+ const { study } = useSelectedStudyDetails();
+
+ // Sync selected study (unified study-context)
+ useEffect(() => {
+ if (studyId && selectedStudyId !== studyId) {
+ setSelectedStudyId(studyId);
+ }
+ }, [studyId, selectedStudyId, setSelectedStudyId]);
+
+ return (
+
+ Loading plugin store...}>
+
+
+
+ );
+}
diff --git a/src/app/(dashboard)/studies/[id]/plugins/page.tsx b/src/app/(dashboard)/studies/[id]/plugins/page.tsx
new file mode 100644
index 0000000..00f90ed
--- /dev/null
+++ b/src/app/(dashboard)/studies/[id]/plugins/page.tsx
@@ -0,0 +1,55 @@
+"use client";
+
+import { useParams } from "next/navigation";
+import { Suspense, useEffect } from "react";
+import { Puzzle, Plus } from "lucide-react";
+import { PluginsDataTable } from "~/components/plugins/plugins-data-table";
+import { PageHeader } from "~/components/ui/page-header";
+import { Button } from "~/components/ui/button";
+import { useBreadcrumbsEffect } from "~/components/ui/breadcrumb-provider";
+import { useStudyContext } from "~/lib/study-context";
+import { useSelectedStudyDetails } from "~/hooks/useSelectedStudyDetails";
+
+export default function StudyPluginsPage() {
+ const params = useParams();
+ const studyId: string = typeof params.id === "string" ? params.id : "";
+ const { setSelectedStudyId, selectedStudyId } = useStudyContext();
+ const { study } = useSelectedStudyDetails();
+
+ // Set breadcrumbs
+ useBreadcrumbsEffect([
+ { label: "Dashboard", href: "/dashboard" },
+ { label: "Studies", href: "/studies" },
+ { label: study?.name ?? "Study", href: `/studies/${studyId}` },
+ { label: "Plugins" },
+ ]);
+
+ // Sync selected study (unified study-context)
+ useEffect(() => {
+ if (studyId && selectedStudyId !== studyId) {
+ setSelectedStudyId(studyId);
+ }
+ }, [studyId, selectedStudyId, setSelectedStudyId]);
+
+ return (
+ }>
+
+
+
+ );
+}