Architecture, stack, key decisions and the quality gates DEV3 Mendfolk passed before release.
The engineering behind Mendfolk: a prepaid block held in escrow, a server-side timer, top-ups that grow the block only after payment, a fixed lock order and card refunds written with the money and retried after commit.
The problem it solves
A handyman job is paid by the minute but booked in advance. The customer needs a price up front, the fixer needs to be paid for the time worked, and neither should be surprised. The job runs over, the customer pays for more time while the fixer is still working, offers arrive at the same moment a customer books someone else, and a refund must neither be lost nor sent twice.
Architecture and approach
Mendfolk is a Laravel 12 application with a Filament 4 admin at /admin, a public website with a customer account page and a REST API used by two Flutter apps.
One prepaid block
A task is paid as a block: the estimated minutes at the fixer's rate, the service fee and a materials allowance. The money sits in escrow. The bill is worked out from the minutes the server timed, rounded up and capped at the paid block, and the unused part is refunded.
Server time and top-ups
The timer uses the time the server received each start, pause and stop, never the phone's clock. A top-up is a separate payment, and the block grows only when that payment succeeds. Late or duplicate payments are refunded.
One lock order
Every path locks rows in the same order through one entry point: task, offer, fixer, calendar cells, promo, top-up, pending refund, then wallets. A test records the order from the query log. Deadlines are enforced when a record is read, and the scheduled command only sweeps what nobody opened.
Refunds
Card refunds are written as a row in the money transaction, sent after commit and retried by the scheduler, then credited to the wallet. Gateway calls only run outside a transaction.
Apps
The customer and fixer apps share one API contract with the server and start in a demo mode that needs no server.
Quality gates and results
Mendfolk 1.0.0 passed the seven release gates on the final code: 147 Pest tests with 2,804 assertions, 45 admin and home pages in a headless browser including an offer-limit race, the installer test from the zip and a clean secret scan. The customer and fixer apps pass analysis and 124 and 66 tests.
Limits are listed on the item page: payments and push are simulated by default, Stripe refunds have no idempotency key yet and some race paths are not in the parallel tests.
Tech stack
| Area |
Technologies |
| Application |
Laravel 12, Filament 4, Blade, REST API |
| Tasks |
Prepaid time block, Server-side timer, Offer limit, Top-ups |
| Money |
Escrow ledger, Durable card refunds, Wallet credit fallback, Mend Promise pool |
| Apps |
Flutter customer app, Flutter fixer app, Shared dev3 Flutter package, Demo mode |
| Quality |
Pest, Static analysis, Headless browser smoke, Lock-order test |
Inside the build
Dashboard dark — Tool tiles, six live counters and the charts on the workshop night theme.
Dashboard light — The same dashboard on sawdust paper with teal and pencil-yellow accents.