1 Team List
2 Invite
3 Member Detail
4 Leaderboard
5 Performance
6 Roles
7 HR Portal
8 Onboarding
9 Documents
10 Earnings
Team List
9:41
Team
All (8)
Active (6)
Pending (1)
Inactive (1)
Pending Invites (2)
sarah.johnson@gmail.com
Crew Lead · Sent Feb 20
PENDING
mike.rivera@outlook.com
Worker · Sent Feb 22
PENDING
JC
James Callahan
Owner · Last active today
ACTIVE
MR
Marcus Reeves
Lead Tech · Last active today
ACTIVE
TW
Tony Washington
Estimator · Last active yesterday
ACTIVE
KP
Kevin Patterson
Dispatcher · Last active Feb 21
ACTIVE
LD
Lisa Donovan
Office Manager · Last active Feb 20
ACTIVE
RB
Ryan Brooks
Apprentice · Pending onboarding
PENDING
DP
David Perez
Worker · Inactive since Jan 15
INACTIVE

TeamMemberListItem, TeamInviteCard

useQuery(api.teams.contractorTeamQueries.listMembers)

Invite Member
9:41
Invite Team Member
Email Address
sarah.johnson@gmail.com
An invitation email will be sent to this address
Role Type
Standard Role
Custom Role
Select Standard Role
Crew Lead
Available standard roles: Manager, Dispatcher, Crew Lead, Worker, Estimator, Project Manager, Safety Coordinator, Office Manager
Send Invitation
Cancel

Input, Select, Button

useMutation(api.teams.contractorTeams.inviteMember)

Member Detail
9:41
Team Member
MR
Marcus Reeves
marcus.reeves@callahan-hvac.com
(330) 555-0147
LEAD TECH
Active
Change Status
Active
Activity
Invited Jan 5, 2026
Joined Jan 8, 2026
Last Active Feb 24, 2026
Documents
View Member Documents
Remove from Team

Avatar, RoleBadge, StatusIndicator

useQuery(api.teams.contractorTeamQueries.getMember)


Leaderboard
9:41
Team Leaderboard
Revenue
Jobs
Avg Ticket
Close Rate
1
MR
Marcus Reeves
$14,850
+12%
2
TW
Tony Washington
$12,320
+8%
3
KP
Kevin Patterson
$9,710
0%
4
LD
Lisa Donovan
$7,450
-5%
5
RB
Ryan Brooks
$3,200
+22%

Avatar, Card, numbered rank badges

useQuery(api.teams.technicianPerformance.getTeamLeaderboard)

Performance Detail
9:41
Performance
MR
Marcus Reeves
Lead Tech
Rank #1 of 5
Today
This Week
This Month
This Week Revenue
$14,850
+12% vs last week
12
Jobs
$1,238
Avg Ticket
84%
Close Rate
4.8
Rating
Last 30 Days
10
11
12
13
14
15
16
17
18
19
20
21
22
23
View Full Profile

StatCard, MetricComparison

useQuery(api.teams.technicianPerformance.getTechnicianScorecard)


Custom Roles
9:41
Custom Roles
Show inactive roles
Senior Estimator ACTIVE
Full estimating access with CRM permissions
6 permissions · 2 members
Junior Tech ACTIVE
Limited access for apprentice-level technicians
3 permissions · 1 member
Fleet Supervisor ACTIVE
Vehicle management and dispatch override access
8 permissions · 1 member

CustomRoleCard, Switch

useQuery(api.teams.contractorTeamQueries.listCustomRoles)

Create Role
9:41
Create Role
Role Information
Role Name *
Senior Estimator
Description
Full estimating access with CRM integration permissions
Permissions (4 selected)
Select the permissions this role should have
Jobs
View all jobs
Read access to job listings
Create estimates
Generate and submit estimates
Delete jobs
Remove jobs from system
CRM
View contacts
Access customer contact info
Edit contacts
Modify customer records
Create Role
Cancel

PermissionGroup, Input

useMutation(api.teams.contractorTeams.createCustomRole)

Role Detail
9:41
Custom Role
Senior Estimator
Full estimating access with CRM integration permissions
ACTIVE
Role is active
Inactive roles cannot be assigned to new members
Permissions (6)
View all jobs
Jobs
Create estimates
Jobs
View contacts
CRM
Edit contacts
CRM
View team metrics
Analytics
Export reports
Analytics
Details
Created Jan 15, 2026
Last Updated Feb 10, 2026
Delete Role

Switch, Badge

useQuery(api.teams.contractorTeamQueries.getCustomRole)


