23 / 24Next →
Cross-platform commerce app · iOS & Android2025–26

GTIM Mobile

The Global Trading, Inc. customer app for iOS and Android. Built with Expo and React Native on top of the company's existing commerce platform, it lets customers place, pay for, track and manage orders from their phone.

ContextSoftware Engineer, Global Trading, Inc.
Year2025–26
TypeMobile
StatusPublished
RoleMobile application development & store release
2Stores: App Store and Google Play
3Sign-in methods: email, Google and Apple
30+Screens across five route groups

Project media coming soon

Screenshots and demo videos for this case study will appear here.

Overview

GTIM brings Global Trading, Inc.'s existing web commerce system to mobile. It uses the same backend as the website, so the catalogue, accounts, quota balances and orders stay consistent across channels. Guests can browse and build a cart. Signed-in customers can check MDT quota balances, manage addresses and coupons, pay with PayPal and follow each order through to their order history.

React NativeExpoTypeScriptNativeWindPayPalAxiosSecureStoreApple Sign-In
Challenge

The app had to sit on an established backend without changing how that backend works. It also had to cope with unreliable mobile networks and expiring sessions, and support products that need customer-supplied files, including from guests who have not signed in yet. On top of that it had to pass both App Store and Google Play review.

Approach

I used Expo SDK 54 with React Native 0.81 on the New Architecture. Typed Expo Router groups cover authentication, tabs, products, checkout and profile, styling uses NativeWind, and each domain (auth, products, cart, checkout, orders, addresses) has its own service module. Contexts hold user and cart state, and tokens are kept in the device keychain via SecureStore. EAS Build and Submit produce the store binaries, with build numbers versioned remotely and incremented automatically.

Outcome

GTIM is published on the Apple App Store and Google Play as a complete mobile ordering channel for GTIM customers, sharing one backend with the web store.

System architecture
01App shellExpo SDK 54 · React Native 0.81 · Expo Router

File-based route groups for authentication, tabs, products, checkout and profile, built on the New Architecture.

02StateReact Context · AsyncStorage

User and cart contexts, plus a persistent local cart so guests can shop before signing in.

03NetworkingAxios service layer

Separate modules for auth, products, cart, checkout, orders, addresses and users, sharing interceptors and normalised error handling.

04SecuritySecureStore · Apple & Google sign-in

Tokens are kept in the iOS Keychain or Android Keystore, and universal links on gtim.com route into the app.

05PaymentsPayPal · WebView · deep links

The server creates the PayPal order, the customer approves it in an in-app WebView, and the app's custom URL scheme returns them to checkout.

06DeliveryEAS Build & Submit

Separate development, preview and production profiles, with remote, auto-incremented build numbers for store releases.

Engineering decisions
01

Single-flight token refresh

When a request fails with a 401, the Axios interceptor starts one refresh call. Other requests that fail during the refresh wait in a queue and replay with the new token, and the user is logged out only if the refresh itself fails. Screens that load several resources at once therefore never set off a burst of refresh calls.

02

Guest carts that keep their files

Some products include services that need customer artwork. A guest's cart, including those service line items and their pending files, is saved on the device. When the guest signs in, the local cart syncs to the server and the queued files upload, so nothing is lost at the sign-in step.

03

In-app PayPal without leaving checkout

The backend creates the PayPal order and the customer approves it in a WebView. The return and cancel URLs resolve to the app's own scheme, so the app catches the result, confirms the payment with the server and continues to the success screen without handing off to a browser.

04

Built to pass store review

Apple Sign-In sits beside Google sign-in, as Apple requires when an app offers social login. Camera and photo-library permissions carry purpose strings, the encryption-export declaration is set, and Android intent filters and iOS associated domains are configured for deep links.

What I built
01Guest browsing plus email, Google and Apple authentication with verification and recovery
02Global product and service search with cached catalogue data
03MDT quota balance lookup, cart, coupons, shipping addresses and order history
04Multi-step checkout with order review, artwork upload and PayPal payment
05Profile management with camera and photo-library avatar upload
Next projectMindAware →