Skip to content

Work orders: repair · cleaning · PC builds

For a moving or rental business a job is simply "schedule → bill". Repairs, cleaning and PC builds are different: in between there is a diagnosis, a quote, the customer saying yes, money taken up front. So each of them has its own work order. This page walks through the three flows, what the customer sees on their side, how each one lands in the books, and the little "Quote" tool on the schedule page.

Only stores of the matching type have them

The business type you picked when opening the store decides the tiles: a "Repair" store gets "🔧 Repair tickets" and "🧩 PC builds (PCPartPicker)", a "Cleaning" store gets "🧹 Cleaning jobs". They all live under the bottom Me tab → tap the store name, right after "Self-order inbox" (see Open a store in three minutes). The WeChat mini program does not do work orders; it says so itself: "Ledger tables, items and bundles, storefront design, invoices, reports and work orders stay on the web."

The three at a glance

Repair tickets Cleaning jobs PC builds
Flow line on the page "Remote diagnosis → test fee → quote → customer confirms → repair → hand over & collect." "Survey → quote → confirm → schedule → on-site → collect payment." "Paste a list from PCPartPicker → set your price (markup + labour) → generate a customer quote page."
Money up front "Diagnostic fee / deposit" (Diagnostic fee / Goodwill / Parts deposit) "Booking deposit" none
On-site time none yes: "On-site date", "On-site time" + "Schedule" none
Can the customer confirm on their page yes: "Confirm repair · Accept this quote" yes: "Confirm booking · Accept this quote" no — they look, you tap "Customer confirmed · book the deal"
Subcontract to a helper "🤝 Subcontract to a helper" "🤝 Subcontract to helper" no
Closing button "💰 Collect balance & book (…)" "💰 Done & collect · record (…)" "Customer confirmed · book the deal"
Customer page app.huanhuan.com.au/t/… app.huanhuan.com.au/j/… app.huanhuan.com.au/b/…

All three closings land as a deal in the ledger and jump to the "Deal recorded" page (see Ledger and invoices); the review link for the customer lives there too (see Reviews and reputation).

Repair tickets

Who it is for: computer and phone repair, anything "diagnose first, price later". The list is titled "🔧 Repair tickets"; tap "+ New ticket": Customer ("Name"), Contact ("WeChat / phone"), Device type (Desktop / Laptop / Phone / Tablet / Other), Intake (Remote / Drop-off / Mail-in), Brand & model (example "e.g. Lenovo Legion R9000P"), Fault (customer described) (example "e.g. black screen while gaming"), then "Create ticket" → "Ticket created". Each row shows model and customer; a quoted one adds "Quote $xx", one with money taken adds "Deposit $xx", one waiting on the customer adds "Waiting: …". Closed ones sit under "Closed (N)".

Open a ticket and you get a few cards, top to bottom:

The buttons in the "Next step" card change by stage: "🔍 Start diagnosis" → after quoting, wait for the customer to confirm on their page, or tap "✅ Customer approved (manual)" on their behalf → "📦 Parts ordered · awaiting delivery" (skip it if no parts) → "🛠 Start repair" → "✅ Repaired · ready for handover". A step you cannot take yet says "Can't do this step right now".

While you wait for the customer to send a model number or a teardown photo, the same card has an input (placeholder "Waiting on customer: GPU model / teardown photo…"); write what you are waiting for and tap "Hold", and the list shows "Waiting: GPU model" on that ticket.

Customer, contact, device type, brand / model, "Serial (optional)", "Technician" (placeholder "Who's fixing"), fault description; "Save" → "Saved".

The card's hint: "Collect the diagnostic fee before diagnosing; it's deducted from the final repair total." Enter the "Amount" (example "e.g. 50"), pick a "Type": Diagnostic fee / Goodwill / Parts deposit, tap "Collect" → "Collected ✓"; the card then shows "Collected $50" and "Holding". An empty amount gets "Enter an amount"; a ticket that never took money reads "No deposit collected". There is no payment-method field here — you pick that at handover.

"Diagnosis" (example "e.g. GPU fan noise, needs new fan"); parts line by line: "Part name, e.g. cooling fan", "Model / PN", "Size", "Cost", "Price", "Qty", "+ Add a part"; the hint reads "Cost = your buy price (private); Price = what the customer sees." Then "Labour", "Warranty (days)", "Quote note (shown to customer)". "Quote view for customer" is one of "Flat price" or "Itemised". Below it the app works out "Customer pays" and "Cost (private)" with the margin. Tap "Save & quote" → "Quoted ✓"; once quoted, only "Save" is left on this card.

