Say hi →
← All posts

Shipping OzSathi: web and iOS from one codebase mindset

OzSathi is a community platform for Nepalis in Australia. Here is how I kept web and native aligned without pretending they are the same app.

OzSathi started as a simple idea: give the Nepali community in Australia one place to buy and sell, share news, find events, ask questions, and message each other. The scope grew fast, but the goal stayed the same. Build something people actually open on their phone.

What shipped first

The web app went live with React and TypeScript on Vercel, backed by Firebase for auth, data, and messaging. That let me move quickly on listings, profiles, Ask Sathi Q&A, and the news feed without rebuilding infrastructure every week.

  • Marketplace listings with verified profiles
  • Ask Sathi: community Q&A
  • Events and news for the diaspora
  • In-app messaging between members

When iOS entered the picture

A lot of the community lives on their phones. A responsive site helps, but notifications, camera access, and App Store discoverability matter for a marketplace. I reached for SwiftUI for the native client instead of forcing a single cross-platform UI layer.

Same product rules, different surfaces. Firebase stays the source of truth. Web and iOS are siblings, not clones.

That meant sharing models and API contracts in my head, not in one giant repo. Auth flows, listing states, and verification rules had to match. Visual polish could diverge where each platform shines.

Stack choices that held up

  • React + TypeScript for the web client and fast iteration
  • Firebase for auth, Firestore, and real-time messaging
  • Vercel for deploys that do not slow down experiments
  • SwiftUI when native feel beat shared components

What I would do again

Ship the web MVP early. Write down user states (draft listing, pending verification, banned user) before the iOS build starts. Treat moderation and trust as product features, not afterthoughts.

OzSathi is live at ozsathi.com. If you are building for a diaspora community, start with the conversations people already have offline. Software should catch up to that, not the other way around.