Workspace Switcher

Choose a workspace

Select a workspace to continue.

Signed in as jane@example.com · Sign out

About this block

Workspace SwitcherPRO

Full-height workspace picker listing organizations with logo initials, member details, and a create-workspace row, plus a signed-in-as footer. Perfect for multi-tenant apps after sign-in.

Auth36: Workspace Switcher

A full-height, centered card that lists workspaces as clickable rows (each with an uppercase logo-initials tile, name, and detail line, plus a hover chevron that nudges right), followed by an optional dashed "create a new workspace" row and a "signed in as" footer with a sign-out link.

Upgrade to Pro

Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.

Upgrade Now

Installation

Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.

Radix flavor

bash
npx shadcn add "https://ui.beste.co/r/auth36?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/auth36?email=YOUR_EMAIL&license_key=YOUR_KEY"

This installs the block to components/beste/block/auth36.tsx.

Quick start

The installed file exports auth36Demo alongside the block: the exact props behind the preview above. Spread it to get a working workspace picker in one line.

tsx
import { Auth36, auth36Demo } from "@/components/beste/block/auth36";

export default function Page() {
  return <Auth36 {...auth36Demo} />;
}

Then replace the demo with your own props. Written out, a trimmed setup looks like this:

tsx
import { Auth36 } from "@/components/beste/block/auth36";

export default function Page() {
  return (
    <Auth36
      heading="Choose a workspace"
      description="Select a workspace to continue."
      workspaces={[
        { name: "Acme Inc.", detail: "12 members", logoText: "AC", href: "/w/acme" },
        { name: "Northwind", detail: "Owner · 4 members", logoText: "NW", href: "/w/northwind" },
      ]}
      createWorkspace={{ label: "Create a new workspace", href: "/w/new" }}
      account={{
        signedInLabel: "Signed in as",
        email: "jane@example.com",
        signOutLabel: "Sign out",
        signOutHref: "/logout",
      }}
    />
  );
}

Props

PropTypeDefaultDescription
headingstringCentered h1 above the card; omitted entirely when falsy
descriptionstringMuted paragraph under the heading; omitted entirely when falsy
workspacesWorkspace[][]Rows rendered as links in the divided list
createWorkspace{ label: string; href: string }Optional dashed "create" row appended after the list
account{ signedInLabel: string; email: string; signOutLabel: string; signOutHref: string }Optional footer line with a sign-out link
classNamestringExtra classes for the outer <section>
ts
type Workspace = {
  name: string;
  detail: string;
  logoText: string;
  href?: string;
};

Behavior notes

  • Every row is a next/link, so navigation is purely href-driven; there are no onClick handlers or selection state anywhere in the block.
  • A workspace with no href falls back to "#", meaning that row links to the current page rather than being disabled.
  • Rows are keyed by array index, not by a stable id, so reordering workspaces can confuse React's reconciliation.
  • logoText is rendered verbatim inside a fixed size-10 tile with uppercase styling; nothing truncates or caps it, so pass short initials (long strings overflow the tile).
  • The createWorkspace row and the entire account footer are conditionally rendered: pass neither and the card shows only the workspace list with no footer.
  • The chevron on each workspace row is decorative, animating translate-x-0.5 on hover via the group/auth36 scope; the create row uses a dashed Plus tile instead and has no chevron.
  • The section forces min-h-screen and vertically centers its max-w-md content, so it is designed to own the full viewport as a post-sign-in interstitial rather than sit inline in a page.

More Auth blocks

View all Auth
FREE

auth7

Account Chooser

Full-height account picker that lists saved accounts with avatars, names, and emails, plus a use-another-account row. Perfect for multi-account apps, SSO hubs, and returning-user sign-in.

PRO

auth25

Claim Your Username

Full-height username picker with a prefixed input group, a live availability indicator, suggestion chips when a handle is taken, and a submit button that unlocks only when the name is free. Perfect for onboarding handle selection.

PRO

auth11

Account Type Selection

Full-height onboarding step where the user picks an account type from selectable radio cards with icons and descriptions, then continues. Perfect for tailoring sign-up flows by persona or plan.

PRO

auth29

Terminal Sign In

Full-height terminal-style sign-in rendered as a CLI window with a command prompt, a monospace email input, and a send-link action. Perfect for developer tools and CLI-first products.

PRO

auth14

Enterprise SSO Sign In

Full-height single sign-on screen with a work-email field, a continue-with-SSO button, and Google and Microsoft providers below a divider. Perfect for B2B and enterprise apps that authenticate via identity providers.

PRO

auth21

Passkey Sign In

Full-height passwordless sign-in screen with a fingerprint icon, a continue-with-passkey button, and a password fallback below a divider. Perfect for WebAuthn and biometric authentication flows.