User Guide

Complete manual for all staff roles. Covers all 17 modules — RepairFlow v1.0.0.

1

Getting Started

All Roles

Logging In

Navigate to your shop's web address in any modern browser. The login screen requires:

  • Phone number or email assigned by your administrator
  • Password set by the administrator during account creation
Default admin account: Phone 0900000000 — Password password. Change this password immediately after your first login.

Changing Your Password & Profile

Click your avatar or name in the top-right corner → select My Profile. From there you can:

  • Update your full name, phone number, and email address
  • Change your password (your current password is required)

Interface Overview

Left Sidebar (Desktop) Main navigation menu. On mobile, tap the ☰ menu icon to open a slide-in drawer.
Bottom Navigation (Mobile) Tab bar at the bottom of the screen for technicians — quick access to the most-used sections.
Notification Bell Receive alerts for new repair orders, completions, and other events. Click to see the notification list.
Dashboard Home screen — quick summary of today's revenue, active repair orders, and today's appointments.

Installing as a Mobile App (PWA)

RepairFlow can be installed on your phone or desktop like a native app — no App Store required:

  • Android (Chrome): Tap the ⋮ menu → "Add to Home Screen"
  • iPhone (Safari): Tap the Share button → "Add to Home Screen"
  • Desktop (Chrome/Edge): Click the install icon in the address bar
iPhone / Safari: Push notifications are supported from iOS 16.4+. Android and desktop have full push notification support.
2

Initial Setup

Admin Only

Before going live, the admin should complete these setup steps in order:

1Shop Information — Admin → Settings → General

  • Shop name, phone number, address, and email
  • Shop logo (appears on invoices and the app header)
  • Currency format (symbol, thousands separator, decimal separator)
  • System language (Vietnamese or English)
  • Timezone
  • Opening hours for each day of the week
  • PWA icons (192×192 and 512×512 PNG, for the app icon on home screens)

2Create Staff Accounts — Admin → Users

  • Click "+ Add Staff"
  • Enter full name, phone number (or email), and initial password
  • Assign a role (see Section 3)
  • Staff log in with their phone number or email address

3Product Categories — Admin → Settings → Product Categories

  • Create categories such as: Parts, Materials, Services, Oils & Fluids
  • Categories allow faster filtering when searching for products

4Suppliers — Admin → Settings → Suppliers

  • Add your parts and materials suppliers
  • Supplier information is used when creating purchase orders

5Warehouses & Storage Locations — Admin → Settings → Warehouses

  • Create at least one warehouse (e.g. "Main Warehouse")
  • Create storage locations within each warehouse (e.g. Shelf A, Shelf B) for detailed tracking

6Payment Accounts — Admin → Settings → Payment Accounts

  • Add accounts: Cash, Bank Transfer, E-wallet (Momo, ZaloPay…)
  • These accounts appear when recording invoice payments

7Products & Services — Admin → Products

  • Create products of three types: Single Part (spare part), Service (labor charge), Bundle/Kit (set of components)
  • Fill in SKU, name, category, and default sale price
  • Bundle/Kit products: define the BOM (bill of materials — the component list)

8Initial Stock Import — Admin → Inventory → Purchase Orders

  • Create a purchase order for each incoming batch of stock
  • Enter products, quantities, unit cost price, and storage location
  • Confirm the purchase order to bring the goods into stock
3

Roles & Permissions

Admin

Full system access. Manages staff, configures settings, views all reports, and performs every operation.

User & role management System settings All business modules View cost prices Financial reports System audit log
Receptionist

Receives customers, creates appointments, repair orders, estimates, and invoices. Does not see detailed financial reports.

Customers & Assets (view + create/edit) Appointments (manage) Repair Orders (create + assign techs) Estimates (create + send + approve) Invoices (create + view) Collect payments View customer debts Leads
Technician

Performs repairs. Sees only repair orders assigned to them. Cannot view cost prices, estimates, or financial reports.

