Skip to content

feat(workspaces): workspace switcher, invite dialog, and Settings sub-tabs#761

Merged
gabrielste1n merged 3 commits into
mainfrom
feat/workspaces-teams
May 12, 2026
Merged

feat(workspaces): workspace switcher, invite dialog, and Settings sub-tabs#761
gabrielste1n merged 3 commits into
mainfrom
feat/workspaces-teams

Conversation

@gabrielste1n
Copy link
Copy Markdown
Collaborator

Summary

Desktop UI for the Workspaces, Teams, Shared Collaboration, and Developer API feature (paired with OpenWhispr/openwhispr-api#62).

  • Workspace switcher at the top of the sidebar (compact selector + menu)
  • "Invite teammate" / "Create workspace" button above Settings (conditional copy based on whether the user has any workspaces)
  • Settings → Workspace section with 5 sub-tabs: General, Members, Teams, Billing, Developer
  • Deep-link invitation handler — openwhispr://invitations/<token> opens AcceptInvitationModal (routes through onboarding sign-in if signed out, then resumes)
  • One-time API key reveal modal (developer sub-tab); workspace keys use ow_wks_live_... prefix
  • New i18n keys across all 10 locales (settingsPage.workspace.*, sidebar.invite.*, invitations.*)

Files

  • New services: WorkspacesService.ts, TeamsService.ts, InvitationsService.ts, WorkspaceApiKeysService.ts
  • New store: workspaceStore.ts; new hook: useWorkspace.ts
  • New components: WorkspaceSwitcher, CreateWorkspaceDialog, InviteTeammateDialog, AcceptInvitationModal, WorkspaceSection, WorkspaceMembersTab, WorkspaceTeamsTab, WorkspaceBillingTab, WorkspaceDeveloperTab
  • Modified: ControlPanelSidebar, ControlPanel, SettingsModal, SettingsPage, main.js, preload.js, electron.ts, all 10 translation.json

Premium-feel rules followed

  • Members table is two-column max (identity + role+actions), 56px row height, 1px divider, no zebra striping
  • Role dropdown uses the existing select primitive — no custom popover
  • Empty states are minimal: small icon + one-line description + single primary CTA
  • All copy is sentence case
  • Spacing matches HistoryView.tsx (px-4 pt-4 pb-6 / max-w-3xl mx-auto)

Deferred

  • Local SQLite migration to add workspace_id/team_id columns to the notes/folders tables — backwards-compat-safe to do later since cloud columns are nullable

Test plan

  • First-time user (no workspaces): sidebar shows "Create workspace"; Settings → Workspace shows empty state with CTA
  • Create a workspace → switcher updates, Settings sub-tabs populate
  • Invite by email → seat counter increments → Stripe customer/sub created server-side
  • Accept invitation via deep link from another machine → workspace appears in switcher
  • Switch between workspaces — sidebar tabs re-scope, no flicker
  • Mint a workspace API key, copy via the one-time reveal modal, verify it works against the API
  • Switch i18n locale and verify all new strings render

@gabrielste1n gabrielste1n force-pushed the feat/workspaces-teams branch from 857725d to 98e33ba Compare May 12, 2026 03:36
@gabrielste1n gabrielste1n merged commit 98e33ba into main May 12, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant