Real-Time Mobile Auction Platform for iOS & Android
A cross-platform auction app where a bid, an outbid alert, and a closing-price update all reach every watching bidder in under a second — turning "refresh and hope" into a live, tap-to-bid experience.
BidRush is a mobile-first auction marketplace Cosmoxyn designed and built so consumers could discover items they care about — collectibles, resale fashion, local estate finds — and bid on them in a few taps, from anywhere. Live bid counters that never lag, outbid alerts that arrive before the auction closes, and a checkout flow where the winning bidder's card is already verified the moment the gavel falls.
Refresh-and-pray bidding doesn't earn trust.
Most existing auction apps poll for updates every few seconds instead of pushing them, so bidders either overpay bidding "safe" or lose items to a bid that landed 10 seconds before their last refresh. Hard-clock auction endings invite last-second sniping, and payment is often only collected after the auction ends — leaving sellers stuck with winners who never pay.
- True real-time bidding — every bid and outbid event pushed, not polled
- Fair, anti-snipe auction mechanics that extend the clock instead of ending on a technicality
- Payment trust on both sides — a bidder's card authorized before a bid is accepted
- One codebase, two app stores, shipped inside a single quarter
How we built it.
React Native over separate native codebases
With one backend engineer and a 14-week runway, a single Expo-managed React Native codebase shipped both platforms from day one, with a small set of platform-specific modules for push registration.
Redis pub/sub + Socket.io over long-polling
Every bid write publishes to a Redis channel keyed by auctionId; every connected client for that auction is subscribed via Socket.io, keeping bid propagation to the low hundreds of milliseconds.
Stripe authorization holds, not charge-on-bid
Placing a bid puts a temporary authorization hold on the bidder's card. Only the winning bid is captured when the auction closes; every other hold is released automatically.
Soft-close auction mechanic
Any bid placed in the final 60 seconds extends the auction by 60 seconds, capped at a maximum number of extensions — a deliberate trade against "clean" fixed-end-time auctions, chosen to kill sniping.
The solution.
Real-time bid streaming
Every bid write publishes to a Redis channel scoped to the auction; connected clients receive the new high bid over Socket.io in the low hundreds of milliseconds — no refresh, no polling interval.
Soft-close, anti-snipe clock
Bids placed inside the final 60 seconds extend the auction automatically, up to a capped number of extensions, so a last-second bid competes fairly.
Bid-time payment authorization
Placing a bid creates a Stripe authorization hold for that amount. Only the final winning bid is captured; every other hold is released automatically.
One codebase, two apps
A single React Native/Expo codebase ships to both app stores, with a thin layer of platform-specific code isolated to push notification registration.
Outbid and closing alerts
Push notifications fire the moment a bidder is outbid and again as an auction nears its close, driven by the same Redis event stream that powers in-app live bidding.
Seller listing flow
Sellers create a listing with photos on S3/CloudFront, a starting price, and a reserve price; the auction schema tracks active → closing → sold/unsold as an explicit state machine.
Outcomes that shipped.
Bid-to-all-clients propagation held to sub-second, replacing the 5–15 second polling delays seen in comparable apps. Soft-close mechanics removed the "sniped" complaint pattern common in competitor reviews before BidRush's own launch cohort was large enough to measure independently, and sellers reported listing with confidence knowing a completed auction meant an already-authorized payment rather than a follow-up collections problem. Shipped to both app stores from a lean two-person engineering team inside a single quarter.
What we took with us.
- 01Earlier load-testing of the Socket.io fan-out under many simultaneous watchers on one hot auction should have happened before launch rather than being validated live.
- 02More opinionated default reserve-price guidance for new sellers would have improved first-listing outcomes — early sellers under- or over-set reserves without much guidance.
- 03Instrumentation on notification delivery latency should have existed from day one instead of being validated manually at launch.
Want something like this?
The tiers below are how we'd quote a build in the same space.
Have a build that needs this level of thinking?
Free 30-min audit. We'll tell you what to build, what it'd cost, and whether we're the right shop.