Online auction script: 8 rules to test before you launch
Last updated

Auction scripts look alike in a feature list: lots, bids, a countdown, a winner. The differences appear under load and at the edges, when two people bid in the last second, when a tied maximum is entered, when a winner never pays, or when a bid has to be removed after the price has climbed. This guide covers eight rules worth testing before you pick a self-hosted timed-auction script, and how Bidhaus, built on Laravel 12, Filament 4 and a Flutter app, handles each one.

1. Is every bid a maximum, and who wins a tie?
Proxy bidding means the system bids for you up to a private ceiling. Ask what happens when a challenger's maximum is higher than the leader's, lower, or exactly equal. Many scripts handle the first two and guess at the third.
In Bidhaus every bid is a maximum; an "exact" bid is just a maximum equal to the minimum next bid. A challenger above the leader's maximum wins at the lower of their own maximum and the leader's maximum plus one increment. Otherwise the earlier bidder stays ahead, and a tie goes to the earlier bid. The rules are a small pure function with no database and no clock, so they can be tested alone.
2. Does the same logic run on every screen?
If the website, the admin panel and the phone each work out the price, they will eventually disagree. Bidhaus keeps the rules in one engine. The Flutter app carries a Dart port of it for its offline demo mode, and the PHP tests and the Dart tests run the same JSON file of worked cases, so the two cannot drift without a test failing.
3. What stops a last-second race?
Two bids that land together must not both win. Bidhaus places each bid under a row lock on the lot, reads the time after the lock is taken, and treats a bid at exactly the closing time as closed. A repeated request with the same client key returns the stored result rather than a second bid. Ask any vendor how their script behaves with parallel requests on a real database, not just in a single-threaded test.

4. How does anti-sniping end?
An extension rule needs a ceiling, or a lot never closes. In Bidhaus a bid that changes the price or the leader inside the closing window adds time, once per transaction, and the lot can never run past a hard close fixed when it went live. The window, the extension and the hard close are settings. A staggered sale closes lots one after another at a set interval, and each lot extends on its own.

5. Are reserves and maximums really private?
The public price endpoint should never reveal the leader's maximum, the reserve value or who is bidding. Bidhaus exposes only whether a lot has a reserve and whether it is met, and shows bidders as masks that are stable within a lot. Staff, by contrast, can open a lot and see every bidder's maximum.

6. What happens to the money around a win?
Check the order of operations: buyer's premium, shipping, tax and deposit. Bidhaus holds a refundable deposit on the first bid of higher-value lots, releases it for losers at close, and applies it to the winner's invoice. The premium comes from a category override or the global setting. Payment goes into escrow, and settlement to the consignor runs when the buyer confirms delivery or after a release period, unless a dispute is open. Every ledger entry carries an idempotent key, so a repeated job or a duplicate payment does nothing the second time.

7. What if the winner does not pay?
An unpaid order past its payment window becomes a default: the deposit is forfeited, the bidder gets a strike, and enough strikes block bidding. The next highest bidder can receive a second-chance offer for a limited time. When a reserve is not met, the consignor can offer the lot to the high bidder. Disputes can end in a full refund, a partial refund or a rejection, with the split worked out automatically.

8. Can you remove a bad bid cleanly?
Deleting a row from a bid table leaves the price and leader wrong. In Bidhaus, staff void a bidder with a recorded reason. The engine replays the remaining placements in order and rebuilds price, leader and counters, and the lot's end time never moves. A sold-but-unpaid lot cancels its order and can go to a second-chance offer.
See it in action
The tour follows a bid through the catalogue, the closing countdown and the invoice, then the admin Closing Room.
What else to compare
- Fraud flags: shared devices, one-sided bidding and repeat defaults are flagged for staff review. Bidhaus's device rule only sees consignors who have also bid.
- App: one Flutter app with buy and sell modes. It was tested with unit and widget tests and a debug Android build, not on physical phones.
- Payments and push: the simulated gateway is the default, and Stripe, Razorpay and PayPal drivers are present but were not run against live accounts. Push and SMS are interfaces only.
- Quality: 130 Pest tests and Larastan level 6 with no errors on the backend, and 62 tests on the app.
Gavel room — A brass gavel above a black marble block under one museum spotlight, in a dark room.





