UI + UXCollaboration And Social Interactionestablished
Invite user
Provide an invitation workflow that verifies recipient identity, previews access scope and role, explains constraints and side effects, sends through a clear delivery channel, tracks pending and accepted outcomes, and supports resend, edit, cancel, expiry, and approval states.
An authorized user needs to bring another person into a workspace, organization, project, channel, repository, team, tenant, or shared object.
Access starts only after an invitation is delivered, accepted, approved, or verified.
The product can track invitation state and enforce role, scope, expiry, duplicate, and cancellation behavior.
Avoid when
The current user is creating their own account or profile.
The user is only adding an existing member to a channel or object without a new invitation lifecycle.
The task is bulk provisioning from a file, SCIM, directory sync, or import job.
The product cannot enforce access scope or revoke pending invitations.
The access grant is so sensitive that it requires a separate approval workflow or typed confirmation before the invite can be sent.
Problem it prevents
Inviting users changes access, billing, data exposure, and collaboration context, but products often hide who will receive the invite, what role they get, where they can go, whether approval is required, and how pending invitations can be tracked or revoked.
Pattern anatomy
What a strong implementation has to make clear
User need
A user with sufficient permission is adding another person to a workspace, organization, project, channel, repository, team, tenant, or shared resource.
Pattern promise
Provide an invitation workflow that verifies recipient identity, previews access scope and role, explains constraints and side effects, sends through a clear delivery channel, tracks pending and accepted outcomes, and supports resend, edit, cancel, expiry, and approval states.
Required state
Recipient entry or directory lookup state
Recovery path
A user gets admin or organization-wide access because the invite defaulted to the broadest role.
Access contract
Use labelled fields for recipient, role, scope, team, channel, message, and expiry.
Quality bar
The difference between expert and weak execution
Strong implementation
Specific, visible, recoverable
A workspace invite form accepts maya@example.com, labels the invite as Workspace member, shows default channels, explains billing impact, lets the inviter add a message, and shows the pending invite with resend and cancel actions.
An organization invitation asks for GitHub username or verified email, role, optional team, and repository access preview before sending.
An admin invites an external contractor as a single-channel guest, sees the one-channel limit, adds a note, sends the invite, then extends it when it is still pending after 30 days.
A repository owner enters an email that already has a pending organization invitation, updates the role, and resends without creating duplicate invites.
Weak implementation
Vague, hidden, hard to recover from
An Invite button immediately emails every typed address with Admin access and no review of workspace, channel, or billing scope.
A pending invite disappears after send, so admins cannot tell whether the user accepted, the link expired, or the email bounced.
A member tries to invite a contractor but learns after send that guests require admin approval and no request status is shown.
An invitation is accepted by the wrong account because the invite page never explained email verification or account matching.
UI guidance
Render invite user as an access-granting workflow with recipient identity, role or permission, team or channel scope, optional message, delivery method, expiry, pending status, resend, edit, cancel, and acceptance outcome.
Keep invitation lifecycle separate from account creation, object picking, permission recovery, bulk import, and profile setup: the inviter is authorizing another person to join or access a space, not creating their account, choosing an existing object alone, recovering their own denied access, importing records, or enriching a profile.
UX guidance
Use invite user when an authorized person needs to bring another person into a workspace, organization, project, channel, repository, team, tenant, or shared object.
Prevent accidental over-access by confirming recipient identity, access scope, role, billing or guest implications, invite expiry, and what the invited person can do before sending.
Implementation contract
What the implementation must handle
States
Recipient entry or directory lookup state
Role and access scope selection state
Guest, billing, external, or elevated-access warning state
Optional invite message state
Interaction
Recipient entry identifies who will receive the invitation and clears or flags unresolved recipients before send.
The invitation cannot be sent until required role, scope, and policy constraints are resolved.
The review state summarizes recipient, destination, role, scope, message, expiry, billing or guest implications, and approval requirement.
Sending creates a trackable invitation record with pending status rather than implying membership is active immediately.
Accessibility
Use labelled fields for recipient, role, scope, team, channel, message, and expiry.
Expose recipient validation, duplicate invite, policy warnings, billing warnings, and pending status as text associated with the relevant controls.
Do not rely on avatars, role colors, lock icons, or guest badges alone to communicate identity or access scope.
Make role, team, channel, resend, edit, cancel, extend, approve, deny, and copy-link controls keyboard reachable.
Review
Who will receive the invitation, and how is that identity verified or disambiguated?
What role, team, channel, repository, workspace, or organization scope will they get?
Does the invite create billing, guest, external sharing, admin, or data exposure consequences?
Is approval required, and can the requester track the approval outcome?
Interactive lab
Inspect the states before you copy the pattern
Invite a user with explicit access scope
Resolve a recipient, choose role and scope, review guest and billing impact, send an invitation, inspect pending status, resend, edit, cancel, handle approval-needed, expired, accepted, and duplicate states, and compare instant-member, broad-access, hidden-pending, duplicate-send, no-cancel, and leak failures.
Invite user
Interactive demo is ready
Launch the live UI/UX lab when you want to inspect states, keyboard behavior, and common failure modes.
State To Inspect
Recipient entry or directory lookup state
Keyboard / Access
Tab order follows recipient entry, resolved recipient chips, role, scope, guest or billing warnings, optional message, review, send, and pending actions.
Avoid Generating
Treating invitation sent as if the user is already a member.
GitHub supports invite role selection, team assignment, email delivery, pending acceptance, verified email constraints, and edit or cancel before acceptance.
GitHub supports viewing pending invitations, filtering by role or source, editing invitation role or team, and canceling before acceptance.
Full agent/debug reference
Problem Context
A user with sufficient permission is adding another person to a workspace, organization, project, channel, repository, team, tenant, or shared resource.
The invite may grant member, guest, admin, viewer, editor, channel, team, repository, enterprise, or external collaborator access.
Invitations may be sent by email, username, directory lookup, invite link, group sync, or admin request.
The invited person may need to accept, verify email, create or use an account, choose the correct identity, or wait for admin approval.
Pending invites may expire, be resent, edited, canceled, extended, duplicated, bounced, accepted, or declined.
Selection Rules
Choose invite user when the primary action is sending an invitation that grants another person future access after delivery or acceptance.
Use account creation when the current user is establishing their own credentials or persistent access.
Use object picker when the user is choosing an existing person or group record without sending a new invitation lifecycle.
Use permission recovery when the current user is blocked and needs to request access for themselves.
Use bulk import when admins are creating or updating many user records from structured data rather than sending a small number of trackable invitations.
Use profile setup when the invited or existing user is completing their visible identity after access exists.
Require explicit review for elevated roles, external collaborators, billable seats, guests, invite links, broad channels, or organization-wide access.
Show pending, accepted, expired, failed, approval-needed, duplicate, and canceled states as invitation states rather than generic success or error messages.
Let authorized inviters edit role or scope, resend or extend, and cancel pending invitations before acceptance where the platform supports it.
Required States
Recipient entry or directory lookup state
Role and access scope selection state
Guest, billing, external, or elevated-access warning state
Optional invite message state
Review before send state
Sent and pending state
Admin approval requested state
Duplicate or already invited state
Expired or bounced invitation state
Resend, extend, edit, or cancel pending invitation state
Accepted invitation state
Interaction Contract
Recipient entry identifies who will receive the invitation and clears or flags unresolved recipients before send.
The invitation cannot be sent until required role, scope, and policy constraints are resolved.
The review state summarizes recipient, destination, role, scope, message, expiry, billing or guest implications, and approval requirement.
Sending creates a trackable invitation record with pending status rather than implying membership is active immediately.
Duplicate invite attempts reuse, update, or surface the pending invitation instead of silently sending multiple conflicting invitations.
Resend, extend, edit, cancel, approve, and deny actions update the pending invitation record and preserve audit-relevant context.
Accepted or expired invitations stop showing unsafe send controls and route to membership, retry, or cleanup actions.
Validate email, username, domain, duplicate pending invite, existing membership, role eligibility, guest plan support, channel or team constraints, and external sharing policy before send.
Show role and scope preview before sending, especially for admin, owner, guest, external collaborator, organization-wide, or billable access.
Implement pending invitation list, accepted state, expired state, resend, extend, edit role or team, cancel, approval request, denial, and notification return paths.
Do not leak restricted workspace, project, or repository details in invite emails or pending records beyond what the recipient is allowed to know.