Personal schedule Assigned repair orders (update status) View customers & assets View stock levels Leads (create + view own)
Accountant

Manages finances. Cannot create repair orders or manage appointments.

Invoices (view + create) Collect payments Customer & supplier debt management Cash Book Inventory & purchase orders Full financial reports View cost prices
Custom Roles: Go to Admin → Roles → click "+ Add Role" → select permissions by group. Custom roles can combine permissions from multiple built-in roles.
4

Customers & Assets

Admin · Receptionist · Accountant · Technician

Adding a New Customer

  1. 1
    Go to Customers → click "+ Add Customer"
  2. 2
    Enter phone number (required, must be unique)
  3. 3
    Enter full name, customer type (Individual / Corporate), and address
  4. 4
    For corporate customers: also enter the tax code (VAT number)
  5. 5
    Click "Save"

Adding an Asset to a Customer

  1. 1
    Open the customer detail page (click the eye icon on the customer list)
  2. 2
    Click "+ Add Asset"
  3. 3
    Enter the unique identifier (required — auto-converted to uppercase), type, and description
  4. 4
    Optional: additional technical specifications (varies by shop type)
The asset identifier is unique across the entire system. Shop type (auto / phone / electronics / custom) is configured in Settings and controls which fields appear.

Searching for Customers

Search by name or phone number. Filter by customer type and status. The customer detail page shows: their assets, complete invoice history, and outstanding balance.

5

Appointments

Admin · Receptionist

Booking an Appointment

  1. 1
    Go to Appointments → click "+ Book Appointment"
  2. 2
    Search for and select the customer (type name or phone number)
  3. 3
    Select the customer's asset (if already registered)
  4. 4
    Choose the appointment date and time
  5. 5
    Optionally assign a responsible technician
  6. 6
    Enter expected services and any notes

Appointment Status Flow

Pending Confirmed Arrived

Or: Cancelled at any point. Use the action buttons directly on the appointment row.

Converting an Appointment to a Repair Order

When the customer has arrived: click the wrench icon next to the appointment to instantly create a repair order. The asset details and expected services are pre-filled.

If a repair order already exists for that appointment, the same icon will take you directly to it.

Creating a DVI Inspection from an Appointment

Click the clipboard icon next to an appointment to create a Digital Inspection (DVI) for that asset. The icon only appears when no inspection exists yet. Select an inspection template and the system creates the inspection form linked to that appointment.

Technician Personal Schedule

Technicians go to "My Schedule" to see appointments assigned to them, organized by day. Use the ← → buttons or the date picker to navigate between days.

6

Repair Orders

Admin · Receptionist · Technician

Creating a New Repair Order

  1. 1
    Go to Repair Orders → click "+ Create Order"
  2. 2
    Select the customer and their asset (or enter a description if not yet registered)
  3. 3
    Assign a responsible technician
  4. 4
    Enter the initial diagnosis / service notes
  5. 5
    Add line items: Services (labor charges) and Parts (from inventory)
  6. 6
    Click "Save Order"

Repair Order Status Flow

Received In Progress Parts Waiting In Progress Reported Complete Completed Returned
  • Received → In Progress: Admin / Receptionist / Technician clicks "Start Work"
  • In Progress → Parts Waiting: Technician clicks when parts are missing
  • Parts Waiting → In Progress: Technician resumes work after parts arrive
  • In Progress → Reported Complete: Technician reports job done — waiting for management sign-off
  • Reported Complete → Completed: Admin / Receptionist confirms — inventory is automatically deducted at this point
  • Completed → Returned: When the customer collects their item
Inventory deduction happens only when the order status changes to Completed. The deduction cannot happen twice for the same order.

Adding Parts (Inventory Items) to an Order

  1. 1
    Click "+ Add Line Item" → choose type Part
  2. 2
    Search for a product from the inventory
  3. 3
    The system automatically suggests the oldest available batch lot (FIFO)
  4. 4
    Enter the quantity required and confirm the sale price

Timeline & Internal Notes

