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.
Operations manager
The office
- Sees every job, customer and technician
- Creates, assigns, schedules and deletes jobs
- Moves jobs into and out of billing
- Imports the old spreadsheet, changes the workflow
- Exports to accounting and calendars
Technician
Rosa, Idris, Hana, Tom
- Sees only the jobs assigned to them
- Moves their jobs through the work stages
- Edits their jobs’ details and adds notes
- Sees their own day and week
- Can’t reassign, bill, import or export
| Menu | Manager | Technician |
|---|---|---|
| Today | the whole company’s day | “Your day”: their own jobs |
| Jobs | Jobs (all) | My jobs |
| Schedule | every technician’s week | My 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.
| Action | Manager | Technician |
|---|---|---|
| See jobs | all | only those assigned to them |
| Create a job | ✓ | – |
| Edit a job’s details | ✓ | own jobs |
| Move a job to another stage | any stage | own 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).
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
| Field | Rule |
|---|---|
| Job | 3 to 80 characters |
| Customer | one of the company’s customers |
| Stage | one of the workflow’s stages |
| Technician | optional; from the list |
| Scheduled for | a real date, or empty. Required in a “Scheduled” stage |
| Priority | low, normal or urgent |
| Description | up to 1,000 characters |
| Quoted value | required; 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 screen | Shows | Manager | Technician |
|---|---|---|---|
| Counters | Due today, Overdue and Waiting on parts, each linking to the matching jobs | + Unassigned | + Open jobs |
| Due today | booked for today | everyone’s | their own |
| Overdue | booked for an earlier day and not finished | everyone’s | their own |
| Needs a technician | open jobs nobody is assigned to | ✓ | – |
| Next seven days | booked from tomorrow to a week ahead | everyone’s | their own |
| Recent activity | the latest changes | all activity | activity 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.
| Filter | Where | Who |
|---|---|---|
| Search (reference, job, customer or city) | board and list | both |
| Stage | list | both |
| Technician: everyone, unassigned, or one person | board and list | Manager |
| Priority | board and list | both |
| When: overdue | board and list | both |
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.
| Change | How it works |
|---|---|
| Add | goes just before the first finished stage, where new work belongs. Names are 2 to 30 characters and must be unique. |
| Rename | same name rules; jobs stay where they are. |
| Set the kind | work to do, finished, or billing. Billing decides who may move jobs in or out and what the accounting export includes. |
| Reorder | move a stage earlier or later. |
| Remove | if 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.
Ember & Frost Climate Co.
Your job J-1042
Boiler service · Status: In progress
- New request
- Scheduled
- In progress
- Awaiting parts
- Completed
- Invoiced
- Visit
- Wed 30 Sep
- Technician
- Rosa
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 rulelib/store/ops.ts: every change (create, edit, move, delete, notes, workflow), each checked and loggedlib/validate.ts: the field ruleslib/importer.ts: column matching, row checks and the importlib/types.ts: jobs, stages and their kinds