Skip to content
All projects

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
3 native payment SDKs
Loyalty points, deep links & attribution
~30% faster app performance
GoSIM
Choosing a data plan for ItalyMy eSIMs screen with remaining data and top-upInstalling a new eSIM for Turkey

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.

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.
Next projectPresalio — field sales & distribution suite