Architecture, stack, key decisions and the quality gates DEV3 Packwain passed before release.
The engineering behind Packwain: a quote made from an inventory, truck and crew days held in one calendar, milestone payments and a scan trail for every box.
The problem it solves
A move is priced from a list of furniture and boxes, yet it needs a truck of the right size, a crew of the right number and one or more days that nothing else has taken. The job changes on the day: the customer adds items, the unload runs over, or the truck is shared with other customers. Money moves at milestones, crews handle cash, and every box must be accounted for from the old home to the new one.
Architecture and approach
Packwain is a Laravel 12 application with Filament 4 admin at /admin, a partner panel, a public website and a REST API used by two Flutter apps.
Inventory to price
Plain classes turn an inventory into volume, truck, crew and price, and the same vector files are used by the Dart ports in both apps, so a quote on a phone matches the server.
One lock order
Every change goes through one engine that locks the move, then its quote, job days, resources, shared run, milestones and wallets, in that order. Deadlines are applied when a record is read, and the scheduler only sweeps idle records.
Milestones and cash
Card money is applied only on a successful payment; late, stale and duplicate payments are refunded after commit. A milestone gate holds work until the deposit or stage payment is in, and change requests and overruns need approval.
Boxes
Boxes carry labels and are scanned on and off the truck, with a refusal for duplicates and unknown labels, and replays of offline scans are accepted once.
Apps
The customer and crew apps share one API contract and a shared Flutter package, and start in a demo mode.
Quality gates and results
Packwain 1.0.0 passed the seven release gates on the final code: 261 Pest tests with 2,892 assertions, 102 pages in a headless browser with 18 race groups on MySQL, the installer test from the zip and a clean secret scan. The customer and crew apps pass analysis and 250 and 288 tests. A review of the money and scheduling code fixed 15 bugs.
Limits are listed on the item page: there is no location plugin, the quote wizard cannot add custom items and password reset is web only.
Tech stack
| Area |
Technologies |
| Application |
Laravel 12, Filament 4, Blade, REST API |
| Moves |
Inventory pricing, Truck and crew calendar, Shared truck runs, Box scanning |
| Money |
Deposits and milestones, Late-payment refunds, Crew cash hand-ins, Partner statements |
| Apps |
Flutter customer app, Flutter crew app, Shared dev3 Flutter package, Demo mode |
| Quality |
Pest, Larastan level 6, Headless browser smoke, MySQL race checks |
Inside the build
Truck hero — A cutaway removal truck on a thin road with the headline and a start-my-inventory button beside it.
Rooms — A sofa, a wardrobe and kraft boxes slot into the truck and the fill gauge on its side climbs.