Managing Members
Complete guide to inviting, managing, and removing team members in CodeCourier projects, including the invitation flow and bulk operations.
The Members page is your central hub for managing who has access to a project. From here, you can invite new team members, review their roles and status, change permissions, and remove members when needed. Only users with the Owner or Admin role can manage project membership.
Viewing the Member List
Navigate to the Members page from the sidebar under the Insights group. The page displays a table with all current members and pending invitations, sorted with owners first, then admins, then members, with pending invitations grouped at the bottom. For each member, the table shows:
- Name - The member's display name with their avatar. Hover to see additional profile details and who invited them.
- Email - The email address associated with their account
- Role - Color-coded badge showing Owner (amber), Admin (blue), or Member (gray)
- Status - Either "Accepted" (green) or "Pending" (orange with clock icon)
- Joined - The date the member joined the project (displays "--" for pending invitations)
- Actions - Dropdown menu with role management and removal options (admin/owner only)
Inviting Team Members
Open the invite dialog
Click the Invite Memberbutton in the page header. This opens a dialog with fields for the invitee's email and role assignment.
Enter the email address
Type the email address of the person you want to invite. The email must belong to an existing CodeCourier user account - the system looks up the user by email. If no account is found, you will see a "No user found with that email address" error. The person must sign up for CodeCourier first.
Select a role
Choose the role for the new member:
- Admin - Can manage members, configure settings, and perform all project operations
- Member - Can use all project features but cannot manage members or critical settings
Note that the Owner role cannot be assigned during invitation. Only the current owner can transfer ownership through role management.
Send the invitation
Click Send Invite to create the membership. The system validates the email, checks that the user is not already a member, and creates a pending membership record. The invitee will see the invitation in their dashboard.
Invitation Errors
- "No user found with that email address" - The email is not registered in CodeCourier
- "User is already a member or has a pending invitation" - A membership already exists
Accepting and Declining Invitations
When you are invited to a project, the invitation appears in your dashboard. You have two options:
Accept
Accepting an invitation updates your membership status from "pending" to "accepted" and records the acceptance timestamp. You immediately gain access to all project resources according to your assigned role.
Decline
Declining an invitation permanently deletes the membership record. The project admin can re-invite you later if needed. Declining does not create any notification for the project team.
You can view all your pending invitations across all projects using thelistPendingInvitations query, which returns enriched invitation details including the project name and the name of the person who invited you.
Managing Existing Members
Changing Roles
Only project Ownerscan change member roles. From the member's action menu, select Change Role and choose the new role. Role changes take effect immediately and are reflected in real-time across all connected clients.
Role change safeguards:
- An owner cannot demote themselves if they are the only owner. Another owner must be assigned first.
- Admins cannot promote themselves to owner - only existing owners can do this.
- Role changes do not require re-authentication; the new permissions apply immediately.
Removing Members
Owners and admins can remove members from the project. Click the action menu for the member and select Remove Member. A confirmation dialog appears before the removal is executed.
Removal safeguards:
- The last remaining owner cannot be removed. Transfer ownership first.
- Non-owners cannot remove owners - only other owners can.
- Removing a member deletes their membership record permanently and decrements the project's member counter.
Cancelling Pending Invitations
If an invitation was sent in error, owners and admins can cancel it before the invitee accepts. Select Cancel Invitationfrom the pending member's action menu. This permanently deletes the pending membership record.
Bulk Operations
The member table supports bulk selection via checkboxes. Select multiple members and use the bulk action bar to remove them all at once. The bulk remove operation handles both active members and pending invitations - for pending members it cancels the invitation, for active members it removes their membership.
Irreversible Actions
Context Menu Support
In addition to the dropdown action menu, the member table supports right-click context menus on each row. Right-clicking a member shows the same options as the dropdown: View Profile, Change Role, and Remove Member (or Cancel Invitation for pending members). This provides a faster workflow for power users managing large teams.
Programmatic Member Management
All member management operations are available through Convex mutations:
import { api } from "@/convex/_generated/api";
import { useMutation, useQuery } from "convex/react";
// List all members
const members = useQuery(api.projectMembers.listByProject, { projectId });
// Invite by email
const addMember = useMutation(api.projectMembers.addMemberByEmail);
await addMember({ projectId, email: "user@example.com", role: "member" });
// Accept invitation
const accept = useMutation(api.projectMembers.acceptInvitation);
await accept({ projectId });
// Change role (owner only)
const updateRole = useMutation(api.projectMembers.updateRole);
await updateRole({ projectId, userId, role: "admin" });
// Remove member
const remove = useMutation(api.projectMembers.removeMember);
await remove({ projectId, userId });