DEV3 Technologies home

DEV3 Crewbolt – Field Service Management Laravel Script with Dispatch Board, PPM Contracts & Technician App

A self-hosted field service management system on Laravel 12 and Filament 4: dispatch board, work orders, SLA timers, recurring maintenance contracts, quotes, invoices, van stock and an offline technician app. Web installer and demo data included. Flutter app source included.
by DEV3 TechnologiesVerified Author(0) 0 sales 0 viewsUpdated 13 Nov 2026

Video tour. Pick a section below to browse 48 screenshots in 14 sections.

App & phone tours

Tap play to watch each app. Nothing downloads until you do.

  • Mobile web0:18
  • Technician app1:43

Crewbolt is a field service management system you host yourself, built by DEV3 Technologies on Laravel 12 and Filament 4, with a Flutter technician app. One field-service company (HVAC, plumbing, electrical, fire and security, lifts, cleaning, pest control, facilities) runs it across one or more branches. The demo business is a fictional heating and plumbing contractor, Brightwater Climate & Plumbing.

No live demo: 48 grouped screenshots and two video tours show the marketing site, the dispatch board, the admin panel, the customer portal and the technician app. Install it with the bundled demo data to try every role on your own server.

What the office gets

  • A dispatch board with technicians by hour and an unassigned queue sorted by SLA due time. Dragging a job onto a technician checks skills, shift, absences and travel time before it saves, and two dispatchers can never double-book the same slot.
  • Work orders from calls, the public request form, the customer portal, quotes or recurring maintenance (PPM) contracts, with priority, status and both SLA due times in one list.
  • SLA timers (response and resolution) that run on each branch's business hours and holidays and pause while a job waits on the customer or on parts.
  • PPM contracts that generate visits ahead of time, grouped per site and day, without ever creating the same visit twice.
  • Customers, sites and assets with QR labels, service history, encrypted access notes and gate codes.
  • Quotes sent as a signed approval link, invoices with a pay link, payments, credit notes and void, rate cards with labour bands, call-out fee and parts markup, and service report PDFs sealed on completion.
  • Van and warehouse stock: transfers, part requests, purchase orders and van counts that wait for a manager to approve variances.
  • Branch isolation: dispatchers and managers see only the branches they are granted. Reports for SLA compliance, first-time fix, revenue and PPM completion; a REST API with scoped keys and webhooks; a signed inbound alarm webhook that raises work orders.

What customers get

A customer portal by magic link (sites, visits, service reports, quotes to approve, invoices) and public quote-approval and invoice pay pages that work on a phone.

The technician app (Flutter source included)

Today's route in order, job detail with access notes and the gate code, a state bar for travel, arrive, pause and complete, checklists with ranges, traffic lights and required photos, parts booked off the van, on-site quotes, customer signature, asset lookup by QR label, van stock count and timesheet. It works offline: changes queue in order and sync later, and a change the office refused waits on a Needs attention screen. The app runs in demo mode out of the box and points at your site when you set its URL. The shown estimate uses the same pricing rules as the server and is checked against shared test vectors.

Built for correctness

Pest tests (288 passing) cover dispatch conflicts, SLA clocks across holidays and DST, PPM generation, offline sync, stock, quotes and pricing; job pricing is asserted against 32 cases produced by an independent oracle. A MySQL race suite runs real parallel requests for double assignment, double quote acceptance, duplicate sync pushes, the last van part, repeated PPM runs, stock transfers, double payment and cancel versus complete.

Good to know

  • For one field-service company with one or more branches. It is not a multi-company SaaS.
  • Travel time and scheduling suggestions use straight-line distance times a road factor (no paid routing API, no traffic data). Maps use OSM tiles when configured.
  • The technician app works offline and syncs. Location is shared only during an active job, in the foreground; the demo uses simulated positions. You must tell technicians and follow local employee-monitoring law.
  • Card payments, SMS, mail, push and maps are simulated until you connect real ones. Accounting is a CSV or journal export, not a ledger. There is no AI scheduling and no payroll.
  • Service report PDFs and signatures are records, not legal advice on signature validity.
  • The app was verified in simulator builds, tests and against the live API, not on a real device; scanning with the camera and push are buyer add-ons. Publishing to the app stores is your step (guide included).

Requires PHP 8.2+, MySQL 8 or MariaDB 10.6+ for a live site (SQLite for evaluation) and a cron entry. Flutter 3 is needed only to build the app.

How it's built

Architecture, stack, key decisions and the quality gates DEV3 Crewbolt passed before release.

The engineering behind Crewbolt: technician-day row locks, business-hours SLA clocks with pauses, idempotent PPM generation, an offline sync queue with per-action results and a pricing engine checked against an independent oracle.

The problem it solves

Field service looks like a calendar until the rules arrive. Two dispatchers drop jobs on the same technician in the same second. A promised response time has to run on branch hours and holidays, and stop while the customer is the one holding things up. Maintenance contracts must generate next month's visits exactly once, however often the scheduler runs. A technician in a plant room with no signal keeps working, and the office may change that visit in the meantime. Parts leave a van shelf one at a time while the storekeeper moves the last ones. And what the technician sees as an estimate must match what the office invoices.

Architecture and approach

