Crewloop · Ember & Frost Climate Co.

Roles and workflows

How jobs move through Crewloop, what an operations manager and a technician can each do, and how the app hands work to customers, accounting and calendars. Every rule here is checked by the app’s data layer; the screens only reflect it.

01 The two roles

Crewloop runs the jobs of a heating and cooling installer. The office plans and bills the work; technicians do it. In the demo there’s no sign-in: the Viewing as switch in the sidebar changes who you are.

MenuManagerTechnician
Todaythe whole company’s day“Your day”: their own jobs
JobsJobs (all)My jobs
Scheduleevery technician’s weekMy schedule
Customers✓not in the menu
Import✓not in the menu
Connections✓not in the menu
Workflow✓not in the menu

Opening a manager-only screen as a technician (for example by typing its address) shows a “not allowed” message instead of the screen. Changes are kept in this browser; Reset demo in the sidebar puts the sample company back.

02 Who can do what

One permission check sits in the data layer, under every screen. Hiding a button is a courtesy; the data layer refusing is the rule.

ActionManagerTechnician
See jobsallonly those assigned to them
Create a job✓–
Edit a job’s details✓own jobs
Move a job to another stageany stageown jobs, not into or out of billing
Add a note✓own jobs
Assign or reassign a technician✓–
Delete a job✓–
See customers✓only the customer’s name on their own jobs
Import a spreadsheet✓–
Export (accounting, calendar)✓–
Change the workflow stages✓–
  • A technician opening someone else’s job sees “This job is assigned to another technician.”
  • What’s refused comes back with a reason, e.g. “Only a manager can reassign a job.” or “Only a manager can move jobs into or out of billing.”

03 A job’s journey

A job moves through the company’s own stages. Each stage has a kind, which tells the app what it means whatever it’s called: work still to do, finished work, or billing. These are the sample company’s stages; a manager can rename, add, reorder or remove them (section 10).

work to do: counts as open, can be overdue, shows on Today and the schedule finished billing: only a manager moves jobs in or out; goes to the accounting export

Every move

Logged

“Moved J-1042 from Scheduled to In progress.” in the activity log, with who did it.

Every move

Customer emailed

Subject “J-1042 — Boiler service: now ‘In progress’”. The demo records it under Connections instead of sending it.

Every move

Status page updates

The customer’s page for that job shows the new stage straight away (section 12).

Overdue means booked for an earlier day and still in a “work to do” stage.

04 Moving a job

Drag a card to another column on the board, or use its Move to list (the keyboard way), or change the stage on the job’s page. All three go through the same check.

05 Creating and editing jobs

FieldRule
Job3 to 80 characters
Customerone of the company’s customers
Stageone of the workflow’s stages
Technicianoptional; from the list
Scheduled fora real date, or empty. Required in a “Scheduled” stage
Prioritylow, normal or urgent
Descriptionup to 1,000 characters
Quoted valuerequired; a number such as 180 or 180.50, under 100,000

New job

Manager only

Each new job gets the next reference (J-1042, J-1043 …), the one customers see. Problems are shown next to the field they’re about, and nothing is saved until everything is right.

Editing

A technician on their own job

  • Can change the title, date, priority, description, value and stage (not billing stages).
  • The customer and technician fields are locked. Trying to reassign anyway is refused: “Only a manager can reassign a job.”

Deleting

Manager only, after a confirmation. The job’s notes go with it; the activity log keeps a line saying it was deleted.

06 Today

The first screen. Only open work counts here: jobs in a “work to do” stage.

Part of the screenShowsManagerTechnician
CountersDue today, Overdue and Waiting on parts, each linking to the matching jobs+ Unassigned+ Open jobs
Due todaybooked for todayeveryone’stheir own
Overduebooked for an earlier day and not finishedeveryone’stheir own
Needs a technicianopen jobs nobody is assigned to✓–
Next seven daysbooked from tomorrow to a week aheadeveryone’stheir own
Recent activitythe latest changesall activityactivity on their jobs

07 Jobs: board and list

Board

One column per stage

  • Drag a card between columns, or use its Move to list with the keyboard.
  • Each card shows reference, priority, title, customer, date, and (for a manager) the technician.
  • On a phone, a Show stage picker shows one column at a time, with counts.

List

A sortable table

  • Sort by reference, customer, scheduled date or value; 15 per page.
  • Shows the stage and, for a manager, the technician.
