Architecture, stack, key decisions and the quality gates DEV3 Ladlero passed before release.
The engineering behind Ladlero: deadlines enforced under a lock when an order is read, rider offers in widening radius rounds, a handoff only the assigned rider can complete, and a refund table that decides who bears each cost.
The problem it solves
A food order has three people with clocks. The kitchen must accept within a window, and an order left alone must not sit forever. A rider offer must expire and move on to the next rider without two riders getting the same order. A food-hall order can have one kitchen decline while two accept, and the customer must be offered a refund before choosing. Cash orders need the right amount in the rider's hand, and refunds must say who bears the cost, kitchen, rider or platform, without paying anyone twice. All of this has to stay correct when a payment webhook, a rider tap and a timer arrive in the same second.
Architecture and approach
Ladlero is a Laravel 12 application with Filament 4 panels at /admin and /restaurant, a customer area at /account, a public ordering site and a REST API that three Flutter apps use. It builds on the shared DEV3 Laravel core.
Deadlines are applied on read
Every deadline (kitchen accept, rider offer, partial decision, cannot-deliver) is applied lazily under a lock the moment an order is read or acted on. A scheduled tick only catches orders nobody is looking at, so the product behaves correctly even when the cron is late.
Offers in rounds
Rider offers go out in widening radius rounds. Each offer is logged with who received it, how long it lasted and what they answered. Only the assigned rider can post the pickup and drop codes, and kitchen staff cannot complete a handoff.
Money on confirmation
Card money is applied only when the gateway confirms payment, and unpaid card orders hold an inert placeholder delivery so the dispatch queries never lock a range. A refund table decides who bears each cost, and a logic review of the engine fixed 25 issues, each with a regression test.
Three apps, one contract
The customer, restaurant and rider apps share one API contract and a shared Flutter package, and start in a demo mode with built-in data.
Quality gates and results
Ladlero 1.0.0 passed the seven release gates on the final code: 359 Pest tests with 4,525 assertions, 150 pages and 44 happy paths in a headless browser with race checks on MySQL, the installer test from the zip and a clean secret scan. The customer, restaurant and rider apps pass analysis and 128, 136 and 184 tests.
Limits are listed on the item page: the apps use simulated GPS, the admin and restaurant panels are English only, and statements are HTML only.
Tech stack
| Area |
Technologies |
| Application |
Laravel 12, Filament 4, Blade, REST API |
| Dispatch |
Lazy deadlines under lock, Radius-round offers, Handoff codes, Food-hall orders |
| Money |
Gateway-confirmed payments, Refund table, Commission rules, Restaurant statements |
| Apps |
Flutter, Shared dev3 Flutter package, Demo mode, Arabic RTL |
| Quality |
Pest, Larastan level 6, Headless browser smoke, MySQL race checks |
Inside the build
Lazy Susan hero — An enamel-rimmed lazy Susan turns on a tiled table while a copper ladle pours the sauce ribbon.
Menu — Modifier chips orbit the lifted plate and snap onto the dish.