HR Portal
9:41
HR Portal
8
Total Employees
6
Active
1
Pending Onboarding
1
Terminated
Document Alerts
W-9 Tax Form
Ryan Brooks
Expired
EPA Lead Cert
Tony Washington
5 days
Vehicle Insurance
Kevin Patterson
18 days
All
Active
Inactive
Pending
MR
Marcus Reeves
marcus.reeves@callahan-hvac.com
ACTIVE ONBOARDED
100%
Docs
Terminate
RB
Ryan Brooks
ryan.brooks@gmail.com
PENDING DOCS PENDING
33%
Docs
Terminate

StatCard, StatusBadge, OnboardingBadge

useQuery(api.teams.hrPortalQueries.getHRStats)

Terminate Employee
9:41
HR Portal

Modal overlay with type selection chips

useMutation(api.teams.hrPortal.terminateMember)


My Onboarding
9:41
My Onboarding
Welcome, Ryan!
Complete the documents below to finish your onboarding.
Documents Pending
2 of 6 documents need your attention
Your Progress
4 of 6 complete 67%
Documents
W-9 Tax Form
Required · Signed Jan 20
Employment Agreement
Required · Signed Jan 20
Non-Disclosure Agreement
Required · Signed Jan 22
Safety Training Cert
Required · Approved Jan 25
EPA Lead Certification
Required · Action needed
SIGN
Direct Deposit Form
Optional · Action needed
SIGN
Need Help?
Contact your manager if you have questions about any of these documents or encounter issues completing them.

OnboardingProgressBar, OnboardingStatusCard, DocumentCard

useQuery(api.teams.teamMemberDocumentQueries.myOnboarding)

Member Documents
9:41
Member Documents
Pending Documents
Ryan Brooks — 2 documents remaining
Progress
4 of 6 complete 67%
Pending Your Approval
EPA Lead Certification
Signed Feb 22, 2026
Reject
Approve
All Documents
W-9 Tax Form
Required · Approved
DONE
Employment Agreement
Required · Approved
DONE
NDA
Required · Approved
DONE
Safety Training
Required · Approved
DONE
EPA Lead Cert
Required · Needs review
REVIEW
Direct Deposit Form
Optional · Not signed
PENDING
Bypass Onboarding
Use this to grant full access without completing documents. A reason is required.

DocumentCard, AlertDialog

useQuery(api.teams.teamMemberDocumentQueries.listMemberDocuments)


CSV Bulk Import
9:41
Bulk Import
Drop CSV or tap to browse
RFC 4180 compliant
Preview
Name
Email
Role
Status
Sarah Chen
s.chen@email.com
Crew Lead
VALID
Mike Torres
m.torres@co.com
Worker
VALID
Amy Reeves
a.reeves@co.com
Estimator
DUPLICATE
Import 2 of 3

CSVUploader, ImportPreviewTable

useMutation(api.teams.contractorTeams.bulkImportMembers)

Bulk Review Modal
9:41
Review Pending
Pending Submissions
4 PENDING
Select All
JD
Jake Dawson
Crew Lead
NP
Nina Patel
Estimator
RL
Ray Lombardi
Worker
TS
Tanya Stone
Dispatcher
Approve Selected (3)
Reject

BulkReviewList, SelectableCard

useMutation(api.teams.contractorTeams.bulkApproveMembers)

Auto-Approve Toggle
9:41
Team Settings
Auto-Approve New Members
Automatically approve team members who match your invitation criteria
Approval Rules
Email domain match
Enabled
Role pre-assigned
Enabled
Requires background check
Disabled

ToggleSwitch, ApprovalRuleCard

useMutation(api.teams.contractorTeams.updateAutoApprove)

Progress by Role Groups
9:41
Pipeline Tracker
Pipeline Stages
Not Invited
Invited
Started
Approved
Technicians
8 total
2 3 1 2
Sales Reps
5 total
0 1 2 2
Managers
3 total
0 0 1 2

PipelineChart, RoleGroupCard

useQuery(api.teams.contractorTeamQueries.getPipelineByRole)


My Earnings
9:41
My Earnings
This Month
Last Month
This Year
All Time
Total Earned
$15,234
42 commissions
Paid
$9,000
18 paid
Pending Approval
$2,100
5 pending
Approved
$4,134
19 ready
By Commission Type
SALES 12 commissions
$8,500
SERVICE 8 commissions
$4,200
BONUS 5 commissions
$2,534
Recent Commissions
All Pending Paid
Sales Commission — Job #4521
Mar 1, 2026
$850.00
Pending
Service Bonus — HVAC Install
Feb 25, 2026
Job completion bonus
$1,200.00
Approved
Sales Commission — Job #4498
Feb 20, 2026
$675.00
Paid
Load More

Team member earnings dashboard with period filters, type breakdown, and commission history.

useQuery(api.commissions.getMyEarnings)


Data Architecture