FilterWhereWho
Search (reference, job, customer or city)board and listboth
Stagelistboth
Technician: everyone, unassigned, or one personboard and listManager
Priorityboard and listboth
When: overdueboard and listboth

Filters, sort, page and board/list are kept in the address, so a view can be bookmarked or shared. Clear resets them.

08 Schedule

A week at a glance: one row per technician, one column per day, Monday to Sunday. Previous week, This week and Next week move through the calendar. A technician sees only their own row.

Below the grid, Not scheduled yet lists open jobs with no date. To move a visit, change the job’s date.

09 Importing a spreadsheet Manager

Bring the jobs across from the spreadsheet the company used before. Nothing is added until every row has been checked, and rows with problems are skipped, not guessed at.

Choose the sheet

  • Upload a CSV file, paste the rows, or use the sample
  • A header row plus up to 500 rows

Match the columns

  • Columns are matched by their header (“Client”, “Engineer”, “Booked for”…)
  • Correct any match; unused fields are “Not in this sheet”
  • Job, Customer and Status must be matched

Check every row

  • Error skipped: no job or customer, bad email, status that isn’t a stage, impossible date, value that isn’t an amount
  • Warning imported: unknown technician left unassigned

Import

  • Only valid rows are added, each with the next reference
  • Customers matched by email, then name; new ones created
  • One activity entry: “Imported 5 jobs, adding 3 new customers.”

Dates can be written 2026-09-24, 24/09/2026 or 24.09.2026. The sample sheet has deliberate mistakes (a missing job, a broken email, 31 February) so you can see them caught.

10 Changing the workflow Manager

The stages a job goes through, in the company’s own words. Change them and the board, filters, import and status page follow straight away.

ChangeHow it works
Addgoes just before the first finished stage, where new work belongs. Names are 2 to 30 characters and must be unique.
Renamesame name rules; jobs stay where they are.
Set the kindwork to do, finished, or billing. Billing decides who may move jobs in or out and what the accounting export includes.
Reordermove a stage earlier or later.
Removeif jobs are in it, choose where they go first (“Choose where the 3 jobs in … should go.”). The last stage can’t be removed.

Every change is logged. A stage whose name contains “schedul” needs a date on its jobs; one whose name contains “part” feeds the Waiting on parts counter on Today.

11 Connections Manager

Where Crewloop hands its data to the company’s other tools, so nobody retypes it. Each file is made from the jobs as they are right now.

Accounting

Invoiced jobs · CSV

Every job in a billing stage: reference, job, customer, email, stage, last updated, amount. The total is shown before you download.

Calendar

Upcoming visits · .ics

Booked visits from today in work-to-do stages, for everyone or one technician. Opens in Google Calendar, Outlook or Apple Calendar.

Customers

Emails and status page

The log of emails the app would have sent (latest 25), and a link to an example status page.

12 Customer status page

Each job has a page its customer opens from the email. It shows where the job is and when the visit is, and keeps out notes, prices, other jobs and the internal history.

With no date it reads “We’ll confirm a date with you”; with no technician, “Being assigned”. An unknown reference says so, without revealing anything else.

13 Notes and activity

On each job

Notes

  • Anyone who can see the job can add one: up to 500 characters, with their name and the time.
  • Notes are internal: they never appear on the customer’s status page.

Everywhere

Activity

  • Created, updated, moved, deleted, notes added, stage changes and imports, each with who and when.
  • A job’s page shows its own history; Today shows the latest (technicians: activity on their jobs).

14 Quick answers

Why can’t I move this job to Invoiced?

Billing stages are for the office: only a manager moves jobs into or out of them. As a technician, move it to Completed and the office will bill it.

Why can’t I see a job?

As a technician you see only the jobs assigned to you. Ask the office to assign it, or switch Viewing as to the operations manager.

Why won’t this job save as Scheduled?

A scheduled job needs a date. Add the visit date, or keep it in New request until it’s booked.

Why were some rows not imported?

Rows with errors are skipped rather than guessed at. The check step lists each problem by line. Fix them in the sheet and import those rows again; the rest are already in.

Why can’t I remove a stage?

If jobs are in it, choose which stage they should move to first. A workflow always keeps at least one stage.

Where do these rules live in the code?
  • lib/permissions.ts: who may do what, and the billing-stage rule
  • lib/store/ops.ts: every change (create, edit, move, delete, notes, workflow), each checked and logged
  • lib/validate.ts: the field rules
  • lib/importer.ts: column matching, row checks and the import
  • lib/types.ts: jobs, stages and their kinds