A React Native CLI mobile app for browsing products, searching quickly, and saving favorites with a production-style structure.
- Browse a paginated product catalog from a public API
- Search products with instant local filtering and debounced API search
- Open a product detail screen
- Add and remove favorites
- Persist favorites and product cache across app restarts
- Refresh data when the app returns from background
- React Native CLI
- TypeScript
- Redux Toolkit
- React Redux
- React Navigation
- AsyncStorage
src/
api/
productApi.ts
screens/
ProductListScreen.tsx
ProductDetailScreen.tsx
FavoritesScreen.tsx
components/
ProductCard.tsx
SearchBar.tsx
Loader.tsx
EmptyState.tsx
store/
store.ts
productsSlice.ts
favoritesSlice.ts
hooks/
useDebounce.ts
types/
product.ts
- Node.js 22+
- Android Studio with SDK, emulator, and NDK installed for Android
- Xcode and CocoaPods for iOS builds on macOS
npm installnpm startnpm run androidnpx pod-install ios
npm run iosproductApi.tsis the single place for network requests to keep API logic isolated.- Redux Toolkit manages product list state, pagination, search state, and favorites state.
- AsyncStorage persists both favorites and a small product cache so the app restores content quickly after restart.
App.tsxcoordinates persistence and app lifecycle handling withAppState.- Search uses a hybrid approach: instant local filtering for responsiveness, then debounced API search for fresher results.
FlatListis used for scalable rendering and infinite scroll.
FlatListhandles large lists efficiently.- Search is debounced to reduce unnecessary API calls.
- Cached product data is restored before the next network refresh to reduce perceived load time.
- Infinite scrolling appends data instead of replacing the list for normal browse mode.
- Add reducer and API tests
- Add image placeholders and better retry UX for network errors
- Add richer favorites hydration for full offline favorite cards on cold start
- Add icons and slightly more polished UI details
- Verify and polish the iOS experience on device/simulator
This project is a native mobile app built with React Native CLI, so it does not have a browser deployment URL like a web app. For submission, the recommended proof is the GitHub repository plus a demo video and, if needed, an APK build.
