All updates
frontend
backend
database
auth

Workspace switcher and workspace-scoped project ownership

  • Workspace switcher in the sidebarAdded a new WorkspaceSwitcher dropdown at the top of the app sidebar so users can switch between Personal and all organization workspaces they belong to. Switching uses Clerk's setActive(), refreshes the project list, and stays in sync with org creates/renames/deletes.
  • Projects and ownership scoped to the active workspaceProject lists and creation are now scoped to the active Clerk workspace. Project ownership (ownerType / clerkOwnerId) is derived server-side from the active workspace (auth().orgId / auth().userId) instead of being provided by the client.

New Features

  • Added WorkspaceSwitcher UI component in the app sidebar to choose between Personal and organization workspaces.frontend
  • Added GET /api/user/orgs endpoint that returns the caller's organizations along with a canCreateProject flag for each org.backend
  • Exported OrgWithMembership type and added findOrgsWithMembershipByUserId to enumerate a user's organizations and membership roles.database

Improvements

  • Scoped the app project list to the active workspace (app/layout.tsx and GET /api/projects) instead of merging personal and org projects into one list.frontend
  • Made workspace switching reactive: project cache is invalidated when the active workspace changes (including external changes such as org deletion).frontend
  • Updated organization settings page to switch to the personal workspace and redirect to /app when an org is deleted or the user leaves it (instead of returning to the marketing site).frontend

API

  • Changed POST /api/projects to derive ownership (ownerType / clerkOwnerId) from the active workspace (auth().orgId / userId); the route no longer accepts ownership fields from the request body.backend
  • Updated GET /api/projects to return projects only for the active workspace (org projects when an org is active, personal projects otherwise).backend

Breaking Changes

  • Clients and integrations must not rely on sending ownerType or clerkOwnerId in project-creation requests; ownership is now determined by the active Clerk workspace and will be enforced server-side.backend

Documentation

  • Updated backlog and changelog notes to reflect the workspace model and removed the previous implicit org-first project behavior.

Database

  • Added OrgWithMembership type and repository support to return organizations a user belongs to with membership role information for use by workspace UI and permission checks.database