Every status change is automatically recorded in the order's timeline. Staff can also add manual notes to the timeline at any time to document observations during the repair process.

DVI Inspection linked to a Repair Order

In the top-right area of the repair order form:

  • Green badge "Inspection Exists": click to open the linked DVI inspection
  • "Create Inspection" button: no inspection yet — click to choose a template and create a DVI linked to this repair order

Creating an Invoice from a Repair Order

When the order reaches Completed or Returned status, a "Create Invoice" button appears. Clicking it automatically generates an invoice containing all services and parts from the order.

7

Digital Inspections (DVI)

Admin · Receptionist · Technician
What is DVI? A Digital Inspection lets technicians inspect an asset against a standardised checklist, mark the status of each item (Good / Monitor / Needs Immediate Repair) with optional photo evidence, then share a results link with the customer — no app download or login required on their end. This increases transparency and customer trust, and results can be converted directly into an estimate.

1Create an Inspection Template Admin Only

Path: Admin → Inspections → Templates

  1. 1
    Click "+ New Template" and give it a name (e.g. "Intake Inspection" or "Post-Repair Check")
  2. 2
    Add groups (e.g. Appearance, Function, Safety, Performance)
  3. 3
    Within each group, add specific checklist items
  4. 4
    Optional: mark an item as "Photo required when issue found" — the camera opens automatically when the technician marks it yellow or red
  5. 5
    Click "Save" — the template is now ready to use
One template can be used for many inspections. Changes to a template do not affect previously created inspections.

2Create an Inspection

Three ways to create an inspection:

  • From the Inspections menu: go to Inspections → "+ Create Inspection" → choose template, asset, customer, and technician
  • From a Repair Order: open the order → click "Create Inspection" in the top-right → select template → inspection is linked to that order
  • From an Appointment: click the clipboard icon next to the appointment → select template → inspection is linked to that appointment

3Fill in the Inspection Results Technician

Open the inspection form and work through each checklist item:

Good Monitor Needs Repair N/A
  • Click the coloured button corresponding to the item's condition
  • Add technical notes in the text field below each item if needed
  • Take photos using the camera button — items requiring photos will open the camera automatically when marked yellow or red
  • Multiple photos can be uploaded per item
The inspection status automatically changes to "In Progress" when the first item is filled in — no separate button press needed.

4Complete & Share Results with the Customer

Mark complete: when all items are filled in, click "Complete Inspection". The status changes to Completed.

Share the results:

  1. 1
    Click "Send Results to Customer"
  2. 2
    The system generates a unique results link for this inspection
  3. 3
    Copy the link → send via Zalo / Messenger / SMS
  4. 4
    The customer opens the link on their phone — sees all checklist results and photos without needing to log in
When the customer opens the link for the first time, the inspection status automatically changes to "Viewed" — your staff will know the customer has received the results.

5Create an Estimate from Inspection Results Admin · Receptionist

When an inspection has items marked Monitor or Needs Repair, a "Create Estimate" button appears:

  1. 1
    Click "Create Estimate"
  2. 2
    Select which flagged items to include (all yellow/red items are pre-selected)
  3. 3
    Confirm → you are taken to the new estimate
  4. 4
    Enter prices for each item, then send to the customer
The estimate is created with a price of 0 for each line item. Always fill in prices before sending.

Inspection Status Flow

Draft In Progress Completed Sent Viewed

"In Progress" and "Viewed" transitions happen automatically — no manual button press needed.

8

Estimates

Admin · Receptionist
When to use Estimates: When a customer wants to know the cost before agreeing to repairs — especially for high-value jobs, complex multi-stage work, or when the customer is not physically present and needs to review and approve remotely. For simple, low-cost jobs you can go straight to a repair order without creating an estimate.

Creating an Estimate

  1. 1
    Go to Estimates → click "+ Create Estimate"
  2. 2
    Select an existing customer or enter a name/phone for a walk-in enquiry
  3. 3
    Choose the asset or enter a description
  4. 4
    Add service and parts line items with prices
  5. 5
    Optionally set tax, discount, and validity period
  6. 6
    Click "Save Draft"

