DEV3 Technologies home

DEV3 Developer Forum

How we built the DEV3 Bidhaus: a timed-auction engine shared between PHP and Dart

dev3 ·

DEV3 Bidhaus is a self-hosted timed-auction platform: Laravel 12 and Filament 4 backend, one Flutter app for bidders and consignors, and a public catalogue.

Stack: Laravel 12, Filament 4 (/admin, /seller, /account), Blade, Flutter.

Decisions that mattered

  • The auction rules live in a pure AuctionEngine with no database and no clock. Every bid is a maximum, and an exact bid is just a maximum equal to the minimum next bid.
  • One JSON file of worked cases is run by the PHP tests and by the Dart port inside the app, so demo mode and the server cannot disagree about who leads. Property tests check that price never falls and sequence numbers only rise.
  • BidService::place locks the lot, reads time after the lock, checks idempotency by client key, then the window, bidder, limit, amount and deposit. Lock order is always lot, then wallet.
  • Anti-sniping extends the lot once per transaction, capped at a hard close frozen when the lot goes live.
  • Money writes idempotent ledger keys, so a repeated job writes nothing new.

Limits: no public live demo; the Flutter app runs on its own offline demo mode.

Trade-off we chose: two implementations of the engine (PHP and Dart) kept honest by one shared vector file.

How do you keep client and server rule engines in sync? We would like to hear.

#laravel#flutter#auctions#case-study

0

0 replies

No replies yet. Know the answer? Write the first one below.

Your reply

Every post is reviewed by DEV3 before it appears. Usually reviewed within 24 hours.

Markdown supported. Use ``` for code blocks. Images are not allowed.