No. 01 · Production work
Promoter platform inside a React Native app
A React and Vite web app that runs inside a React Native client through a WebView: onboarding, KYC, referrals, transactions, withdrawals, and invoice previews.
- Role
- Primary owner from zero to production. I built the app and the WebView integration layer.
- Outcome
- Serves 100K+ users inside the client. Form error rates fell ~50% across KYC and financial flows.
- Stack
- React, Vite, TypeScript, React Native WebView, TanStack Query, and React Hook Form
Problem
Promoter workflows had to feel native inside the mobile app while shipping as a web module the team could deploy on its own.
What I built
- KYC with document upload
- Onboarding with contract signing
- Withdrawals with PDF invoice previews
- Referrals, transactions, and a dashboard
Key decisions
- The auth handshake reads the session token from storage first and falls back to a one-time value injected by the native shell. The injected value is saved and cleared immediately so a re-render can't read it twice, which closed a race condition that had blocked rollout.
- One message listener, bound to both window and document, normalizes native-to-web messages across Android and iOS WebViews. Only type-tagged payloads are handled, so unrelated postMessage traffic is ignored.
- A keyboard-aware layout reads the visualViewport API and exposes the live offset as a CSS custom property, so inputs stay above the on-screen keyboard without a resize event from the native side.
- An in-app debug console, used alongside chrome://inspect, makes issues diagnosable on real devices.
Trade-offs
- Accepted the cost of coordinating over the bridge to avoid maintaining a second, native UI.
- Made forms, auth, uploads, and keyboard handling stable before adding decorative interactions.