Admin: Users
/admin/users lets a super admin answer "who is this user, and which workspaces do they belong to?" It reads the app-owned users table (kept in sync with Better Auth by the auth triggers), so no membership-scoped API is needed.
/admin/users lets a super admin answer "who is this user, and which workspaces
do they belong to?" It reads the app-owned users table (kept in sync with
Better Auth by the auth triggers), so no membership-scoped API is needed.
Using it
- Paginated list, newest first, with Load more.
- Exact email search — type a full email and Search. Matching is
case-insensitive against the
users.emailindex. Fuzzy/partial search is not included. - Details opens a drawer with the user's workspace memberships and roles (resolved from Better Auth), plus created time and name/username.
What it intentionally does not do
No impersonation, no account deletion, no email/password edits. For those, use the Better Auth or Convex dashboards directly. This view is read-only.
Backend
Queries: admin.users.list and admin.users.get in
convex/admin/users.ts. Both
require requireSuperAdmin.
Removing it
Part of the admin panel — see Removing the Admin Panel and Audit Log.
Super Admin Panel
A small, read-first platform admin area at /admin, for operators/owners of the product — not for workspace members. It is intentionally minimal: visibility first, plus one guarded support action (suspend/reactivate a workspace).
Admin: Workspaces
/admin/workspaces lists every workspace (organization) and hosts the admin write surface: suspend and reactivate. It reads app-owned organization_profiles joined with Better Auth organization data.