Invite staff and assign multiple coaches to an athlete
Members & Multi-Coach
This guide covers inviting staff into your organization and assigning multiple coaches to a single athlete.
Add a member
In Workspace -> Members (/org/settings), requires org.members.invite. Click Add member to open the onboarding form and prefill the new person's details:
- Enter their Full name and Email.
- Pick an Org role -- defaults to Coach (you can pick Owner to add a co-owner, or another org-scope role).
- Optionally pick a Coaching role (Head Coach / Assistant Coach / Viewer...). When set, an Assign athletes picker appears so you can choose which athletes this coach should cover.
- Optionally add a personal Welcome note (included in the invite email).
- Choose Send invite email now or toggle it off to create a link only and share it yourself.
- Click Send invite / Create link.
The new person appears immediately in the roster as a pending invite. Invite tokens are bound to the invited email address and expire after 14 days. The header shows your active member count and how many paid seats remain.
Bulk invite. Switch the Add-member modal to Bulk mode to paste one
name, emailper line and invite a whole team at once -- you get a per-row result summary.
Org role vs coaching role. The Org role is the person's organization membership (defaults to Coach, which carries no admin powers). The optional Coaching role is a student-scope role applied to the athletes you select -- when the invite is accepted, the new coach is automatically assigned to those athletes with that role. You can always assign athletes later from the Coaches tab instead.
What the member does
They open the invite link (/org/invite/[token]) and see a branded preview of the organization and role they've been invited to. If signed out, they Create account (their signup is pre-filled with the name/email you entered, with the email locked) or sign in; once signed in, the invite is accepted automatically (including any athlete assignments captured above), their profile name is backfilled, their org is switched, and they land on the dashboard.
Manage existing members
With org.members.manage, the roster supports search, status filters (Active / Invited / Expired), and role badges. Click Manage on a member to open their detail panel where you can:
- Change their org role.
- Edit their profile (name, bio, location) -- useful for tidying up a new coach's details.
- Send a password-reset email (a secure recovery link -- you never set or see their password).
- Transfer ownership to them (owners only).
- Remove them (a soft removal, behind a confirmation).
Pending invites have their own actions: edit (name/email/note/role), copy link, resend (rate-limited with a short cooldown), and cancel.
A Recent activity feed logs who invited, edited, reset, removed, or transferred members, so admins have an audit trail.
Activating a member counts against your seat cap. If you're at the limit the Add-member modal warns you and the invite returns a "Seat limit reached" message -- add seats in Plans, Seats & Billing.
Self-service. Members manage their own credentials from Settings -> Security: change password (re-authenticated) and change email (with confirmation). They can also reset a forgotten password from the login page.
Assign multiple coaches to an athlete
Surflink supports a coaching team per athlete via the Coaches tab on an athlete's profile (/athletes/[id]). This requires athletes.assign_coaches.
- Open the athlete and go to the Coaches tab ("Assigned Coaches").
- Click Add coach.
- Pick a Coach (org members not already assigned) and a Role (student-scope roles, plus Owner).
- Click Assign.
Each assignment row has a role select to change the role and a trash icon to unassign. A student can have several coaches.
Assignment controls access. Assigning a coach is what grants them access to that athlete's data; unassigning revokes it. Non-admin coaches only ever see athletes they're assigned to (enforced by row-level security) - see Coach data isolation. Owners/admins (
athletes.assign_coaches) see everyone.
Primary coach
Use the star icon on a coach to mark them the athlete's primary coach (the point of contact, shown with a "Primary" badge and used as the default target for booking requests). Primary is stored on the athlete and only one coach is primary at a time.
Per-assignment permission overrides (fine-grained tweaks on top of the assigned coaching role) are supported by the backend and permission logic, but there is currently no UI to set them -- they can only be set via the API. The Coaches tab only sets the role.