User Management

Add coaches and players by invite or team join link, set roles, and link users to roster players.

BenchOS programs are multi-user. The head coach typically holds the Admin seat and invites assistant coaches, support staff, and players in. This page covers how to manage that — inviting people, setting roles, customizing permissions, and linking player users to their roster row.

The hub is Settings → Staff & Permissions at /settings/users. This page is admin-only.

Roles

Three roles, each with a different default lens on the program:

  • Admin — Full control. Invites and removes users, customizes permissions, and has the highest access on every artifact (generate / edit / view).
  • Coach — Day-to-day staff. Generates and edits practice plans, game briefs, dev plans, scouting, and roster. Cannot manage users or change program settings.
  • Player — Roster member with limited, scoped access. Sees finalized (not draft) practice plans and game briefs, the playbook, and only their own development plan, dev card, and player profile. Cannot see scouting reports, weekly reports, or other players' development data.

Roles have hard floors — protections you can't override even with custom permissions. Coaches can never escalate to user management; players can never see scouting or other players' dev data.

The People tab

/settings/users opens to the People tab. It lists every active member and pending invitation in a single table:

  • Person — name, avatar, email
  • Role — Admin / Coach / Player
  • Linked player — the roster row linked to this user (Players only)
  • Status — Active, Invited, or Inactive

A search box filters by name or email. Two filter chip rows narrow by Role (All / Admins / Coaches / Players) and Status (All / Active / Invited / Inactive).

Two ways to add people

There are two ways in, built for different jobs:

InviteTeam join link
Best forA coach, an admin, or one playerYour whole roster of players
Who it namesOne person, one emailNobody — each player picks their own name
RolesAdmin, Coach, or PlayerPlayer only
Needs an email to arrive?No — the link works on its ownNo
Per-person controlsResend, revoke, copy linkTurn off the link

Rule of thumb: invite staff, and onboard the roster with the team join link. Use Copy link on a pending invite for any single player the email didn't reach.

Neither path depends on an email landing in an inbox. That matters more than it sounds: school mail systems routinely filter mail from senders they don't recognize, and the player never sees it. See Getting invites past a school filter for what to do about that and what to send your IT department.

Inviting someone

Click Send invite on the Invite by email card at the top of the People tab. The Invite member modal asks for:

  • Email (required)
  • Role (required) — defaults to Coach
  • Linked player — only appears when Role is set to Player. Pick from the dropdown of unlinked roster rows. (If no unlinked players exist, the modal tells you to add the player to the roster first.)

On a paid plan, the modal also shows what this invite costs — the exact change to your bill and when it applies — before you send. Nothing is charged at invite; the change applies when the person accepts. Roster records stay free; only accounts that sign in are billed. See Billing & Plans for the seat rates.

Click Send invite. BenchOS creates a pending invitation and emails the recipient a link to accept, from your name with your address as the reply-to. The invite stays valid for 14 days.

After you send it

Pending invitations appear in the People list with status Invited. Under the status, each one shows what happened to the email:

What it saysWhat it means
Email sent, not confirmedHanded to our mail provider; no delivery confirmation yet.
Reached their mail serverTheir mail server accepted it. It can still land in spam or a school quarantine from there.
Email bouncedThe address was rejected — usually a typo or a closed account.
Marked as spamSomeone reported it. Send the link directly instead.

Every pending invite has a Copy link button. The link is the invitation: paste it into a text, a team app, or hand it over in person, and it works exactly as the emailed one would. Resend and revoke are on the same row.

What the invitee sees

The recipient opens the link and lands on a Join page for your program:

  • No account yet: they set a password right there and are in. No confirmation email, no magic link — the invitation is the proof that you vouched for the address.
  • Already have a BenchOS account: a Sign in link on the same page takes them through sign-in and back to the invitation, which is then accepted against their existing account.
  • Signed in as a different email: they're offered a sign-out so they can accept with the invited address.

Error states they might see: invalid link, expired (more than 14 days), revoked, or already accepted — each with guidance to ask you for a new one.

One link for the whole roster. Create it from the Share a team join link card at the top of the People tab, then post it in the team group chat or show the QR code at the end of practice.

Each player who opens it:

  1. picks their name from the roster (shown as "Marcus J." — enough to find themselves, not a roster export for whoever the link gets forwarded to),
  2. enters an email — any address they actually check; a personal one is fine and usually beats a school one,
  3. sets a password, and lands on their dashboard.

A player who already has a BenchOS account opens the link signed in, picks their name, and is added to the program without creating a second account.