Sharing the Estimate Link for Remote Approval

  1. 1
    Click "Send Estimate" → the estimate status changes to Sent and the system generates a unique preview link
  2. 2
    On the estimate detail page, click "Copy Link" (or click the preview URL field)
  3. 3
    Paste the link into Zalo / Messenger / SMS / Viber and send to the customer
  4. 4
    The customer opens the link on their phone and sees all services, parts, and the total
  5. 5
    They enter their phone number to verify their identity
  6. 6
    After verification, they click "Approve" or "Decline" with a reason
The estimate preview link does not require a system login — the customer only needs to enter their registered phone number. Each estimate has its own permanent link.

Converting an Estimate to a Repair Order

Once the estimate is approved (customer clicked "Approve" or staff confirmed internally), click "Create Repair Order" to transfer all line items to a new repair order — no re-entry required.

9

Invoices

Admin · Receptionist · Accountant

How Invoices are Created

Invoices are automatically generated from a completed repair order — click "Create Invoice" on any order with status Completed or Returned. Invoices cannot be created independently.

Each repair order can have at most one invoice. All line items are pulled directly from the repair order.

Editing an Invoice (Admin)

Admin users can adjust the following invoice fields:

  • Discount (fixed amount)
  • VAT (percentage)
  • Notes

The total recalculates instantly as you make changes.

Printing an Invoice

Open the invoice detail page → click "Print". The browser opens a print-ready page where you can select a printer or save to PDF.

Sharing an Invoice Preview Link with the Customer

Useful when the customer is not present and wants to review the invoice before paying or collecting their item.

  1. 1
    Open the invoice → click the "Preview" button in the top area of the page
  2. 2
    The browser opens the invoice preview (HTML page, no login required)
  3. 3
    Copy the URL from the browser address bar (Ctrl+C / Cmd+C)
  4. 4
    Paste the link into Zalo / Messenger / SMS and send to the customer
  5. 5
    The customer opens the link and sees the full invoice breakdown
Unlike estimate links (which require phone verification), the invoice preview link opens directly — share it only after the repair work has been agreed on with the customer.

Invoice Payment Status

Unpaid Partially Paid Fully Paid

Status is updated automatically each time a payment is recorded.

10

Payments & Debt

Admin · Receptionist · Accountant

Recording a Payment

  1. 1
    Open the invoice you want to collect payment for
  2. 2
    Click "+ Add Payment"
  3. 3
    Enter the amount received and select the payment account (Cash / Bank Transfer / E-wallet)
  4. 4
    Optionally enter a reference number or transaction ID
  5. 5
    Click "Confirm Payment"
You can record multiple partial payments against a single invoice. Each payment automatically creates a cash book income entry.

Customer Debts (Customers owe us)

Go to Revenue → Debts → tab "Customers Owe Us":

  • Total outstanding balance per customer
  • Click a customer name to see their detailed ledger (per invoice, per payment)
  • For unpaid invoices: click "Collect Payment" to jump to the invoice
Payment history cannot be deleted. If an entry was made in error, create a reverse adjustment entry through Admin.

Supplier Debts (We owe suppliers)

Go to Revenue → Debts → tab "We Owe Suppliers" to see the total owed to each supplier:

  • Number of unpaid purchase orders, total value, amount paid, and remaining balance
  • Overdue column: amounts past the payment due date are shown in red
  • Summary cards at the top: Total Owed / Total Overdue / Due in 30 Days
To record a supplier payment, go to Inventory → Purchase Orders → find the confirmed order → click "Record Payment".
11

Leads / CRM

Admin · Receptionist · Technician
When to use Leads: A customer asks about pricing over the phone, Zalo, or Facebook but hasn't visited yet. You want to track the consultation process across multiple contacts before they decide. You want to record the lead source (referral, advertisement) for conversion analysis. You want to follow up a few days later. When the customer agrees to come in → click "Convert" to create their customer record.

