1 Browse Categories
2 Edit Labels
3 Preview Changes
4 Manage & Analyze
Customize
Terminology Overview
9:41
Terminology
7 Labels Customized
Across 3 categories
Active
Categories
Jobs & Bids
4 labels, 2 customized
2
Team & Roles
5 labels, 3 customized
3
Customers
3 labels, 0 customized
0
Financial
4 labels, 2 customized
2
Scheduling
3 labels, 0 customized
0
Reset All to Defaults

TerminologyOverview screen. Categories with customization count badges. Terracotta-filled IconCircle (style B) for categories with custom labels.

useQuery(api.terminology.getCategories)

Category Detail — Jobs & Bids
9:41
Jobs & Bids
Customize how job-related terms appear throughout your dashboard. Default labels shown with your custom replacements.
Label Mappings
Job Work Order
"New Work Order" "3 Work Orders"
Bid Estimate
"Submit Estimate" "Your Estimates"
Contract Default
Scope of Work Default
Reset Category Preview All

CategoryDetail component. Shows default vs custom labels with inline previews. Style B for customized, style D for default labels.

useQuery(api.terminology.getLabelsByCategory)

Edit Label
9:41
Edit Label
Current Default
Job
Custom Label
10 / 30 characters
Plural Form
Used when referring to multiple items
Live Preview
Card Header
Kitchen Remodel Work Order
Posted 2h ago
Navigation Tab
Home
Work Orders
Chat
Action Button
New Work Order
Cancel Save Label

EditLabel modal/screen. Character limit, auto-plural, and 3 live context previews showing how the label appears in cards, nav, and buttons.

useMutation(api.terminology.updateLabel)

Preview
Preview Mode
9:41
Preview Changes
Default
Custom
Sample Dashboard
Before
My Jobs
3 Active Bids
Kitchen Remodel
Job #1042
Open
Roof Repair
Job #1043
Bid Sent
After
My Work Orders
3 Active Estimates
Kitchen Remodel
Work Order #1042
Open
Roof Repair
Work Order #1043
Estimate Sent
Navigation Preview
Default Nav
Home
Jobs
Bids
Custom Nav
Home
Orders
Estimates
Changes Summary
Labels changed 7
Screens affected 23
Categories modified 3
Apply All Changes

PreviewMode component. Split before/after comparison with toggle to switch views. Shows impact summary of all changes.

useQuery(api.terminology.getPreview) | useMutation(api.terminology.applyAll)

Category Detail — Financial
9:41
Financial
Customize financial terms to match your accounting software and internal language. Changes apply to invoices, reports, and dashboards.
Label Mappings
Invoice Bill
"Send Bill" "Bill History"
Payout Payment
"Pending Payment"
Commission Default
Escrow Default
Financial labels appear in reports
Custom labels will be used in exported reports, invoices sent to homeowners, and your financial dashboard.

CategoryDetail for financial terms. Same component, different category data. Info card explains where labels appear externally.

useQuery(api.terminology.getLabelsByCategory, { category: "financial" })

Management
Bulk Import
9:41
Bulk Import
Upload a CSV to apply multiple terminology changes at once. Download the template to see the required format.
Drop CSV file here
or tap to browse files
Download Template
Preview — terminology_labels.csv
12 labels parsed Complete
Default Custom Status
Job Work Order Valid
Bid Estimate Valid
Invoice Bill Valid
Technician Field Tech Valid
Scheduler Sched Short
1 label may be too short for navigation tabs. Review before applying.
Cancel Apply All (12)

BulkImport screen. CSV upload with drag-and-drop, mapping table preview, validation warnings for short labels or conflicts.

useMutation(api.terminology.bulkImport) | parseCSV utility

Team Terminology
9:41
Team Labels
Different roles see different labels. A manager sees "Pipeline," a technician sees "My Work." Configure what each role sees.
Manager
Technician
Sales Rep
Manager View
Dashboard Command Center
Jobs Pipeline
Team Default
Comparison
Label Mgr Tech Sales
Dashboard Command My Work CRM
Jobs Pipeline Tasks Leads
Customers Clients Default Accounts
Role-specific labels reduce confusion
Each team member sees terminology that matches their daily workflow and responsibilities.

TeamTerminology screen. Role tabs for per-role overrides with comparison table showing what each role sees for each label.

