DEV3 Beadwell – Mobile Car Wash Laravel Script with Route-Aware Slots, Memberships & Building Days (Flutter Apps)

A self-hosted mobile car wash platform on Laravel 12 and Filament 4 with customer and washer Flutter apps: route-aware slots, van water limits, before-and-after photos, memberships with credits and Building Days with a growing discount. Installer and demo data included.

by DEV3 TechnologiesVerified Author(0) 0 sales 0 viewsUpdated 05 Nov 2026

Video tour. Pick a section below to browse 112 screenshots in 29 sections.

App & phone tours

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

  • Customer app1:13
  • Washer app1:32

Beadwell is a mobile car wash platform that you host yourself, built by DEV3 Technologies on Laravel 12 and Filament 4, with two Flutter apps: one for customers and one for washers. A washer in a van comes to the customer's parked car, on demand or in a booked window. Washers photograph all four corners before and after. Memberships carry wash credits per vehicle, and apartment buildings get shared Building Days whose discount grows as more cars join. The demo business is a fictional mobile detailing company in the sunny coastal city of Sunmere, priced in Australian dollars with 10% GST included.

No live demo: 112 grouped screenshots and a desktop video tour show the 3D marketing site, the public pricing and building pages, the admin panel and both apps. Install it with the demo data to try every role on your own server.

Customers

  • A public site with a 3D hero, a pricing page, memberships, a buildings page for managers, a Building Day join page and an account area with vehicles, bookings and before-and-after photos.
  • A customer app where your car is the home screen: add several cars and swipe between them, pick a package and size, choose an arrival window (open or few left) or wash it now, drop a parked-car pin and leave a bay note.
  • Review and pay, with a credit toggle to use a membership credit, then finding a washer, the washer on the route, live tracking and a washing-now screen.
  • Before and after photos for every corner of the car, with a switcher, then a rating and tip. Free cancellation or a cancellation fee, a late-washer credit, a rain promise claim and damage reports by panel.
  • A wallet, plus memberships with plans, credits per vehicle, a recurring window and a renewal-failed state.

Washers

  • A washer app with a route, a tank line showing how much water the van holds, a low-tank warning, a refill suggestion and a refill entry.
  • ASAP offers with a countdown, an offer-taken state and a refusal when the tank is too low, then navigate, a too-far check and an arrival check.
  • A corner photo guide (two of four, then complete, with a photos-missing block), a washing timer, a damage note, after photos and a review screen.
  • Collect cash with a mismatch check, a car-unreachable wait, a Building Day roster, earnings with a job split, cash owed and cash out.

Admin panel

  • A dashboard with a 3D Tank Row of vans and water tanks, a live map, a route board, an unassigned queue and weather alerts.
  • Bookings with a detail page, a photo compare, the money split on a late cancel, claims and rain re-washes.
  • Washer applications, washers, vans and tanks, depots, packages, sizes, members, credits and failed renewals, buildings and Building Day detail, cash balances and reports.

Routes, water and money

  • Slots are route-aware: a booking is offered only if a washer's route and the van's water allow it, and a finished wash frees its route cells early.
  • Memberships hold credits per vehicle. A Building Day has a fill bar and a discount tier that grows with the cars that join, with a refund of the difference when the tier rises.
  • Washers take cash at the car, and the wallet shows what they owe against what they earned. The tip posts later as its own ledger row.
  • State and the clock are re-read after every row lock, and the platform's 174 parallel-request race groups on MySQL check cancel, accept and offers against each other.

What is included

  • The Laravel application with Composer packages and compiled assets inside (no Node.js or Composer on the server), both Flutter projects in apps/, the shared DEV3 Flutter package, a web installer and HTML documentation.
  • Demo data for the fictional detailing company in Sunmere, with washers, memberships, buildings and bookings.
  • Test files that run each app against a live backend: apps/customer/test/live/ and apps/washer/test/live/.

Good to know

  • The washer app has no device GPS plugin. Against a real server it reports the last position the server holds, so a real washer cannot pass the 150 m arrival check until you plug a location source into the app (locationSourceProvider, described in data/location.dart).
  • The customer app books by card only. The API accepts cash, but the app does not offer it.
  • The mid-job add-on is not built. There is no route for a washer to add an extra service in the middle of a job.
  • There are no app store links yet. The store buttons on the website point to the apps section of the page, and the two phone mock-ups on the site are drawn in CSS, not real screenshots.
  • The apps' real-backend runs are automated tests. Both apps were run against a live server through test files, not by hand on a device. Sign-in is throttled, so do not loop them.
  • A few washer screenshots clip their last line behind the action button (offer taken and photos missing), and the complete screen has an empty middle. These are cosmetic.
  • Water and photos need real hardware to prove. The van water limits and the corner photo guide were exercised with demo data and the simulator, not with real vans.
  • Payments, SMS and push are simulated by default. The simulated payment gateway works out of the box, so booking and paying need no keys. Stripe, Razorpay and PayPal drivers are included but were not run against real accounts.
  • The apps were not tested on physical devices. They build as debug Android packages and run on the iOS simulator.
  • Use MySQL or MariaDB on a live site. The Pest tests run on SQLite, where row locks do nothing; the concurrency checks that prove the locking run on MySQL 8.
  • Name: Beadwell is a working name checked by a web search only, not a trademark clearance. Check it before you launch under it.
  • No hosted demo. Every customer, business and record in the screenshots is fictional. Install it with the demo data to try every role on your own server.

