← Back to case studies

Production work

Promoter Platform in a React Native Client

React/Vite web app embedded inside a React Native client via WebView, serving 100K+ users — onboarding, KYC, referrals, transactions, withdrawals, and invoice preview.

ReactViteTypeScriptReact Native WebViewTanStack QueryReact Hook Form
Problem
Promoter workflows needed to feel native inside the mobile app while shipping as an independently deployable web module.
My role
Primary owner, zero to production — built the app and the WebView integration layer.
Result
Served to 100K+ users inside the client; form error rates down ~50% across KYC and financial flows.

Technical decisions

  • Auth handshake resolves the session token from storage first, falling back to a one-time value injected by the native shell — the injected value is persisted and cleared immediately so a re-render can't read it twice, closing a race that had blocked rollout.
  • A single message listener bound to both window and document normalizes native-to-web messaging across Android and iOS WebViews, gated by a type-tagged payload so unrelated postMessage traffic is ignored.
  • Keyboard-aware layout reads the visualViewport API to compute a live offset as a CSS custom property, so inputs stay clear of the on-screen keyboard without a native-side resize event.
  • Built an in-app debug console for on-device diagnosis alongside chrome://inspect.

Trade-offs

  • Accepted bridge-coordination overhead to avoid maintaining a duplicate native UI.
  • Prioritized stable forms, auth, uploads, and keyboard handling before decorative interactions.

Evidence from the build

KYC with document upload

Onboarding with contract signing

Withdrawals with PDF invoice preview

Referrals and dashboard

Dark mode
Back to top