Crewbolt is a Laravel 12 application with a Filament 4 admin at /admin, a hand-built dispatch board, Blade pages for the marketing site, quote and pay links and the customer portal, a REST API under /api/v1 and a Flutter technician app that talks to /api/v1/app. It builds on the shared DEV3 Laravel core for settings, roles, audit and mobile tokens.

One lock order everywhere

Assigning a visit locks the work order, then the technician-day rows in technician and day order, then the visit. Stock moves lock warehouse and part rows in a fixed order. Missing lock rows are created only after the existing ones are locked, because on MySQL an INSERT IGNORE on an existing row takes a shared lock and two transactions then deadlock; this was found by the race suite and fixed. Transactions retry three times if MySQL picks them as a deadlock victim.

SLA clocks

Due times are computed from branch business hours, holidays and daylight-saving changes. A pause for the customer or for parts stops the clock and a re-computation counts an open pause up to now. Breach evaluation is idempotent.

PPM generation

A contract row lock and a unique key on contract, asset and period make generation safe to run from three processes at once; a re-run creates nothing.

Offline sync

Every queued action carries an idempotency key and, for state changes, a visit version. The server answers each action separately: applied, conflict or rejected. A rejected action is final for its key, and the app moves it to a Needs attention screen where the user retries under a new key.

Pricing

A pure rate-card pricer classifies each minute as normal, overtime, out-of-hours or weekend, rounds up to the increment and applies call-out, parts markup, contract minutes and SLA credit. Its output is asserted against 32 vectors from an independent Python oracle, and the Dart port in the app is asserted against the same file.

Quality gates and results

Crewbolt 1.0.0 passed the seven release gates on the final code: Larastan level 6 with 0 errors, 288 Pest tests with 1,567 assertions, and a MySQL race suite of real parallel requests and artisan processes. The technician app has 93 tests and builds for Android and the iOS simulator. Payments, SMS, mail, push and maps are simulated until the buyer connects real ones, and travel time is an estimate with no traffic data.

Tech stack

Area Technologies
Application Laravel 12, Filament 4, Blade, REST API
Data MySQL 8, Row locks, Idempotency keys
Mobile Flutter 3, Offline queue, Riverpod
Quality Pest, Larastan level 6, MySQL race suite

Inside the build

Field service software: Dispatch the right technician and get the job done first time. Field service software — Dispatch the right technician and get the job done first time.

Dispatch board: Drag a job to a technician and the board checks skills, shift, absences and travel before it saves. Dispatch board — Drag a job to a technician and the board checks skills, shift, absences and travel before it saves.

Guides & articles

Practical guides and engineering write-ups for DEV3 Crewbolt.

Field service software: 6 things to check before you pick one

Last updated
Field service software: 6 things to check before you pick one: DEV3 Crewbolt

A field service business loses money in small gaps: the technician booked twice, the response promise missed on a bank holiday, the maintenance visit generated twice or not at all, the job done in a plant room with no signal and lost. Here are six things to check before you pick field service software, with DEV3 Crewbolt as the worked example.

Crewbolt home page: a service van drawn in SVG beside the headline and call to action

1. Can two dispatchers ever double-book a technician?

Ask what happens when two people drop jobs on the same technician in the same second. The right answer is one booking and one clear "slot conflict", with skills, shift, absences and travel time checked first. In Crewbolt the assignment locks the technician's day under a row lock, and the board shows the conflict before you save.

The dispatch board: technicians by hour and the unassigned queue sorted by SLA due time

2. Do the SLA clocks understand business hours?

A response target that ignores holidays and branch hours is a number nobody trusts. Look for clocks that run on each branch's calendar and pause while the job waits on the customer or on parts.

Work orders with response and resolution due times in one list

3. Are maintenance contracts generated once?

Recurring maintenance should create next month's visits ahead of time, grouped per site and day, and never twice, however often the scheduler runs.

Maintenance contracts with a Generate PPM visits action

4. Does the app work with no signal?

Ask whether the technician can finish a job offline and what happens when the office changed that job meanwhile. Crewbolt queues every change in order and shows a refused change on a Needs attention screen.

Technician app: the day's route with an SLA countdown on each job

Technician app: changes queued while offline and shown as waiting to send

5. Does van stock stay honest?

Parts should leave the van shelf as they are used, and a count that differs from the system should wait for a manager rather than quietly overwrite it.

Technician app: the van shelf count with queued bookings already taken off

6. Are the limits honest?

Crewbolt is an install you run for one company with one or more branches. Travel time is an estimate with no traffic data. Card payments, SMS, mail, push and maps are simulated until you connect real ones, accounting is an export rather than a ledger, and there is no AI scheduling or payroll. A technician's position is shared only during an active job, in the foreground, and you must tell your technicians and follow local employee-monitoring law. The Flutter app was verified in simulator builds, tests and against the live API, not on a real device, and publishing it to the stores is your step. Say that plainly to your buyers.

Video: The Crewbolt tour

Frequently asked questions

The complete source code (version 1.0.0) as a download from your account, with the setup and usage guides shown on this page. You can modify the code to suit your product.

Buying guides: Laravel scripts with Filament panels and a web installer · Next.js or Laravel for a SaaS script?

Questions about this product (0)

Answers from the DEV3 team and the community.

Ask a question

No questions yet.

Wondering about setup, licensing or customisation? Ask, and the DEV3 team will help.

More from this author

View all

Related in Web Scripts & Software

View all