Stitchwork Docs

Repairs, alterations & servicing

A ring to resize, a watch to service, a jacket to take in, a sofa to re-cover. Each is the same promise: we have your thing, we will do this to it, it will be ready by then, and it will cost this. Stitchwork keeps that promise on the client's record, prints the ticket, lets the client see where it has got to from their phone, and puts the job on somebody's list when it runs late or is not collected.

Taking a job in

Open Repairs → New job, or Take in a repair on the client's record, and choose the client. A client with no email shows their phone number, so two people of the same name can still be told apart. Somebody new? Add them first: a name and a mobile number are enough (see clients with only a phone number).

FieldWhat it is for
StoreWhere it was taken in. It decides who can see the job, and where it is collected from. You can only take a job in at a store you work.
KindRepair, alteration, service, resize, clean, engraving, valuation or other. It labels the ticket and the sale line.
ItemWhat it is, as the client would describe it: “Cartier Tank, steel, 1998”. Required, up to 200 characters.
WorkWhat is to be done. Printed on the ticket; “As discussed” when left blank.
Condition on intakeScratches, a missing stone, a worn strap: the state you both agreed it arrived in. Printed on the client's copy, because it is the part both sides signed up to at the counter.
Promised forThe date you have told the client. A job still in the workshop on that date is overdue.
PriceLeave it empty until you know: a watch is often opened before anybody can say what it needs. A job with no price is never recorded as a sale.
DepositWhat was taken at the counter. The ticket and the status page show the balance. A deposit taken against an estimate can be more than the final price; the job then says how much is owed back.
Assigned toWho is doing the work or looking after it. Optional.
Internal noteFor the team only. Never printed and never shown to the client.

The reference and the ticket

Every job gets a short reference, such as R-2026-0042, numbered within your workspace and readable over the phone. Print ticket lays out two parts with a line to cut along:

Nothing internal is printed: no internal note and no staff names.

Where it has got to

A job moves through these states. Each move is written to the job's history with who made it and when, so “who said it was ready?” has an answer.

StateCan move toWhat the client reads
receivedin the workshop, waiting for parts, cancelledWe have it safely, and it is waiting its turn in the workshop.
in_progresswaiting for parts, ready, cancelledIt is in the workshop now.
awaiting_partsin the workshop, ready, cancelledWe are waiting for a part to arrive before we can finish it.
readycollected, back to the workshop, cancelledIt is ready, and waiting for you.
collected—It has been collected. Thank you.
cancelled——

A move the table does not allow is refused rather than guessed at, with the reason. If a colleague moved the job a moment before you, your move is checked against where it is now, not where it was when you opened the page. The Repairs list has views for open jobs, ready to collect, overdue and collected, and searches by reference, item or client.

The client's status page

The QR code on the ticket, and the link in any message you send about the job, open /r/<token>: a page made for a phone that shows the shop, the reference, the item, where it has got to, the date it is promised (or the day it became ready), the balance left to pay, and the store's address to collect it from. The link is the key: 32 random characters and nothing to sign in to. Internal notes and staff names are never on it.

Telling them it is ready

When a job is ready, Tell them it's ready opens the composer on the client's record with the message already written: what is ready, where to collect it, and the link to its status page. It is an email when the client has an address and a text when they have only a number. You read it, change what you like and press Send, and it goes through every check a message to a client passes (see Messaging). Stitchwork never messages a client about a repair by itself.

A message about the client's own repair is a service message, so it does not need their agreement to marketing. The composer still shows what they have agreed to.

On Today and on the client's record

Collection and the sale

Marking a priced job collected records it as a sale on the client's record: a fulfilled order for the price, at the store it was taken in at, dated the day it was collected, with the job's reference on it. That sale counts in the client's value, in your reports, and as the start of the aftercare check-in, as any other sale does. Recording it twice is not possible; the job knows its sale.

Who can do what

ActionWho
See, take in, move on, edit and note a jobAnybody who works the store it was taken in at. A job at a store you do not work does not exist for you. A job whose store was removed belongs to the whole workspace.
Cancel a jobThe same people. Cancelling keeps the record and its history.
Delete a job outrightOwners and admins, for a job taken in by mistake or in testing.

A client with a job on record cannot be deleted by accident: deleting them asks first, because you may still be holding something of theirs. Merging two records moves the jobs to the one you keep, and a client's data export includes every job and its history.

API

The screens run on these endpoints, which take a signed-in session. Responses use the usual {"version": "v1", "data": …} envelope (see API overview).

EndpointWhat it does
GET /api/v1/repairsList jobs. view is open, ready, overdue, collected or all; also q, customer_id, channel_id, page and per_page (up to 200). Returns the count for each view.
POST /api/v1/repairsTake a job in: customer_id, channel_id, item, and any of kind, work, condition_notes, promised_on, price, deposit, assigned_user_id, notes_internal.
GET /api/v1/repairs/{id}One job, with its history and its sale.
PATCH /api/v1/repairs/{id}Change the fields above while the job is still with the shop.
POST /api/v1/repairs/{id}/statusMove it on: {"status": "ready", "note": "…"}. Collecting a priced job records its sale.
POST /api/v1/repairs/{id}/notesAdd a line to its history.
POST /api/v1/repairs/{id}/saleRecord the sale for a collected, priced job whose sale was not recorded at the time.
DELETE /api/v1/repairs/{id}Delete it outright (owners and admins).