What is a Lead?

A lead is a potential customer who is not yet in your customer database (they haven't used your services yet). Managing leads helps you track the consultation pipeline and convert prospects into paying customers.

Lead Status Flow

New Contacted Qualified Converted
  • Logging an activity (call, Zalo message) automatically advances status to "Contacted"
  • Manually change the status after your assessment
  • Mark as "Not Interested" and enter a decline reason if the lead drops out

Converting a Lead to a Customer

  1. 1
    Open the lead detail page
  2. 2
    Click "Convert"
  3. 3
    Search for an existing customer (if already in the system) or create a new one using the lead's information
  4. 4
    Confirm → the lead status changes to "Converted" and it is linked to the customer record
Accountants do not have access to the Leads module.
12

Inventory Management

Admin · Accountant

Creating a Purchase Order (Stock Intake)

  1. 1
    Go to Inventory → Purchase Orders → click "+ Create PO"
  2. 2
    Select the supplier, enter the intake date and the supplier's invoice number
  3. 3
    Add line items: product, quantity, unit cost price, and storage location
  4. 4
    Click "Save Draft" to review before confirming
  5. 5
    Click "Confirm Stock Intake" → goods are added to inventory and a batch lot is created
Once confirmed, a purchase order cannot be edited. Review all quantities and costs carefully before confirming.

Viewing Current Stock

Go to Inventory → Stock Levels: list of products with current on-hand quantities.

  • Expand any product row to see details by batch lot and storage location
  • Products below their minimum stock level display a warning indicator
  • Stock Transfer: click Transfer on a batch lot → select destination location and quantity

Recording a Supplier Payment

After confirming a purchase order, the system tracks the outstanding amount owed to the supplier. To record a payment:

  1. 1
    Go to Inventory → Purchase Orders
  2. 2
    Find a confirmed order with an Unpaid or Partially Paid badge
  3. 3
    Click "Record Payment"
  4. 4
    Enter amount, payment date, payment account, and optional notes
  5. 5
    Click "Confirm"
Each payment automatically creates an expense entry in the Cash Book. Multiple payments are allowed per order (installment payments). View payment history on the purchase order detail page.

Kit Unbundling

Go to Inventory → Unbundling to disassemble a Bundle/Kit lot into individual component parts:

  1. 1
    Select the Bundle/Kit lot to unbundle (must be in stock)
  2. 2
    Select the storage location to take the kit from
  3. 3
    Enter the number of kits to unbundle
  4. 4
    Allocate the cost to each component — the system suggests an even split from the kit lot cost. Adjust as needed per component.
  5. 5
    Optionally assign storage locations for each component
  6. 6
    Click "Confirm Unbundling" → kit stock decreases, each component is added to inventory at the allocated cost
When you adjust the cost of one component, the remaining components auto-adjust to keep the total equal to the kit lot cost. An error will be shown if the total does not balance before you can confirm. If the same kit product was purchased in two batches at different costs, perform the unbundling separately for each batch.
13

Cash Book

Admin · Accountant

Automatic Income Entries

Every time a payment is recorded against an invoice, the system automatically creates an income entry in the Cash Book. No manual entry is needed.

Adding a Manual Expense Entry

  1. 1
    Go to Revenue → Cash Book
  2. 2
    Click "+ Add Expense"
  3. 3
    Select the date, payment account, amount, and enter a description
Transactions cannot be edited or deleted once recorded. If an entry was made in error, create a reverse income or expense entry to correct the balance.

Viewing the Summary

The top of the Cash Book page shows: Total Income / Total Expenses / Net Balance for the selected time period and payment account filter.

14

Reports

Admin · Accountant
Revenue & Profit Total revenue, gross profit, net profit, month-by-month trend chart. Comparison with the previous period.
Inventory Total stock value, best-selling products, slow-moving items, stock allocation by location, import/export history.
Debt & Cash Flow Total customer debt, debt aging analysis, top debtors, supplier debt aging, payment history, daily/monthly cash flow.
Operations Repair orders by status, average handling time, technician performance metrics, appointment conversion rate and peak hours.
Customers & Assets New vs returning customers, assets due for service, full service history lookup.

Date Filter

All reports have a date filter: Today / Last 7 Days / This Month / This Quarter / Custom Range. Select a custom date range using the date picker in the top-right corner of each report.

15

System Audit Log

Admin Only

Go to Admin → System Log. The system automatically records all of the following:

Login / Logout Failed Login Data Created Data Updated Data Deleted Data Restored

Search & Filter

  • Search by keyword (description, IP address, URL)
  • Filter by event type and user
  • Filter by date range
  • Expand any log row to see the full before/after data diff for that change
16

Email & Forgot Password

Admin for setup

Step 1 — Configure SMTP

Go to Settings → Email (SMTP) (admin-only menu item):

  1. 1
    Set Method: SMTP
  2. 2
    Enter your mail server details: Host, Port, Username, Password
  3. 3
    Set the From Email and From Name (shown in the recipient's inbox)
  4. 4
    Click "Save"
  5. 5
    Enter your own email address in the Send Test field → click "Send Test Email" to confirm the connection is working

Using Gmail (free, most common):

Host: smtp.gmail.com Port: 587 Encryption: TLS Username: yourname@gmail.com Password: App Password (not your regular password — 2FA must be enabled first)

Create an App Password: Google Account → Security → 2-Step Verification → App Passwords → Generate new

Step 2 — Forgot Password (for users)

When a user forgets their password (requires a valid email on their account and SMTP configured):

  1. 1
    On the login page, click "Forgot Password?" below the password field
  2. 2
    Enter the email address registered on the account → click "Send Reset Link"
  3. 3
    Open the email → click the "Reset Password" button (link expires in 60 minutes)
  4. 4
    Enter a new password (minimum 8 characters) → click "Save New Password"
  5. 5
    Log in with the new password
Admin note: If a staff member doesn't have an email on their account, go to Admin → Users, edit their profile, and add an email address before they can use the Forgot Password feature.
17

Installer

First-time setup

When to use the Installer

  • Deploying the system for the first time on a new server
  • Customer who purchased the source code is setting it up
  • Migrating to a new server or resetting the system to a clean state

Installation Steps

Navigate to https://your-domain.com/install and complete the 7-step wizard:

  1. 1
    System Requirements: Checks PHP 8.2+ and all required extensions (pdo_pgsql, curl, gd, etc.). A clear list shows what is missing.
  2. 2
    Directory Permissions: Verifies storage/ and bootstrap/cache/ are writable. If not: run chmod -R 775 storage bootstrap/cache on the server, then re-check.
  3. 3
    Database: Enter your PostgreSQL connection details (host, port, database name, username, password). The system tests the connection and auto-creates the database if it doesn't exist.
  4. 4
    Site Information: Set the shop name, full URL (must include https://), and timezone. These are written to the .env file.
  5. 5
    Admin Account: Create your administrator login (phone number + password). Email is optional but needed for Forgot Password.
  6. 6
    Install: Click "Start Installation" — the system runs migrations, seeds roles and permissions, creates accounts, and writes the config. A real-time log is shown. Takes 30–120 seconds.
  7. 7
    Finish: Installation complete! Click "Go to Login". The /install/* routes are permanently locked.

Technical Notes

  • Only PostgreSQL is supported — MySQL cannot be used
  • To reinstall: delete storage/app/installed and remove the app_installed record from the settings table (or truncate the entire database)
  • The installer creates .env from .env.example if it doesn't already exist
  • After installation, go to Settings → General to set your shop logo, address, and phone number
  • Inspection templates are not seeded by the installer — the admin adds them manually (or runs php artisan db:seed --class=InspectionTemplateSeeder) after setup
For the full installation walkthrough including Nginx/Apache configuration, permission commands, and troubleshooting, see the Installation Guide.