The customer's side: the "Send to customer" card holds a /t/… link; tap it to copy ("Copied ✓"). The card says "Customer sees progress, the quote and can confirm in one tap. Cost/margin stay hidden." The customer opens "{store} ◆ Ticket {no}" with five steps "Diagnose → Quote → Confirm → Repair → Done". During diagnosis: "The technician is diagnosing your device and will share a plan & quote soon." Once quoted they see "Reported issue", "Technician diagnosis", "Repair plan" ("Flat price" or "Itemised", "Parts & labour included", " · N-day warranty") and two buttons, "Confirm repair · Accept this quote" / "Not now". Confirming shows "Confirmed! We'll book your repair right away"; declining shows "Your feedback is noted — {store} will get back to you." From there the page reads "You've accepted the quote — sourcing parts", " — repair in progress", " — device is fixed, ready for pickup", and finally "Collected & done" " · warranty until {date}". If money was taken: "💵 Received diagnostic fee $50, deducted from the repair total as a credit. Fully refundable before repair starts." Footer: "Powered by HuanHuan ◆ · final price confirmed by the shop". Only photos marked "Visible to customer" show up there; "Internal only" ones do not.

No dedicated notification when the customer confirms

The 🔔 list has no "customer accepted the quote" entry. After you send the link, check the ticket — if the customer has confirmed, you no longer need to tap "✅ Customer approved (manual)".

Handover and settlement: once at "✅ Repaired · ready for handover", the bottom of the "Next step" card shows "Payment method" (Cash / Bank transfer / WeChat / Card) and "💰 Collect balance & book ($total − deposit $50)". The confirm box says "Confirm handover and book it? Deposit is auto-deducted." → "Handed over & booked ✓", a "View this deal" button appears, and the deposit card flips from "Holding" to "Applied".

Can't fix, or the customer walks: expand "Cancel / can't fix" at the bottom → "Outcome": "Customer cancelled" or "Can't fix", "Reason (if can't fix)" (example "e.g. motherboard burnt, unrepairable") → with money held, choose "Deposit $50 collected — what to do": "Refund customer" or "Keep as diagnostic income" → the red "Close ticket", confirm "Close this ticket?" → "Ticket closed". The deposit card becomes "Refunded" or "Forfeited to income"; the customer page reads "This ticket has been cancelled. To repair again, contact {store}." or "After inspection, this device can't be repaired for now. For details, contact {store}."

Repair tickets have no on-site time

Scheduling, the evening reminders and a helper's own planning all rely on a date and time; repair tickets have neither field. A subcontracted repair has to be planned by the helper, see Taking jobs & planning your own time.

Cleaning jobs

Who it is for: cleaning, end-of-lease, lawn work — anything "look at the place, quote, book a visit". The list is "🧹 Cleaning jobs"; "+ New job": Customer, Contact, Service type (Regular clean / Deep clean / End-of-lease bond / Lawn / garden / Wall patch / minor repair / Other), "On-site address", "Scope / special requests", then "Create job" → "Job created". Each row shows service type · address, a date once scheduled, "Quote $xx" once quoted, "Deposit $xx" once taken; finished ones sit under "Completed (N)".

Inside a job:

  • Customer & on-site: customer, contact, service type, on-site address, "Bedrooms", "Bathrooms", "Pricing" (Package / Hourly / Quote), "Who does it" (placeholder "Myself"), "On-site date", "On-site time", "Scope / special requests".
  • Quote: the hint (Chinese only on the live page) says packages are picked from your options, hourly is written as "N people × M h", and a quote is filled line by line on site. Lines: "Item e.g. 2bed 1bath regular clean / oven deep-clean", "Qty", "Price", "Cost (optional, only you see)", "+ Add item"; then "Call-out / base fee (optional)"; the app shows "Customer pays" and "Cost / margin (only you see)"; "Quote note (shown to customer)". Tap "Save & quote" → "Quoted ✓".
  • Booking deposit: "Take a booking deposit to lock the slot (booked as liability, deducted on completion)." Enter "Amount", pick "Method" (Cash / Bank transfer / WeChat), tap "Take deposit" → "Deposit taken ✓"; the card shows "Deposit of $50 taken" and "Held".
  • Next step: "🔍 Site assessment" → the customer confirms on their page, or you tap "✅ Customer approved (manual)" → "Set on-site time": date and time, then "Schedule" → "🧹 Start job (on-site)".
  • Photos: tagged "Before" / "After"; those marked "Visible to customer" appear on the customer page.

The customer's side: the "Send to customer" card holds a /j/… link; tap to copy. The customer sees "{store} ◆ Cleaning job {no}", "Live service progress & quote", five steps "Survey → Quote → Confirm → On-site → Done". While assessing: "We're assessing your job — a quote is coming soon, stay tuned." Once quoted, "Service details" and "Quote" (a flat price, or "Quote · Itemised" with "On-site / service fee") plus "Confirm booking · Accept this quote" / "Let me think"; confirming shows "Confirmed! We'll arrive on-site as agreed". Then, in order: "Confirmed — awaiting scheduling" → "Confirmed — on-site time booked" (with "On-site time: {day} {time}") → "Confirmed — cleaner on-site now" → "Done". With a deposit: "Booking deposit $50 received, deducted from the balance on completion."

Done and collect: once scheduled or started, the bottom of the "Next step" card shows "Payment method" (Cash / Bank transfer / WeChat / Card) and "💰 Done & collect · record ($total − deposit $50)". Confirm "Mark done and record it? Deposit is auto-deducted." → "Done & recorded ✓", then "View this deal".