useQuery(api.terminology.getByRole) | useMutation(api.terminology.updateRoleLabel)

Terminology Analytics
9:41
Label Analytics
Custom Labels
Currently active
7
Screens Affected
Using custom labels
23
Confusion Tickets
Label-related support
3
Most Changed Labels
Changes in last 90 days
Job
12x
Bid
8x
Invoice
5x
Payout
3x
Dashboard
2x
Confusion Signals
"Work Order" confusion
2 support tickets from team members who couldn't find "Jobs" after label change.
Last ticket: 3 days ago
"Estimate" vs "Quote"
1 team member asked which term to use verbally with homeowners.
Last ticket: 1 week ago
Recommendations
Standardize "Work Order"
This label has caused the most support tickets. Consider adding an onboarding tooltip or reverting to "Job".
Sync with ServiceTitan
Your ServiceTitan account uses "Work Order." Matching labels reduces context-switching for your team.

TerminologyAnalytics screen. Tracks label usage, confusion signals from support tickets, and AI-powered recommendations to standardize.

useQuery(api.terminology.getAnalytics) | useQuery(api.support.getLabelTickets)

Data Architecture

Hooks & Queries

Terminology Queries
  • api.terminology.getCategories — All label categories with customization counts
  • api.terminology.getLabelsByCategory — Labels for a specific category with default/custom pairs
  • api.terminology.getPreview — Before/after preview data for all custom labels
  • api.terminology.getByRole — Per-role label overrides for team terminology
  • api.terminology.getAnalytics — Usage metrics, change frequency, confusion signals
Terminology Mutations
  • api.terminology.updateLabel — Set custom label for a default term (singular + plural)
  • api.terminology.resetLabel — Revert single label to default
  • api.terminology.resetCategory — Revert all labels in a category
  • api.terminology.resetAll — Revert all custom labels company-wide
  • api.terminology.bulkImport — Apply CSV-parsed label mappings in bulk
  • api.terminology.updateRoleLabel — Set role-specific label override
  • api.terminology.applyAll — Apply all staged preview changes

Schema & Types

terminologyLabels Table
  • contractorIdv.id("contractorUsers")
  • categoryv.string() (jobs_bids, team_roles, customers, financial, scheduling)
  • defaultLabelv.string() (platform default: "Job", "Bid", etc.)
  • customLabelv.optional(v.string()) (null = use default)
  • pluralLabelv.optional(v.string()) (auto-generated if omitted)
  • roleOverridesv.optional(v.object(...)) (per-role label map)
  • changeCountv.number() (analytics: how many times changed)
  • lastChangedAtv.number() (timestamp)
Key Interfaces
  • TerminologyCategory — { id, name, icon, labelCount, customizedCount }
  • LabelMapping — { defaultLabel, customLabel, pluralLabel, category }
  • RoleOverride — { role, labels: Record<string, string> }
  • BulkImportRow — { defaultLabel, customLabel, status: valid | warning | error }
  • LabelAnalytics — { label, changeCount, confusionTickets, lastChanged }

Components

Screen Components
  • TerminologyOverview — Category list with customization counts and search
  • CategoryDetail — Label mapping list with inline previews per category
  • EditLabel — Modal/screen with input, char limit, live context previews
  • PreviewMode — Split before/after comparison with toggle and impact summary
  • BulkImport — CSV upload, mapping table, validation, apply all
  • TeamTerminology — Role tabs with per-role overrides and comparison table
  • TerminologyAnalytics — Metrics, bar charts, confusion signals, recommendations
Shared Components Used
  • IconCircle — Styles B (filled), D (outline), F (white+terracotta), G (dark bg)
  • Card — All label mapping rows and metric tiles
  • SearchBar — Label search on overview screen
  • Button — variant="secondary" for all CTAs
  • Input — Custom label entry with character limit
  • ScreenLayout — Terracotta header with back button
  • EmptyState — When no custom labels configured yet
Integration Points
  • useTerminology() hook — Global label resolver consumed by all screens
  • t("Job") — Inline label function returns custom or default label
  • t.plural("Job") — Returns "Work Orders" or "Jobs" based on config
  • CSV parsing via papaparse or built-in parser
  • Analytics fed by api.support.getLabelTickets for confusion metrics
  • ServiceTitan / QuickBooks sync for external label matching

Design References

