All projects

Confidential (student housing marketplace) · Property technology

The Bidnest marketplace wrapped with Capacitor, so three platforms ship from one build with nothing rebuilt.

Client project, name changed on request

Category

Mobile

Year

2024

Industry

Property technology

Optimization

Nothing done twice

Bidnest Mobile App on a phone
Bidnest Mobile App on a phone

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.

Bidnest Mobile App: Student dashboard on a phone

Student dashboard

Bids, lease steps and services inside the native shell.

Bidnest Mobile App: Messaging on a phone

Messaging

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

Bidnest Mobile App: Browse on a phone

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

Native iOS and Android builds from the web codebase
Same bidding, messaging and payment flows as the web platform
Touch-first layouts with safe-area handling
Session kept on device between launches
Deep links from notifications into the exact listing
Offline screen instead of a browser error

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.

01

3

platforms from one build

The website, the iOS app and the Android app ship from a single repository and release branch.

02

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.

03

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 AI

Let'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.