Cancelling: expand "Cancel this job" at the bottom; with a deposit, first choose "What to do with the $50 deposit taken": "Refund customer" / "Keep as income", then the red "Cancel job", confirm "Cancel this job?" → "Cancelled". The customer page reads "This job is cancelled. To rebook, contact {store}."

PC builds

Who it is for: stores that spec and assemble PCs for customers. The list is "🧩 PC builds" with the line "Paste a list from PCPartPicker → set your price (markup + labour) → generate a customer quote page." Tap "+ New build (paste PCPartPicker list)": "Title" (example "e.g. 7600+4070 gaming PC"), "Customer (optional)", "Contact (optional)", "Paste PCPartPicker list" (placeholder "Copy the list from the PCPartPicker list page and paste the whole thing here (markdown table or plain text supported)."), then "Import & create" → "Imported". The dialog warns: "After import, sell price defaults to cost — add your markup." Each row shows the title, "N items", "Total", "Margin" and a status chip: Draft / Sent to customer / Won.

The build detail:

  • Build items · N: each row "Type e.g. CPU", "Part name", "Cost", "Sell price (you set)", "Qty", "+ Add a part"; the hint: "Cost = your buy-in price (only you see it); sell price = what the customer sees. Or apply a global markup below." The markup field is labelled "Global markup (fill this in to override every sell price with cost×(1+X%))", example "e.g. 12 = add 12% to all".
  • "Build labour fee", "Note (shown on customer page)".
  • Totals: "Total cost (only you see it)", "Parts sell price", "Labour fee", "Customer total", "Your margin". "Save" → "Saved".
  • Share with customer: the /b/… link; the card says "The customer only sees the parts and your set prices, not your cost/margin." The customer page is "{store} ◆ PC build spec", "Your custom PC build & quote", listing "Build parts list", "N selected parts", "PC build / setup service", then "Build total" ("Includes parts & build service · Price subject to merchant's final confirmation"), "Actual photos" if any, "Seller note" if any, plus "Save as image / PDF" and "{store} order". There is no confirm button on this page.
  • Closing the deal: once the customer says yes on WeChat, tap "Customer confirmed · book the deal", confirm "Customer confirmed this build? It will be booked as a deal (into the ledger, per-part + labour)." → "Deal done ✓"; the button becomes "Deal done · view this order".

Quote / script (the moving estimator)

This is the "Quote" button at the top of the schedule page (next to "+ Add job"). Every store has it, whatever the template, and it prices a move. The page is titled "Quote / script" and explains: "Fill it in — the price and a ready-to-send message are worked out for you. Rates are editable (Sydney removalist defaults)." Four steps:

  1. "① This job": "Crew" Solo / Two people, "Estimated hours", "Flights of stairs (no lift)", "Include 10% GST?" Yes (bank transfer) / No.
  2. "② Rates (editable)": "Call-out · solo", "Call-out · two people", "Labour · solo/hr", "Labour · two people/hr", "Stairs per flight, per person", "Deposit"; the factory defaults are 35 / 60 / 60 / 100 / 25 / 10. The rule reads: "Rules: under an hour counts as one hour; after the first hour it is billed in half hours; no stair fee below the second floor." Edited rates "are saved on this device and filled in next time" — on this phone or computer only, so re-enter them on another device; "Reset to default rates" takes you back.
  3. "③ Estimate": line by line, "Call-out (Two people): $60", "Labour $100/hr × 2h = $200", "Stairs $25 × 3 flights × 2 people = $150" (or "Below the second floor — no stair fee"), "Subtotal", an extra "+10% GST" line if ticked, then "Total (incl. GST)".
  4. "④ Message for the customer": a ready-made WeChat message starting "Hi, thanks for getting in touch 😊 Please book ahead — deposit $10", listing crew, hours, call-out + labour, stairs, subtotal, "= $xxx total", ending with the rate rules and "Could you send the pickup and drop-off addresses and any large items, so I can confirm the quote?" The hint says "tap the box to copy"; tapping gives "Copied ✓ paste it into WeChat".

"Back to schedule" at the bottom returns you to the schedule page. The tool only prices and writes the message; it never creates a job or a deal — once the customer agrees, go to "+ Add job" or "New deal".

Work orders can be subcontracted too

Repair and cleaning details both end with a subcontract button ("🤝 Subcontract to a helper" on repairs, "🤝 Subcontract to helper" on cleaning); it opens the same "Dispatch a job" page as subcontracting from the schedule. PC builds have no such button. The rules:

  • One work order carries one subcontract; tapping again takes you back to the existing one.
  • After settlement ("Handed over & booked ✓" / "Done & recorded ✓"), or after closing or cancelling, the button is gone.
  • The helper only sees their own pay — never your quote, cost or margin with the customer.
  • A repair ticket has no time fields, so the helper plans it themselves after accepting; a cleaning job has "On-site date" and "On-site time", and the helper sees your time.

Picking people, pricing, confirming completion and paying out are covered in Private dispatch (your own helpers); if nobody of your own takes it, use "🌏 Publish to the public board" on that dispatch — see Public dispatch.

Next