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.
Wipe — A sheen line crosses the car body, dusty matte paint on one side and glossy clearcoat on the other.