Trades Operations Skill
What This Skill Does
This skill defines how to build a trades operations tool — the estimate-to-payment workflow that construction trades and field service businesses run daily.
It is NOT a generic project management tool (Jira/Asana). It is NOT a CPQ tool (no product configuration). It is a workflow tracker specifically shaped for businesses that:
- Create estimates based on measured scope items (square footage, linear feet, units)
- Schedule and assign field work to crews or subtrades
- Track progress by scope item and location
- Pay subtrades based on completed measured work
- Invoice customers and collect payment
Common verticals: drywall, roofing, HVAC, plumbing, electrical, painting, flooring, concrete, landscaping, general contracting.
The builder reads this skill, reads the DOMAIN.md for the specific trade and terminology, and generates a working prototype that uses the customer's actual scope items, pricing, and workflow stages.
When to Use This Skill
Use this skill when the transcript or DOMAIN.md contains these signals:
| Signal | Examples |
|---|
| Scope items with measurements | square footage, linear feet, board feet, units per area |
| Field scheduling | crew assignment, job calendar, field work planning |
| Subtrade payments | paying subs, trade payments, per-sqft pay rates |
| Estimate-to-invoice workflow | estimate → schedule → work → invoice cycle |
| Trade-specific scopes | insulation, drywall, taping, roofing, framing, plumbing rough-in |
| Location-based specs | different specs per floor, per room, per zone |
| Dual invoicing | trade invoices (outgoing to subs) AND customer invoices (incoming from clients) |
Do NOT use this skill for:
- Product configuration with dependencies → use cpq-builder
- Inventory and stock management → use erp-builder (future)
- Generic CRM or contact management → use crm-builder (future)
Section Definitions
The trades-builder tool has FIVE sections. These are fixed — they come from this skill, not from the business process described in the transcript.
Section 1: Estimate
What it does: Capture the project details and build the scope-based estimate.
Project details (editable inline):
- Project name — inline editable text (click to edit, save on blur)
- Customer name — inline editable text
- Address — inline editable text
- Estimate number — auto-generated, read-only
- Lead source — dropdown if DOMAIN.md defines sources, otherwise free text
- Estimator notes — , always editable
Scope items table (the core of this section):
This table is the most important element in the app. Each row represents a scope of work with measured quantities.
| Column | Type | Editable | Notes |
|---|
| Scope | dropdown | Yes | Options from DOMAIN.md: insulation, drywall, taping, sanding, cleaning, priming, etc. |
| Location | Text input | Yes | e.g., "Main floor living room," "Basement suite" |
| Spec/Type | Text input or | Yes | e.g., "Type X," "Moisture resistant," "R-20 batt," "Level 4 finish" |
| Sq ft | Number input | Yes | Square footage for this scope at this location |
| Rate | Number input | Yes | Dollar rate per sqft (CAD) |
| Line total | Calculated | No | Sqft × Rate, auto-calculated |
| Actions | Delete button | — | Trash icon to remove the row |
- "Add row" button below the table to add more scope items
- Multiple rows per scope type — e.g., two drywall rows for different locations with different types
- Auto-calculated footer: Subtotal, Tax (GST 5%), Total — updates on every cell change
- All cells are directly editable — click a cell, type, blur to save. See frontend-design skill for inline editing pattern.
Data from DOMAIN.md to use:
- Entity Registry → Job Specification sub-items become the Scope dropdown options
- Business Rules → unit of measure (sqft, lft), tax type and rate, payment terms
- Terminology Glossary → exact scope names (not generic labels)
Section 2: Schedule
What it does: Plan field work assignments and sequence.
Fields (editable):
- Assigned roles/people — dropdowns from DOMAIN.md Stakeholder Map, NOT free text
- Scope sequence — reorderable list showing which scope items happen in what order
- Start date — date picker, editable
- Target completion date — date picker, editable
- Field crew notes — , editable
If DOMAIN.md mentions scheduling tools (e.g., "Bold for scheduling"), reference them in the section description: "Use Bold to line up the field crew."
Section 3: In Progress
What it does: Track work completion per scope item and location.
Display:
- Table populated from Estimate's scope items — same rows, now being tracked for completion
| Column | Type | Editable | Notes |
|---|
| Scope | Text | No | From Estimate |
| Location | Text | No | From Estimate |
| Sq ft | Number | No | From Estimate |
| Status | dropdown | Yes | Not Started / In Progress / Completed |
- Status changes save immediately to localStorage
- "Mark all completed" button for bulk update
- Progress indicator: "3 of 5 scope items completed"
Section 4: Close Out
What it does: Handle the dual payment flow — pay subtrades and invoice the customer.
Display — two cards side by side:
Trade Invoice card:
- Subtrade payment amount — auto-calculated from completed scope items (sqft × rate)
- Status: dropdown — Ready to pay / Paid
- Payment date — date picker, editable when status is Paid
- Reference to Bold if mentioned in DOMAIN.md
Customer Invoice card:
-
Invoice amount — subtotal + tax from Estimate
-
Status:
dropdown — Ready to send / Sent / Paid
-
Invoice date — date picker, editable
-
Reference to Arvest if mentioned in DOMAIN.md
-
"Close out job" action button that marks the project as Completed
-
Both invoice statuses must be saved to localStorage
If DOMAIN.md mentions invoicing tools, reference them in the card headers: "Trade invoice (Bold)" and "Customer invoice (Arvest)."
Section 5: Job Summary
What it does: Read-only summary of the completed project — the final output view.
Layout (top to bottom):
- Company header — brand logo from domain.md Brand Logos section (use the logo URL or path provided) + company name + placeholder address ("123 Main St, City, Province, Postal Code — update in settings")
- Project metadata — project name, customer, address, estimate number, dates, assigned to. Two-column grid of label/value pairs.
- Scope summary table — all scope items with scope type, location, spec/type, sqft, rate, line total. Clean with right-aligned numeric columns.
- Totals block — subtotal, tax (GST 5%), total. Total is large and bold.
- Payment status — trade invoice status badge + customer invoice status badge, side by side.
- Terms — payment terms (Net 30), currency (CAD).
This view is entirely read-only. No edit controls, no inputs, no dropdowns. Users click back to Estimate or Schedule in the stepper to make changes. The Job Summary is the output, not the workspace.
Layout Pattern
The trades-builder tool uses a three-panel layout with FIVE sections (not four). The builder MUST follow this layout.
Left sidebar (always visible, collapsible)
This content goes INTO the template's existing sidebar slot — it REPLACES the template's default navigation. Do not create a second sidebar next to the template's default one. One left sidebar total.
Preserve the template's collapsible sidebar behavior. If the template has a sidebar toggle, keep it working. Inject skill content into the existing collapsible component — do not rebuild from scratch.
If you cannot put the stepper in the template's sidebar without modifying the layout file, modify the layout file. The skill layout overrides template preservation. Do not create a second sidebar column just to avoid touching
.
Sidebar heading: Use a contextual label like "Workflow" or "Project workflow" — not the company name.
| Component | Content |
|---|
| Stepper | A VERTICAL list of ALL FIVE sections: (1) Estimate, (2) Schedule, (3) In Progress, (4) Close Out, (5) Job Summary. Each step shows: step number, label, subtitle from section description, and completion state. Vertical stepper in the sidebar — NOT horizontal tabs. Modify the layout file if needed — skill layout overrides template preservation. |
| Saved projects | List of projects stored in localStorage. Each shows name + customer + status badge (Estimated / Scheduled / In Progress / Completed). Pin this section to the bottom of the sidebar so it's always visible without scrolling. Double-click a project name to rename inline. |
CRITICAL: Stepper labels come from THIS SKILL, not from DOMAIN.md. The DOMAIN.md state model may list
estimated, scheduled, in progress, completed
— those are the project's STATUS values for badges. The stepper LABELS are the skill's section names:
Estimate, Schedule, In Progress, Close Out, Job Summary. These are different things. The stepper has 5 steps. The domain has 4 statuses. Do not use the domain status list as stepper labels — you'll get 4 steps instead of 5 and lose Close Out and Job Summary.
Main content (center — changes per section)
Only the active section renders. Do NOT stack all sections on one scrolling page. Do NOT combine multiple sections into one panel (e.g., "Schedule / In Progress / Close Out" as one section is WRONG — each is its own panel). Do NOT use horizontal tabs. Each stepper step shows its corresponding panel at FULL WIDTH of the main content area. All other panels are hidden.
Implementation: use a
state variable (0–4). Render only the panel that matches
.
tsx
// ALL FIVE panels, conditional rendering
{currentStep === 0 && <EstimatePanel />}
{currentStep === 1 && <SchedulePanel />}
{currentStep === 2 && <InProgressPanel />}
{currentStep === 3 && <CloseOutPanel />}
{currentStep === 4 && <JobSummaryPanel />}
| Section | What renders |
|---|
| Estimate | Project details form + scope items table with add/remove rows, quantities, rates, auto-calculated totals. "Save estimate" and "Continue to Schedule" buttons. |
| Schedule | Role/crew assignment dropdowns (from DOMAIN.md), scope sequence, date fields, field notes. "Continue to In Progress" button. |
| In Progress | Location-based scope tracking table with status per row. "Mark completed" button. |
| Close Out | Trade invoice card + customer invoice card, side by side. "Close out job" button. |
| Job Summary | Read-only formatted project summary with company header, scope table, totals, payment status. |
Right sidebar (always visible)
| Component | Content |
|---|
| Project summary | Live-updating card: current stage, estimate number, payment terms, subtotal, tax, total. Updates when scope items change. |
| Workflow notes | Business rules from DOMAIN.md displayed as contextual guidance. Reference BR-IDs. |
| Actions | Back, Continue, and Delete project buttons. Primary action uses brand accent color. |
RBAC behavior
- Seed localStorage with roles from DOMAIN.md User Roles or Stakeholder Map.
- Role switcher is a single dropdown in the header bar — not separate buttons. Shows active role name and badge.
- Approval gating: If DOMAIN.md says only certain roles can close out or approve, disable those buttons for other roles.
- Role-specific views: If roles handle specific stages (e.g., estimator handles Estimate, project manager handles Schedule), show relevant context when that role is active.
Price visibility
- Show prices on the Estimate panel — unit rates, line totals, subtotal, tax, total.
- Show running totals in the right sidebar Project Summary.
- Use the currency, tax type, and tax rate from DOMAIN.md.
- Format prices with the currency code (e.g., "$3,900.40 CAD" or "$3,900.40" with "CAD" shown in the summary).
shadcn/ui component mapping
| Trades-ops Element | shadcn Component | Usage Notes |
|---|
| Project details form | , , | Project name, customer, address. Stack label above input. |
| Scope items table | , , , | Add/remove rows. Right-align numeric columns. |
| Scope item status | | Not Started = outline, In Progress = blue, Completed = green. |
| Project status badges | | Estimated = amber, Scheduled = blue, In Progress = blue, Completed = green. |
| Role badges | | Staff = outline, Approver = default. |
| Assignment dropdowns | , , | Populate from DOMAIN.md stakeholder names. NOT free text inputs. |
| Invoice status cards | , , | Trade invoice + customer invoice side by side. |
| Action buttons | | Primary: brand accent, "Continue." Secondary: outline, "Back." Destructive: "Delete project." |
| Stepper navigation | Custom vertical list | Step number in circle, label, subtitle, completion checkmark. Use for states. |
| Role switcher | | Single dropdown trigger in header. |
| Project summary sidebar | with stacked label/value rows | Labels muted, values bold. Total row large and prominent. |
| Workflow notes | with text-sm text-muted-foreground
| Reference material with BR-IDs. |
| Date fields | with | Start date, target completion. |
| Notes/textarea | | Estimator notes, field crew notes. |
| Confirmation dialogs | | Delete project, close out job. |
| Toast notifications | / | After save, mark complete, close out. |
Deterministic Mapping Rules
Entity → Scope Item Mapping
When the Knowledge Agent extracts entities from the transcript, map them to the trades-builder structure:
| DOMAIN.md entity | Maps to | In section |
|---|
| Project / Job | Project record (top-level) | All sections |
| Estimate | Estimate data (prices, terms) | Estimate panel |
| Job Specification / Scope | Scope items table rows | Estimate + In Progress |
| Invoice | Customer invoice card | Close Out |
| Trade Invoice | Trade invoice card | Close Out |
| Subtrade Payment | Payment status on trade invoice | Close Out |
| Field Schedule | Schedule data | Schedule panel |
Business Rule → Validation Mapping
| DOMAIN.md rule pattern | Implementation |
|---|
| "tracked by square footage" | Scope items table uses sqft as quantity column |
| "paid per square footage" | Trade invoice amount = sum of (sqft × rate) for completed scope items |
| "different [type] per location" | Scope items table includes Location column, multiple rows per scope type |
| "stages: estimated, scheduled, in progress, completed" | Stepper stages match exactly |
| "manually entered" | Project creation form, no import flow |
| "GST/HST at X%" | Tax line in estimate and invoice, tax type as label |
| "Net 30/45" | Payment terms shown in summary and invoice |
| "only [role] can [action]" | RBAC gate on the relevant button |
Integration → Reference Mapping
If DOMAIN.md lists integration points (e.g., Bold, Arvest, QuickBooks), reference them in section descriptions and workflow notes — but do NOT build integration UI. The prototype is localStorage-only. Integration comes in the full build.
Reference Files
This skill expects these files to exist:
| File | Purpose |
|---|
| or | Business terminology, entities, rules, roles, brand data |
| Universal layout principles, brand theming, visual quality rules |
The builder should read BOTH before writing any code.