From e280b91b9ff0dc5996be4654a624816e157faebf Mon Sep 17 00:00:00 2001 From: Sam Clemente Date: Sun, 30 Aug 2026 20:56:14 -0500 Subject: [PATCH 1/3] feat: add read-only research workspace Adds a responsive Research destination for browsing the linked account's Semble collections and Margin annotations with independent source states and safe external links. --- apps/web/components/cms/cms-workspace.tsx | 3 + .../cms/mobile-workspace-footer.tsx | 7 +- apps/web/components/cms/research-section.tsx | 251 ++++++++++++++++++ apps/web/components/cms/workspace-header.tsx | 10 +- apps/web/lib/research-api.ts | 50 ++++ apps/web/lib/workspace-navigation.ts | 4 +- apps/web/test/mobile-workspace-ui.test.tsx | 2 + apps/web/test/research-api.test.ts | 23 ++ apps/web/test/research-section.test.tsx | 115 ++++++++ apps/web/test/workspace-navigation.test.ts | 10 + 10 files changed, 469 insertions(+), 6 deletions(-) create mode 100644 apps/web/components/cms/research-section.tsx create mode 100644 apps/web/lib/research-api.ts create mode 100644 apps/web/test/research-api.test.ts create mode 100644 apps/web/test/research-section.test.tsx diff --git a/apps/web/components/cms/cms-workspace.tsx b/apps/web/components/cms/cms-workspace.tsx index ad34faa..784e88b 100644 --- a/apps/web/components/cms/cms-workspace.tsx +++ b/apps/web/components/cms/cms-workspace.tsx @@ -20,6 +20,7 @@ import { } from "@/components/cms/post-dialogs"; import { RightPanel } from "@/components/cms/right-panel"; import { PublicationsDashboard } from "@/components/cms/publications-dashboard"; +import { ResearchSection } from "@/components/cms/research-section"; import { WorkspaceHeader } from "@/components/cms/workspace-header"; import { FeedbackSection } from "@/components/cms/feedback-section"; import { MobileWorkspaceFooter } from "@/components/cms/mobile-workspace-footer"; @@ -641,6 +642,8 @@ export function CmsWorkspace() { isSyncing={isSyncing} onSync={syncPublications} /> + ) : activeView === "research" ? ( + ) : activeView === "feedback" ? ( ) : ( diff --git a/apps/web/components/cms/mobile-workspace-footer.tsx b/apps/web/components/cms/mobile-workspace-footer.tsx index ce29430..06d6da5 100644 --- a/apps/web/components/cms/mobile-workspace-footer.tsx +++ b/apps/web/components/cms/mobile-workspace-footer.tsx @@ -1,6 +1,6 @@ "use client"; -import { BookOpenIcon, LibraryIcon, MessageSquareTextIcon, RocketIcon, SaveIcon } from "lucide-react"; +import { BookOpenIcon, LibraryIcon, MessageSquareTextIcon, RocketIcon, SaveIcon, TelescopeIcon } from "lucide-react"; import { Button } from "@/components/ui/button"; import { cn } from "@/lib/utils"; import type { DraftSaveState } from "@/lib/draft-editor"; @@ -51,13 +51,14 @@ export function MobileWorkspaceFooter({ const views = [ { value: "posts", label: "Posts", icon: BookOpenIcon }, { value: "publications", label: "Publications", icon: LibraryIcon }, + { value: "research", label: "Research", icon: TelescopeIcon }, { value: "feedback", label: "Feedback", icon: MessageSquareTextIcon }, ] as const; return (