What keeps a link this convenient safe:

  • Players only. It can never add a coach or an admin.
  • Capped. You authorize a number of seats when you create it — defaulted to your unclaimed roster count — and on a paid plan you see what that many players joining would add to your bill before you post it. Each join uses one seat; the link stops working when they're used up.
  • Expires after 14 days, and you can turn it off at any time. Creating a new link turns off the old one, so there's only ever one live link per program.

If a player with a pending invite joins through the team link instead, their invite is marked accepted automatically.

Managing a member

Click any active member row to open the Member detail drawer. From here you can:

  • Change role — Admin ↔ Coach. (Player roles can't be changed.)
  • Deactivate the member, which removes their access while preserving their history. Reactivate them at any time from the Inactive filter.
  • Change email — for a member who can't sign in to change it themselves (a player whose school address never received anything, say). Takes effect immediately, with no confirmation email. This only works for members whose only program is yours; someone who also belongs to another program changes it themselves from their own account settings.
  • See Linked player (Players only) and Invited by (read-only).

One safeguard: if you're the only Admin in the program, you can't demote or deactivate yourself. A lock icon appears with the explanation.

Linking users to roster players

Player users are tied to a specific roster row — that's how they see only their own data. Linking happens in two places:

  1. From the invite modal — pick the roster row from the Linked player dropdown when sending the invite (Player role only).

  2. From the Roster page — each row has a Roster Access cell:

    • No user yet → an Invite button opens the invite modal with that player pre-selected.
    • Invited, not accepted → an Invited pill with Resend and Revoke buttons.
    • Active user → the user's avatar and an Active link that opens their Member drawer.

    The Invite and Active links are for Admins. Anyone else sees the player's account status without them, and sees Resend / Revoke only if you've given their role Edit on User Management.

A roster player can only be linked to one user account, and a Player user can only be linked to one roster player. The linking is bidirectional and gets cleaned up if you revoke the invitation or deactivate the member.

Roles & Permissions tab

Switch to the Roles & Permissions tab to set what each role can do. Resources are grouped into four expandable sections — Plans, Library, People, Settings — and each row has a level for Coach and for Player: None, View, Edit, or Generate.

The levels are a ladder — each one includes everything below it:

  • None — the resource doesn't appear for them at all. If they follow a link to it anyway, they get an access-restricted message rather than the content
  • View — can open and read it
  • Edit — can create and change it. Includes View
  • Generate — can ask the AI staff to produce it, or, where nothing is generated, the highest action the resource has. Includes Edit

A legend above the sections says the same thing in the app, and each option in the picker carries a sentence describing what it grants. Two resources use their own names for the same ladder: Feedback, and Announcements, where Generate means sending to the program rather than anything to do with AI. Where a resource has nothing to generate, that level is shown disabled rather than offered.

Change a level and it takes effect immediately, for everyone in that role. A row you've changed shows a reset control to put it back to the default.

Hard floors

Some levels can't be raised, whatever you set:

  • Players can never see scouting reports or weekly reports
  • Players can never send announcements — receiving them is universal, but broadcasting reaches every membership at once
  • Only admins can manage users and permissions
  • Only admins can make purchases; coaches and players can view billing at most

These are properties of the role rather than of your program, so the matrix won't offer you the option.

What this changes for the person

Permissions decide what someone can open and what they're offered. Turn off Playbook for players and it disappears from their sidebar — they don't get a menu item that refuses them when they click it.

What a player sees

A player's BenchOS is composed from the same permissions, not a separate app.

Their dashboard leads with their own week: the current week of their development plan, its focus, and the drills that go with it, then announcements, the team schedule, and any material you've shared. Coach Prime's daily brief is written to them, about their day.

Their sidebar is grouped into Team and Me, showing only what they can reach, with an Access panel listing what you've opened up and what you haven't.

Everything shared is read-only, and players only ever see finished work — a practice plan or game brief appears once it's finalized, never while you're still drafting. They see their own development plan and dev card, never a teammate's. Rotations don't appear anywhere for players.

Changing your own email

Anyone with a password can change their sign-in email from Settings → Account: click the pencil next to the email, enter the new address and your current password, done. It takes effect immediately and no confirmation email is sent — your password is the proof. If you sign in with email links only, set a password first.

Multiple programs

If you (or a member) belong to more than one program, the Program Switcher in the app sidebar shows a dropdown with every program you have access to. Clicking another program switches your active context — useful for coaches who run multiple teams or staff who consult across programs.

If you only belong to one program, the switcher just shows that program's name as a static label.