Research Sources
  • Salesforce Custom Labels — Enterprise-grade label management with translation support
  • HubSpot Property Customization — Per-object property naming with preview
  • Monday.com Column Naming — Inline rename with instant propagation
  • Notion Property Labels — Minimal UI for property customization
  • ServiceTitan Custom Fields — Trade-specific terminology for HVAC, plumbing, electrical
Categories + Label Editor
9:41
Terminology
6
Categories
42
Custom Labels
All Modified Default
Jobs & Bids
12 labels · 8 customized
Financial
10 labels · 5 customized
Team & Roles
8 labels · 3 customized
Communication
6 labels · 2 customized
Settings
4 labels · 0 customized
Reports
2 labels · 0 customized
Jobs & Bids
12 labels · 8 customized
Label Mappings
Default
Job
Custom
Work Order
Default
Bid
Custom
Estimate
Default
Poster
Custom
Client
Default
Contract
Custom
Agreement
Default
Scope of Work
Unchanged
Live Preview + Bulk Import
9:41
Preview & Import
Live Preview Mode
See how labels appear in context
Before & After
Default
Active Jobs
3 open bids from posters
Kitchen Remodel Job
Bid: $18,500 · Contract pending
Custom
Active Work Orders
3 open estimates from clients
Kitchen Remodel Work Order
Estimate: $18,500 · Agreement pending
Affected Screens
Dashboard
4 labels
Jobs List
3 labels
Bid Detail
2 labels
Messages
1 label
Import Method
CSV Upload JSON Template
Drop CSV file here
or click to browse
Industry Templates
HVAC
Plumbing
Electrical
General Contractor
Import History
3
Imports
42
Labels Set
Team Settings + Terminology Analytics
9:41
Team & Analytics
Visibility Settings
Apply to all members
Client-facing labels
Email/SMS templates
Per-Role Overrides
Admin
Sees all custom labels
Full
Manager
Jobs, bids, financial labels
Full
Technician
Jobs labels only
Partial
Sales Rep
Client-facing labels
Partial
7D30D90D
Customization by Category
Jobs
8/12
Financial
5/10
Team
3/8
Comms
2/6
Settings
0/4
Adoption Metrics
42
Custom Labels
93%
Adoption Rate
18
Screens Affected
+12%
Team Efficiency
Recent Changes
"Bid" renamed to "Estimate"
By Mike K. · 2 days ago
HVAC template imported
By Mike K. · 5 days ago
"Job" renamed to "Work Order"
By Mike K. · 1 week ago
Terminology — Label Manager
https://app.3bids.io/contractor/settings/terminology
3Bids
Labels ⌘1
Preview ⌘2
Import ⌘3
Team ⌘4
Analytics ⌘5
MK
Mike Kowalski
Contractor
Settings ⌘,
Terminology Manager
6
Categories
42
Custom Labels
93%
Adoption Rate
18
Screens Updated
All Categories Jobs & Bids Financial Team Comms
Default
Custom
Category
Context
Actions
Job
Work Order
Jobs
Dashboard, job list, detail screens
Bid
Estimate
Jobs
Bid creation, bid list, notifications
Poster
Client
Jobs
All client-facing references
Contract
Agreement
Jobs
Contract signing, detail screens
Escrow
Payment Hold
Financial
Payment screens, escrow status
Scope of Work
Jobs
Unchanged — using default
Terminology — Analytics & Import
https://app.3bids.io/contractor/settings/terminology/analytics
3Bids
Labels ⌘1
Preview ⌘2
Import ⌘3
Team ⌘4
Analytics ⌘5
MK
Mike Kowalski
Contractor
Settings ⌘,
Analytics & Import
7D30D90DAll
Customization by Category
Jobs
8/12
Financial
5/10
Team
3/8
Comms
2/6
Settings
0/4
Team Adoption
93
%
Adoption Rate
12 of 12 team members
Excellent
+12%
Team Efficiency
-8%
Confusion Rate
Industry Templates
HVAC
Applied
Plumbing
Electrical
Change Log
Bid to Estimate
2 days ago
HVAC template
5 days ago
Job to Work Order
1 week ago
Coverage
42
Labels Set
18
Screens
3
Imports
6
Categories
Custom terminology
Labels propagate across all screens in real time. Use industry templates to quickly align with your trade's standard vocabulary. Changes apply to all team members.