Writing2 min read

3-minute React Native builds by caching the native side

Fingerprint the native build, cache the compiled app, and rebuild only the JavaScript. 25-minute CI runs become 3.

Work

Fortune 500 scale, unusual native integrations, and releases that run themselves.

Highlights

  • PepsiCoBluetooth smart bottleGatorade Gx, with sweat patch scanning
  • Nivodav2 redesignLed the release, with a new Stripe checkout
  • Nivoda3x active usersIn my year on the team
  • Nivoda65% smaller appOn iOS, and 40% smaller on Android
  • PepsiCoAutomated releasesGitHub Actions pipelines, and 10x faster native builds
  • CloudWindServerless backendHoumti on AWS Lambda and DynamoDB, 40% cheaper to run

Roles

    • Integrated the Smart Gx Bottle over a custom Bluetooth SDK, with sweat patch scanning for real-time hydration tracking.
    • Migrated releases to GitHub Actions: multi-environment pipelines and automated store submissions.
    • Made native CI builds 10x faster with a fingerprinted build cache.
    • Added support for 10 Latin American countries, switched on per country with feature flags.
    • Supported the Xamarin to React Native migration of the SodaStream app.
    • Built a full eCommerce demo in two weeks, from sign-in to orders.
    • React Native
    • SwiftUI
    • Kotlin
    • GraphQL
    • Fastlane
    • Bluetooth
    • Led the v2 release: a complete redesign with gemstone support.
    • Rebuilt the checkout on Stripe, with multiple shipping options.
    • Made the iOS app 65% smaller and the Android app 40% smaller.
    • Automated releases with CI/CD, cutting manual release work by 60%.
    • Built a reusable, type-safe component library, cutting styling code by 40%.
    • Active users tripled during my year on the team.
    • React Native
    • GraphQL
    • Swift
    • Stripe
    • Push Notifications
    • Developed Houmti, a social app for neighborhoods, with chat, polls and location features.
    • Moved the backend to AWS Lambda, DynamoDB and API Gateway, cutting operating costs by 40%.
    • Engagement rose 30% in six months; daily active users grew 15%.
    • Worked with the technical team to cut bug-related delays by 25%.
    • TypeScript
    • React Native
    • Next.js
    • AWS Lambda
    • DynamoDB
    • Node.js
  1. Details under wraps. More soon.

A few clients I keep private. I can walk you through them directly.

JVM-Simple-Lang

A custom language targeting the JVM

Open
Stars16on GitHub
CategoryProgramming languages
DeveloperOussama Khezour

Information

Developer
Oussama Khezour
Category
Programming languages
Source
Open on GitHub
JVM-Simple-Lang

SAT Heuristic Solver

Heuristic SAT solving with an Electron GUI

Open
Stars10on GitHub
CategorySolvers
DeveloperOussama Khezour

Information

Developer
Oussama Khezour
Category
Solvers
Source
Open on GitHub
SAT Heuristic Solver

context-text-generator

Context-based text generation, written in C

Open
Stars4on GitHub
CategoryText generation
DeveloperOussama Khezour

Information

Developer
Oussama Khezour
Category
Text generation
Source
Open on GitHub
context-text-generator

LunarLander RL

A reinforcement learning solver for Lunar Lander

Open
Stars2on GitHub
CategoryReinforcement learning
DeveloperOussama Khezour

Information

Developer
Oussama Khezour
Category
Reinforcement learning
Source
Open on GitHub
LunarLander RL

Tayssir

Inventory app for small business owners

Private
StarsNoneon GitHub
CategoryBusiness
DeveloperOussama Khezour

Information

Developer
Oussama Khezour
Category
Business
Source
Not open source
Tayssir

2 min read

3-minute React Native builds by caching the native side

Fingerprint the native build, cache the compiled app, and rebuild only the JavaScript. 25-minute CI runs become 3.

Most React Native CI time is spent rebuilding things that did not change. A typical commit touches JavaScript. The pipeline still installs pods, compiles every native module, and runs the full Xcode build to produce an app whose native half is byte-identical to yesterday’s. On a heavy production app that was 25 minutes per run, many runs per day.

The fix is a question: did anything that affects the native build actually change? If the answer is no, do not build it. Restore the compiled app from cache and only rebuild the JavaScript.

Fingerprinting the native side

The hard part is answering that question reliably. Expo’s fingerprint package solves it. It hashes everything that influences the native build output: native source, dependency manifests, config plugins, build properties. Same fingerprint, same native binary.

The fingerprint alone is not enough for a cache key. Env files baked in at build time and assets compiled into the binary have to participate too:

