The Challenge
SazCars is a luxury car auction marketplace operating across UAE and Saudi Arabia. The client needed a mobile app where buyers could browse vehicle listings, join live auctions, and bid on cars in real time — all from their phones, across both iOS and Android.
Real-time auctions present specific engineering challenges that standard e-commerce doesn't. Multiple buyers bidding simultaneously means that every bid update needs to propagate to all connected users within milliseconds, and each bid needs to be validated server-side before acceptance. A client-side-only implementation would allow bid manipulation and create inconsistent auction states across users.
The GCC luxury car market also required specific considerations: cross-border functionality between UAE and Saudi, high expectations for app performance and polish from a premium demographic, and both iOS and Android coverage (iOS penetration in the UAE is 40–50%).
The Architecture
Cloudemy chose Flutter for the cross-platform build and a layered backend architecture to handle the real-time and validation requirements.
Flutter (iOS + Android)
One Dart codebase delivers both the App Store and Play Store builds. Flutter's rendering engine maintains smooth UI at 60fps during rapid bid-count updates, which would stutter in a less capable framework.
.NET Backend
The primary business logic layer. Handles vehicle listings, user authentication, auction creation, bid submission validation and auction close sequencing. All writes go through .NET before touching Firebase.
Firebase Realtime Database
The real-time broadcast layer. After the .NET backend validates a bid, it writes to Firebase. Firebase propagates the new bid state to all connected participants simultaneously — fast delivery without client-side manipulation risk.
Bid Validation Architecture
The most critical design decision was where bid validation lives. A naive implementation would trust the client to submit valid bids and let Firebase sync the result. This would allow race conditions (two simultaneous bids both claiming to be the winning bid) and potentially allow bid manipulation.
SazCars uses a server-authoritative model: the Flutter app submits a bid to the .NET backend API. The .NET layer checks the bid is higher than the current price, the auction is still open, and the bidder hasn't exceeded any limits. Only if all validations pass does .NET write the confirmed bid price to Firebase. Firebase then fans out the confirmed price to all clients. The client never writes directly to Firebase for bid-sensitive data.
The auction close logic also runs server-side: a .NET background service monitors auction timers and, when an auction ends, executes the close sequence — locking further bids, determining the winner and triggering the notification flow.
Cross-Platform on iOS and Android
Flutter's single codebase means both the iOS App Store build and the Android Play Store build come from the same Dart code. This was particularly important for a GCC luxury market where iOS adoption is high. Building two separate native apps (Swift + Kotlin) for the same scope would have roughly doubled the development cost and timeline. With Flutter, both platforms were submitted simultaneously.
Both the Play Store and App Store versions of SazCars are live today and serve UAE and Saudi users.
Results
SazCars is live on both the Apple App Store and Google Play Store, serving buyers and sellers in the UAE and Saudi Arabia. The real-time bidding infrastructure handles live concurrent auctions, and the server-authoritative validation model has kept the auction data consistent since launch. The GCC luxury automotive market was a demanding first deployment context for a real-time platform — high user expectations, cross-border functionality and iOS-critical market — and SazCars has been live in production since its launch.