PassportPlate
An offline mobile app that turns "what should I cook tonight" into a spin of the globe: land on a country, get an authentic recipe, and make dinner a small adventure.

Architecture
Offline-first recipe discovery
Mobile app
React Native client
Globe interaction and result UI
On-device logic
Selection and recipe matching
Weighting · randomness · dietary rules
Local data
Recipe catalog
Available offline after installation
Saved app state
History · favorites · preferences
Country and recipe result
Classic · Creative · Iconic Dish
An offline mobile app that turns "what should I cook tonight" into a small spin of the globe.
Overview
PassportPlate is an offline mobile app built around one simple mechanic: instead of scrolling through recipes trying to decide what to cook, you spin a globe. It lands on a country, hands you an authentic recipe from that country, and that's dinner sorted. No endless searching, no fifteen open tabs, no decision fatigue.
Not a Game, But Playful
PassportPlate isn't a cooking game, and it doesn't pretend to be one. But it's intentionally playful. There's a short spinning animation before the country reveals itself, and that small delay is doing real work: it creates the same kind of anticipation you get right before opening a reward in a game. Not gambling, not addictive, just enough suspense to make "what's for dinner" feel like a small discovery instead of a chore.
The goal was never competition. It was exploration. Every spin turns an ordinary weekday meal into a small adventure, and the app quietly nudges people toward cuisines they'd probably never search for on their own.
Every result is built from three roles: a main dish, a sauce, and a twist, each tied to a country. Land on three different countries and the app hands you a Creative recipe, its structure, sauce, and finishing touch sourced from each one. Land on the same country three times in a row and it surfaces that country's Iconic Dish instead, alongside other real, Classic recipes from the same kitchen.

What's Inside
- Random Country Spin: Spin the globe and let all three roles land at random.
- Custom Mode: Search and pick a specific country for each role yourself, instead of leaving it to chance.
- Recipe Generation: Every spin comes with an authentic, cookable recipe, tagged Classic, Creative, or Iconic Dish.
- Country Information: Flavour origins and a "why it works" or background story alongside the recipe, not just instructions.
- Recipe History: Past spins stay saved instead of disappearing the moment you close the app.
- Favorites: Keep the meals worth cooking again.
- Dietary Preferences: Filter results so the randomness still respects what you can actually eat.

Premium unlocks additional countries, more advanced recipe discovery, favorites and history, and removes ads. The core loop, spin, get a country, cook a real meal, works fully for free.
Built to Respect Your Data
PassportPlate works completely offline once installed. There's no account to create, no cloud sync, and no analytics or tracking running in the background. You open it, you spin, you cook. That's the whole loop.
Why I Built It
PassportPlate sits at the intersection of three things I genuinely enjoy building: interfaces that feel good to use, the small algorithms behind them (weighting, randomness, recipe matching), and experiences that make an everyday routine, in this case deciding what's for dinner, a little more enjoyable than it was before.
Behind the Project
- Read the full story: How My Girlfriend Accidentally Gave Me the Idea for PassportPlate.
Links
Engineering concepts used
Building an Offline-First React Native App
A practical architecture for React Native apps that remain useful without a connection: local source of truth, migrations, sync queues, conflicts, and honest failure handling.
React Native Performance Visualized: JS Work, Rendering & Dropped Frames
See how JavaScript, React rendering, native/UI work, lists, images, and state updates compete for a frame—and which optimizations actually help.
RevenueCat + Expo: Subscriptions, Lifetime Purchases, and Restore
How to add in-app purchases to an Expo app with RevenueCat: entitlements over product IDs, why restore is mandatory, and why the client is the wrong place to trust a purchase.
How to Ship a React Native Expo App to the App Store with EAS
The full path from a working Expo project to an approved App Store release: build profiles, credentials, versioning, TestFlight, and the review rejections that are easiest to avoid.
Key Highlights
- •Designed a random-discovery mechanic that replaces recipe search with a playful globe spin
- •Built a fully offline React Native/Expo app with no backend dependency for core functionality
- •Curated authentic, cookable recipes balanced against everyday accessibility
- •Kept the app account-free, cloud-free, and analytics-free by design