Product pages

People

Invite teammates, pending invites, roles display, and General access — every control, including what is not persisted.

Panel

Sidebar: Project → People
Header: PeopleInvite teammates to collaborate on this project.

People with access

ControlBehavior
InviteOpens InviteMembersModal for this project
LoadingLoading people…
Empty tableNo people yet.

Table

Sortable headers:

ColumnSort
UserName / email (current user pinned first)
RoleRole string

Rows include members and pending invites.

CellDetail
UserAvatar, display name, email; (you) on your row
RoleDropdown: Project owner / Member
Invite row statusPill Invite pending; on hover: Resend, revoke (trash)

Footer: All people loaded

Role dropdown

Changing the role dropdown calls a no-op handler. Roles are displayed but cannot be changed from this UI today.

Pending invites

ControlAPI
ResendPOST /api/projects/:id/invites/:inviteId with browser timezone
Revoke (trash)DELETE /api/projects/:id/invites/:inviteId

General access

Row title General access with a select:

OptionDescription shown when selected
RestrictedOnly people with access can open with the link
Anyone with the linkAnyone on the internet with the link can view
Anyone from @{domain}Shown when a work email domain or project URL domain can be inferred; Anyone from @{domain} can view with the link

selection updates local UI state only — it is not saved to the server from this panel.

Invite lifecycle

  1. Owner/member clicks Invite and sends addresses from the modal.
  2. Invitee signs in and accepts.
  3. Expired or revoked invites require a new invite.