Confidential (student housing marketplace) · Property technology
The Bidnest marketplace wrapped with Capacitor, so three platforms ship from one build with nothing rebuilt.
Category
Mobile
Year
2024
Industry
Property technology
Optimization
Nothing done twice


How it is optimized
Nothing done twice
Three platforms from one build, with nothing rebuilt for native.
The existing web application is wrapped with Capacitor instead of being rewritten twice. Bidding, messaging and checkout are the same code on web, iOS and Android, so a fix ships to three platforms at once.
What keeps it lean
- 01One codebase for web, iOS and Android
- 02Zero features rebuilt for native
- 03One fix, three platforms
Caching, batching and reuse instead of regenerating the same work.
The challenge
Students live on their phones. A bid placed from a laptop can be outbid during a lecture, and a browser tab does not wake anyone up. The marketplace already existed on the web, and building two native apps from scratch would have doubled the work and split the team. Bidnest needed to be in students’ pockets without becoming three products.
The work
Rather than rebuild natively, we wrapped the existing Next.js application with Capacitor, tuned the bidding and messaging screens for touch and safe areas, added native navigation, an offline screen, deep links from notifications and session persistence, and shipped to both stores from the same repository as the website.
Inside the product
More than one screen.
The product name and data have been changed at the client's request; these screens recreate Bidnest Mobile App as it was built.

Student dashboard
Bids, lease steps and services inside the native shell.

Messaging
Threads with landlords and providers, opened by deep link from notifications.

Browse
The map and search from the web platform, tuned for touch.
How it is built
Architecture
Capacitor hosts the production web build inside a native WebView on iOS and Android. Native plugins cover what the browser cannot; everything else, from real-time bids to Stripe checkout, is the same code that serves the web platform, so a fix ships to three platforms at once.
Key features
Challenges & solutions
Challenge
WebSocket connections drop when the app moves to the background, so bids could arrive late after resume.
Solution
Reconnect on resume with a full state re-sync, so the listing shows the committed bid history the moment the app returns.
Challenge
Store review rejects apps that behave like a website in a frame.
Solution
Native navigation gestures, safe-area layouts and an offline screen, with the web chrome removed inside the shell.
The impact
What became easier, better or more effective.
Bidnest reached the App Store and Google Play without a second codebase or a second team. Students bid, message and pay from their phones with the same flows as the web platform, get woken up by a notification when they are outbid, and a fix ships to all three platforms at once.
3
platforms from one build
The website, the iOS app and the Android app ship from a single repository and release branch.
0
features rebuilt for native
Real-time bids, messaging and Stripe checkout are the same code that serves the web platform, so nothing was built twice.
2
app stores from the same release branch
Native navigation, safe-area layouts and an offline screen, so the app behaves like an app rather than a website in a frame.
Stack
Native shell
- Capacitor
- iOS
- Android
Frontend
- Next.js
- TypeScript
Styling
- TailwindCSS
- ShadCN
Backend
- Supabase
- PostgreSQL
Real-time
- WebSockets
Payments
- Stripe
Notifications
- Resend
- Twilio
Analytics
- PostHog
Optimization
Nothing done twice
Caching, batching and reuse instead of regenerating the same work.
Conscious AILet's talk
Tell us where you are. We'll say plainly what we would do next, and whether we're the right team for it.