Quality checks

Beadwell 1.0.0 passed the seven release gates of the DEV3 Laravel suite on the final code: 385 Pest tests with 4,086 assertions, a front-end size budget, migrations and seeding on MySQL 8 and SQLite, a headless-browser pass with 22 happy paths and 174 parallel-request race groups on MySQL, an installer test from the zip, and a secret scan. The customer app passed analysis and 85 tests, and the washer app 235 tests, with debug Android and iOS simulator builds. Reviews of the money and locking code fixed the issues they found, each with a test, and the live-backend runs found and fixed two real bugs. Lighthouse scores were not measured on the final code.

How it's built

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

The engineering behind Beadwell: washer routes and water held as cells, state re-read after every lock, membership credits per vehicle and a building discount that grows with the cars that join.

The problem it solves

A mobile wash sells a slot on a moving washer's route, and the van carries a limited amount of water. A booking must fit the route and the tank, an ASAP offer must not clash with a booked slot, and a wash that finishes early frees time for the next one. Memberships charge on renewal, buildings fill up and a discount tier changes as cars join. Races between cancel, accept and offers must always leave a coherent state.

Architecture and approach

Beadwell is a Laravel 12 application with Filament 4 admin at /admin, a public website and a REST API used by two Flutter apps.

Routes and cells

A washer's route is stored as cells, and a finished wash is trimmed to now so the freed cells can be offered again. Locks are taken in the order booking, offer, washer, cells, and state and the clock are re-read after each row lock rather than trusted from an earlier snapshot.

Memberships and buildings

Credits belong to a vehicle and a repeated success event cannot charge a membership twice. A Building Day has a fill bar and a discount tier from configuration, and a tier that rises refunds the difference.

Cash and wallets

A washer's wallet moves by what the job paid them less the cash they hold. Cancel, accept and offer paths accept every legal outcome of a race and check that nothing is left behind.

Apps

The customer and washer apps share one API contract and a shared Flutter package, start in a demo mode, and have live tests that run against a real backend.

Quality gates and results

Beadwell 1.0.0 passed the seven release gates on the final code: 385 Pest tests with 4,086 assertions, 22 happy paths and 174 race groups on MySQL, the installer test from the zip and a clean secret scan. The customer and washer apps pass analysis and 85 and 235 tests.

Limits are listed on the item page: the washer app has no GPS plugin, the customer app books by card only and the mid-job add-on is not built.

Tech stack

Area Technologies
Application Laravel 12, Filament 4, Blade, REST API
Washing Route cells, Van water tracking, ASAP offers, Corner photos
Money Membership credits, Building Day discounts, Cash handling, Wallets
Apps Flutter customer app, Flutter washer app, Shared dev3 Flutter package, Demo mode
Quality Pest, Headless browser smoke, MySQL race checks, Live-backend app tests

Inside the build

Bead hood hero: A clay-model coupe sits on a dark polished floor, matte on one side and glossy on the other, beside the headline and Book a wash button. Bead hood hero — A clay-model coupe sits on a dark polished floor, matte on one side and glossy on the other, beside the headline and Book a wash button.

Wipe: A sheen line crosses the car body, dusty matte paint on one side and glossy clearcoat on the other. Wipe — A sheen line crosses the car body, dusty matte paint on one side and glossy clearcoat on the other.

Guides & articles

Practical guides and engineering write-ups for DEV3 Beadwell.

Mobile car wash software: 7 things to check before you pick one

Last updated
Mobile car wash software: 7 things to check before you pick one: DEV3 Beadwell

A mobile wash is a van on a route with a limited tank. Here are seven things to check before you pick software, with DEV3 Beadwell as the worked example.

Beadwell hero: a car under a bead-covered bonnet in a dark showroom

1. Does the slot fit the route?

Look for slots that follow a washer's real route. Beadwell offers a window only if the route allows it.

The route board in the admin panel

2. What about water?

A van has a tank. Beadwell shows a tank line, warns when it is low and refuses an offer that would run it dry.

3. Is there photo proof?

Before and after photos for every corner, shown to the customer with a switcher.

Before and after photos in the customer app

4. How do memberships work?

Credits per vehicle, a recurring window and a failed-renewal state.

5. Can a building share a day?

A fill bar and a discount that grows with the cars that join, as in Beadwell's Building Days.

A Building Day in the customer app

6. What happens when it rains?

A rain promise claim and a re-wash list for staff.

7. What is not finished?

Ask for the limits in writing. For Beadwell: the washer app has no GPS plugin, the customer app books by card only, and the mid-job add-on is not built.

Video tour of Beadwell

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?

More from this author

View all

Related in Web Scripts & Software

View all