- name: Compute native fingerprint
  id: fingerprint
  run: echo "hash=$(npx fingerprint . | jq -r '.hash')" >> "$GITHUB_OUTPUT"

- uses: actions/cache/restore@v4
  id: native
  with:
    path: DerivedData/Build/Products/Release-iphonesimulator/*.app
    key: ios-v1-${{ steps.fingerprint.outputs.hash }}-${{ hashFiles('.env.qa') }}-${{ hashFiles('src/**/*.png', 'src/**/*.ttf') }}

Anything that belongs in the key but is missing will produce stale builds that look fine and behave wrong. This is the part to be paranoid about. When in doubt, put it in the key. A false miss costs you 25 minutes. A false hit costs you a day of debugging a binary that lies.

The cache hit path

On a hit, every native step is skipped. No CocoaPods, no gems, no Xcode. The only work left is the JavaScript:

npx react-native bundle \
  --platform ios --dev false \
  --entry-file index.js \
  --bundle-output "$WORK/main.jsbundle.js" \
  --assets-dest "$APP"

hermesc -emit-binary -O \
  -out "$APP/main.jsbundle" \
  "$WORK/main.jsbundle.js"

codesign --force --deep --sign - "$APP"

Bundle with Metro, compile to Hermes bytecode, drop it into the cached .app, re-sign. The app is fresh JS in yesterday’s native shell, which is exactly what the commit changed. Three minutes, most of it checkout and bun install.

On a miss, the full build runs once and saves the compiled app under the computed key. The next JS-only commit hits.

Where this idea comes from

This is not a novel trick. Rock builds its remote build cache around the same fingerprint idea, as a framework feature with hosted storage. EAS does related work on its build infrastructure. If you are starting fresh, look at those first.

We built ours as a small composite action plus a repack script, on plain GitHub Actions cache, because the pipeline already existed and the whole thing is under a hundred lines. There is no service to adopt and nothing to migrate. It is a cache key and a shell script.

The payoff

The build stopped being a reason to batch commits. E2E suites run on every PR because producing the app they test is nearly free. And the release pipeline kept its full, boring, from-scratch build, because release binaries should never come out of a cache keyed by anything.

Fast CI is not about faster machines. It is about refusing to repeat work you can prove you already did. The fingerprint is the proof.

Keep reading

Building something with React Native?

Get in touch

iMessage
Today 9:41

Hi, I'm Oussama.

Since 2021 I've worked on apps for PepsiCo, Nivoda and CloudWind, from native modules and architecture to CI/CD and store releases.

What I care about most is the last ten percent, the part users feel but never mention.

Got an app in mind? Freelance contract or full-time role. Tell me what you're building and I'll get back to you.

Sends from your mail app to

Oussama Khezour

Senior software engineer

now
PepsiCo, through Toptal
also
A stealth startup, as technical co-founder
shipping since
2021
platforms
iOS and Android
email

notes

I build software end to end, from architecture to release. What I care about most is the last ten percent, the part users feel but never mention.

Stack

  • React Native
  • TypeScript
  • SwiftUI
  • Kotlin
  • GraphQL
  • Expo
  • Fastlane
  • GitHub Actions
  • AWS Lambda
  • Bluetooth
  • Stripe
  • Next.js

Elsewhere

Top 3% of freelance talent, vetted by Toptal.

Favorites

No favorites yet. Tap the heart on a photo to keep it here.

Screenshots

6 items

Wallpapers

10 items

Apps

A selection of the apps I've worked on, live on the App Store.

Contributor at PepsiCoGatorade GxHydration from a smart bottle and a sweat patchGatorade GxHealth & FitnessView

Selected apps

  • Gatorade GxHydration from a smart bottle and a sweat patch 1.1KView
  • NivodaThe B2B marketplace for diamonds 17View
  • HoumtiA social app for your neighborhoodView

A few of the apps I've worked on, not all of them; the rest I can walk you through directly. Ratings, screenshots and details come straight from the App Store.

Games

  • FlapFly between the pipes
  • 2048Slide the tiles to reach 2048

Two small games I built for this site. Scores stay in your browser.

Gatorade Gx: Sports Science

The Gatorade Company

View
1.1K ratings4.6
Age12+Years old
CategoryHealth & Fitness212 MB

What I did

Senior full-stack developer, through Toptal2023 to now

  • Integrated the Smart Gx Bottle over a custom Bluetooth SDK, with sweat patch scanning for real-time hydration tracking.
  • Migrated releases to GitHub Actions: multi-environment pipelines and automated store submissions.
  • Made native CI builds 10x faster with a fingerprinted build cache.
  • Added support for 10 Latin American countries, switched on per country with feature flags.

Information

