Staff
Open Settings → Staff in Thermal →
What it's for
Staff is the roster of everyone with a login to your company — owners, office managers, dispatchers, and field technicians. It is where a person gets added to the system, given a role, priced for job costing, and (for office roles) removed when they leave. A technician's own record here is what makes them assignable on the dispatch board.
Reach it from People → Staff in the sidebar, at /staff.
Tabs
The list has no tabs. A row filter along the top narrows by role instead — All roles plus one chip per role in the system. Opening a person takes you to their own record, which does have tabs (Overview and Credentials).
Panels and controls
- Search matches name, email, or phone.
- The list shows Name (with a small amber dot if a credential is expiring or expired), Role, Credentials (count on file), Commission plan, Status, Last active, and row actions.
- Add staff opens a form: First name, Last name, Role, Branch (new hires only), Email, Phone, Hire date, Base rate ($/hr), Burdened labor cost ($/hr) — wage plus payroll taxes, benefits, and overhead, used for job-cost margins — Labor level, and Status (Active or On leave).
- Resend invite appears only on a person who hasn't signed in yet and has an email on file.
- Remove takes someone off the roster and revokes their login. It is hidden for the company's last owner — that seat can't be removed without promoting someone else to owner first.
- A seat-capacity banner is always visible. Clerk is the authority: used seats count accepted memberships plus outstanding invitations, matching Clerk's quota. A zero Clerk limit means unlimited. When the company is at the cap, the banner tells you that Thermal support raises your company's membership limit and to contact us. There is no seat purchase: Plan & usage is a consumption meter (counted jobs), and membership caps are set by Thermal support on the Clerk org, not from that page.
- Branch access sits on a person's own record, in a company with more than one branch. On a technician, an owner or office manager can give them every branch (technicians see only their home branch by default). On an office manager or dispatcher, an owner can limit them to their home branch, so they see only that branch's customers, agreements and jobs. Reset to default lifts the limit. The person can't widen it themselves, in the app or through the API, and moving them to the owner or technician role lifts it. Owners can't be limited from here. A limited office manager can still add and edit technicians, but can't add or edit office managers or dispatchers, give a technician every branch, or make an agent access key that reaches beyond their own branch.
- No staff yet is the empty state, prompting you to add owners, dispatchers, and technicians.
What it accepts
| Field | Format | Required | Rule |
|---|---|---|---|
| First name | Free text | Yes | "First name is required."; "First name is too long." |
| Last name | Free text | No | "Last name is too long." |
| Role | Pick a role | Yes | "Please select a valid role."; only an owner can assign the owner role; you can't change your own role |
| Email address | No | "That email doesn't look right."; "Email is too long."; "A staff member with that email already exists." | |
| Phone | Free text | No | "Phone is too long." |
| Hire date | Date | No | "Hire date is not a valid date." |
| Base rate ($/hr) | Dollars | No | "Base rate must be a positive number." |
| Burdened labor cost ($/hr) | Dollars | No | "Burdened labor cost must be a positive number." |
| Labor level | Free text | No | "Labor level is too long." |
| Status | Active or On leave | Yes |
Removing the company's only owner is blocked: "This is your last owner — you can't deactivate them." Resending an invite to someone already signed in is blocked: "This staff member is already active — there is no invite to resend." Adding staff past your company's membership limit is blocked: "You're at your company's membership limit ({used} of {limit} seats used). Thermal support raises your company's membership limit — contact us and we'll take care of it." If Clerk rejects the invite at the quota after the pre-check, the new staff row is rolled back. A transient Clerk outage keeps the staff row and shows that the invitation was not sent so Resend invite can be used later.
How to configure it
- Settings → This company → Plan carries no seat or membership data. The banner on this page is the only place capacity shows, read live from Clerk. Thermal support manages the same authoritative Clerk limit from Publisher; there is no separate database seat-cap value to drift.
- Settings → Labor rates defines the labor-level scale a Labor level entry matches against, for pay/cost when a person's own base rate and burdened cost are left blank.
- Commissions is where a staff member's commission plan is assigned — the plan name shown here links there.
- Credentials is where trade credentials are added; the count and expiring-soon dot on this list come from that page's records.
Who can see it
This screen sits behind the Staff area.
Owners and office managers can open it. Dispatchers and technicians cannot — a technician's own info and credentials live in the field app, not this roster. The gate is checked on the server, not just hidden in the sidebar, so a direct link does not get around it. Only an owner can limit an office manager or dispatcher to their home branch.
The full role matrix is on Roles & permissions.