Convex Queries

  • contractorTeamQueries.listMembers — team list with status filter
  • contractorTeamQueries.listPendingInvites — pending invitations
  • contractorTeamQueries.myTeamMember — current user permissions
  • contractorTeamQueries.getMember — member detail by ID
  • contractorTeamQueries.listCustomRoles — custom roles list
  • contractorTeamQueries.getCustomRole — role detail + permissions
  • contractorTeamQueries.listPermissions — all available permissions
  • technicianPerformance.getTeamLeaderboard — ranked tech list
  • technicianPerformance.getTechnicianScorecard — individual KPIs
  • technicianPerformance.getTechnicianHistory — 30-day chart data
  • hrPortalQueries.getHRStats — dashboard stats
  • hrPortalQueries.listEmployeesForHR — paginated employee list
  • hrPortalQueries.listExpiringDocuments — doc alerts
  • hrPortalQueries.getTerminationHistory — audit trail
  • teamMemberDocumentQueries.myOnboarding — self-service onboarding
  • teamMemberDocumentQueries.listMemberDocuments — manager doc view
  • teamMemberDocumentQueries.getOnboardingProgress — completion %
  • commissions.getMyEarnings — period-filtered earnings + commission list

Convex Mutations

  • contractorTeams.inviteMember — email invite with role
  • contractorTeams.updateMember — status change
  • contractorTeams.removeMember — remove from team
  • contractorTeams.createCustomRole — new role + perms
  • contractorTeams.updateCustomRole — toggle active, edit perms
  • contractorTeams.deleteCustomRole — delete role
  • hrPortal.terminateMember — terminate with type/reason
  • hrPortal.reactivateMember — restore terminated employee
  • teamMemberDocuments.approveDocument — manager approval
  • teamMemberDocuments.rejectDocument — reject with reason
  • teamMemberDocuments.bypassOnboarding — skip docs with reason

Key Tables

  • contractorTeamMembers — member status, role, permissions
  • contractorCustomRoles — custom role definitions
  • contractorPermissions — available permission catalog
  • contractorRolePermissions — role-permission mapping
  • contractorTeamInvites — pending invitations
  • teamMemberDocuments — onboarding documents per member
  • contractorDocumentTemplates — company doc templates

Components

  • TeamMemberListItem — avatar + name + role + status
  • TeamInviteCard — pending invite display
  • RoleBadge — standard/custom role pill
  • StatusIndicator — dot + label status
  • CustomRoleCard — role with perm count
  • PermissionGroup — collapsible perm category
  • OnboardingProgressBar — % complete
  • OnboardingStatusCard — status with accent border
  • DocumentCard — doc with status icon
  • EmptyState — icon + title + description
  • MetricComparison — delta arrow + %
  • StatCard / StatCardRow — metric tiles
Roster & Invitations
9:41
Team Management
Team Roster
12
Active
3
Pending
Members
Jake Martinez
Lead Installer
Active
Sarah Kim
Project Manager
Active
Tom Wilson
Apprentice
Invited
Member Detail — Jake Martinez
4.8
Rating
47
Jobs
98%
On Time
Role
Lead Installer
Hired
Jan 2024
Status
Active
Performance & Roles
9:41
Performance & Roles
Leaderboard
1
Jake Martinez
4.8
2
Sarah Kim
4.7
3
Mike Torres
4.5
Custom Roles
Lead Installer
Full access • 3 members
Technician
Limited access • 6 members
Apprentice
View only • 3 members
Team Performance
HR & Onboarding
9:41
HR & Onboarding
HR Portal
Onboarding Complete
9 of 12 members
Documents Pending
4 items need signatures
Next Review Cycle
April 1, 2026
Documents
W-4 Forms
12 of 12 complete
I-9 Verification
3 pending verification
NDAs
12 of 12 signed
Earnings Overview
$84K
Payroll MTD
+12%
vs Last Month
Team Command Center
https://app.3bids.io/contractor/team
3Bids
Roster ⌘1
Invite ⌘2
Leaderboard ⌘3
Roles ⌘4
HR Portal ⌘5
Documents ⌘6
Earnings ⌘7
MK
Mike Kowalski
Contractor
Settings ⌘,

Team Command Center

12
Active Members
3
Pending
4.6
Avg Rating
$84K
Payroll MTD
Leaderboard
1
Jake Martinez
Lead Installer • 4.8 rating
2
Sarah Kim
Project Manager • 4.7 rating
3
Mike Torres
Lead Roofer • 4.5 rating
Performance Trend
HR & Documents
https://app.3bids.io/contractor/team/hr
3Bids
Roster ⌘1
Invite ⌘2
Leaderboard ⌘3
Roles ⌘4
HR Portal ⌘5
Documents ⌘6
Earnings ⌘7
MK
Mike Kowalski
Contractor
Settings ⌘,

HR & Documents

75%
Onboarded
4
Docs Pending
36
Total Docs
0
Expired
Onboarding Status
9 members fully onboarded
2 in progress
1 not started
Document Tracker
W-4 & I-9 Forms
All collected
4 NDAs Pending
Sent for signature