2026 · Goubba
GoSIM — eSIM app rebuilt in React Native
Rebuild of Goubba's travel eSIM app from Vue + Capacitor to React Native (Expo) — native Stripe, PayPal and Airwallex payments, a loyalty points system, deep links and marketing attribution, with contributions to the Laravel backend.
- Role
- Main mobile developer · backend contributor
- Company
- Goubba
- Year
- 2026
- Stack
- React NativeExpo RouterTypeScriptLaravelStripePayPalAirwallexAppsFlyerMeta SDKFirebase

Context
GoSIM sells travel eSIMs inside the Goubba ecosystem: pick a destination, pay, and install a data plan without visiting a shop. The first version was a Vue 3 app wrapped in Capacitor. As the product grew — top-ups, partial payments, guest checkout, loyalty points, marketing campaigns — the WebView shell reached its limits: janky transitions on mid-range Android phones, payment SDKs with partial Capacitor support, and a custom bridge for every native feature.
Role
Main contributor on the mobile rewrite (~90% of commits): app architecture, migration plan and most features. Backend contributions in Laravel for the same features — points, maintenance mode and payment flows — so each one shipped end to end.
Challenge
- Replace a live app without a feature freeze — v2 had to reach parity while v1 kept shipping fixes.
- Native payments — Stripe, PayPal and Airwallex each require their official SDK and confirmation flow.
- Data for marketing — campaigns need attributed installs and purchases, and links that open the right screen.
- Device compatibility — a wrong "yes" means a paid plan the user cannot install.
Approach
Expo Router with thin routes
File-based routing on Expo, with logic in feature folders (auth, destinations, checkout, eSIMs, points). The same structure later made GoSIM a mini-app package of the Go super-app, in a pnpm + Turborepo monorepo.
Three payment providers, one checkout
Stripe, PayPal and Airwallex integrated through their native SDKs behind a single checkout flow; partial payments and top-ups reuse the same path.
GoPoints loyalty system
Points earned on every purchase and redeemed for coupons — app screens (balance, coupon codes, results) and the backend rules that grant and spend points.
Deep links, AppsFlyer and Meta
Custom gosim:// scheme, universal/app links and AppsFlyer OneLink route campaign links to the exact destination or offer; AppsFlyer and the Meta (Facebook) SDK provide install and purchase attribution.
Running a live app
Remote maintenance mode without an app-store release, Firebase push notifications and in-app messaging, and centralised error handling with recoverable states.
Compatibility check before checkout
A native iOS/Android module reads the device's own eSIM signals, published as react-native-esim-compatibility-checker.
Results
- Native-feeling iOS and Android app from one TypeScript codebase.
- Three payment providers, loyalty points and campaign deep links in production.
- Attribution data used by the marketing team to run campaigns.
- Fewer "my eSIM doesn't work" support cases.