Seller
The Gatorade Company
Size
212 MB
Category
Health & Fitness
Compatibility
iOS 15.1 or later
Languages
3 languages
Age Rating
12+
Version
3.3.1, Sep 17, 2026
Gatorade Gx

Nivoda

Nivoda Limited

View
17 ratings3.6
Age4+Years old
CategoryBusiness111 MB

What I did

React Native engineer2022 to 2023

  • Led the v2 release: a complete redesign with gemstone support.
  • Active users tripled during my year on the team.
  • Rebuilt the checkout on Stripe, with multiple shipping options.
  • Made the iOS app 65% smaller and the Android app 40% smaller.
  • Automated releases with CI/CD, cutting manual release work by 60%.
  • Built a reusable, type-safe component library, cutting styling code by 40%.

Information

Seller
Nivoda Limited
Size
111 MB
Category
Business
Compatibility
iOS 16.4 or later
Languages
One language
Age Rating
4+
Version
3.0.5, Aug 27, 2026
Nivoda

Houmti

CloudWind

View
My partDeveloperCloudWind
Years2021 to 2022on the team
PlatformiOSApp Store

What I did

Full-stack engineer2021 to 2022

  • Developed Houmti, a social app for neighborhoods, with chat, polls and location features.
  • Moved the backend to AWS Lambda, DynamoDB and API Gateway, cutting operating costs by 40%.
  • Engagement rose 30% in six months; daily active users grew 15%.
  • Worked with the technical team to cut bug-related delays by 25%.
Houmti

Flap

Oussama Khezour

CategoryGamesArcade
Age4+Years old
LanguageENEnglish

Fly between the pipes

  • Tap, click or press Space to flap.
  • Leave mid-flight and it waits where you left it.
  • Keeps your best score.

Information

Seller
Oussama Khezour
Category
Games
Price
Free
Compatibility
iPhone and iPad
App Privacy
Data Not Collected
Flap

2048

Oussama Khezour

CategoryGamesPuzzle
Age4+Years old
LanguageENEnglish

Slide the tiles to reach 2048

  • Swipe, or use the arrow keys.
  • Undo takes back one move.
  • Keeps your game in progress and your best score.

Information

Seller
Oussama Khezour
Category
Games
Price
Free
Compatibility
iPhone and iPad
App Privacy
Data Not Collected
2048

Book a call

Pick a time and I'll confirm by email. I take calls on weekdays, 13:00 to 21:00 my time (UTC+1).

 

 

 

Oussama Khezour

Senior software engineer

now
PepsiCo, through Toptal
also
A stealth startup, as technical co-founder
shipping since
2021
platforms
iOS and Android
email

notes

I build software end to end, from architecture to release. What I care about most is the last ten percent, the part users feel but never mention.

Stack

  • React Native
  • TypeScript
  • SwiftUI
  • Kotlin
  • GraphQL
  • Expo
  • Fastlane
  • GitHub Actions
  • AWS Lambda
  • Bluetooth
  • Stripe
  • Next.js

Elsewhere

Top 3% of freelance talent, vetted by Toptal.

Choose a wallpaper

Each has a day and a night version.

Wallpaper

Appearance

Automatic

Automatic follows your device.

Device

The same site on the iPad, in landscape.

Display & Brightness

Auto-Lock

Volume

Silent Mode
System Haptics

The phone starts silent.

Sounds & Haptics

Vision

Reduce Motion

Fades instead of springs, and a still wallpaper.

Accessibility

Tracking
None
Analytics
None
Cookies
None

What you change here stays in this browser.

Location

Weather
When You Ask

Sending

Messages
Your Mail App
Calendar
Your Mail App

Privacy & Security

Low Power Mode

Stills the wallpaper and the animations.

Battery Level
100%
State
Not Charging

Your own battery, as your browser reports it.

Battery

About

Name
oussama.org
Built with
Astro, no framework
Type
Inter, JetBrains Mono
Wallpaper
WebGL

© 2026 Oussama Khezour

General

This browserNothing yet

Nothing stored yet.

Storage

Reset

World Clock

  • Today, your timeYou--:--
  • UTC+1Oussama--:--
  •  San Francisco--:--
  •  New York--:--
  •  London--:--
  •  Tokyo--:--

Calls

Weekdays, 13:00 to 21:00 my time.

Book a call

My hours are 13:00 to 21:00 UTC+1 on weekdays, laid on your day. The red line is now.

--

Weather needs JavaScript.

Weather

Your location comes from your time zone unless you share a precise one. The other cities are the ones in your World Clock.

Reminders

    2048

    Score0

    Best0

    Calculator

    0

    Oussama Khezour

    Senior software engineer

    Now at PepsiCo, through Toptal.

    Message