Yet Another Movie Database β a React Native mobile application built with Expo
react-yamdb is a mobile movie discovery application powered by the TMDB API.
It demonstrates modern React Native development practices including scalable navigation, server-state management with React Query, theming, and performance optimization.
- Purpose
- Screenshots
- Features
- Tech Stack
- Architecture
- Performance Optimizations
- Project Structure
- Quick Start
- TMDB API Key
- Development & Debugging
- Future Improvements
- Resources
- License
This project demonstrates a production-style React Native architecture including:
- Feature-based architecture
- Scalable navigation structure
- Server state management with React Query
- Mobile-first design system
- Cross-platform development using Expo
Screenshots of the app in Dark and Light mode.
| Home | Movie Details | Cast Member |
|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
- Browse movies and TV series using the TMDB API
- Modern mobile navigation with React Navigation
- Asynchronous data fetching
- Light / Dark theme support
- Responsive mobile UI
- Optimized mobile user experience
- React Native
- Expo
- TypeScript
- React 19
- React Navigation
- Native Stack
- Bottom Tabs
- TanStack React Query β server state management
- Axios β API requests
- TMDB REST API
- React Native Reanimated
- React Native Gesture Handler
- React Native SVG
- React Native Linear Gradient
- React Native Safe Area Context
- Expo Image
- React Native Video
- React Native WebView
- YouTube Iframe Player
- Expo Dev Client
- ESLint
- TypeScript
The project follows a feature-based architecture to improve scalability and maintainability.
Key principles:
- Feature isolation β each feature manages its own screens, hooks, services and types
- Shared UI layer β reusable design system components
- Centralized API layer β network logic separated from UI
- React Query data management β server state handled with caching and background updates
Several techniques are used to keep the application responsive on mobile devices:
- React Query caching β reduces unnecessary network requests and keeps data fresh in the background
- High-performance image rendering with Expo Image β improved decoding, caching and memory usage compared to the default React Native
Image - Image caching (memory + disk) β minimizes network usage and improves scrolling performance in lists and carousels
- Optimized list rendering β using
FlatListvirtualization for large collections
The project is organized using a feature-based modular structure.
Each feature encapsulates its own components, navigation, screens, API layer and queries.
This structure improves:
- scalability
- maintainability
- separation of concerns
- domain isolation
src
βββ api # API clients and shared services
βββ assets # fonts, images, splash screens
βββ config # environment variables and app configuration
βββ design # design system (components, theme, tokens)
βββ features # domain-driven features
β βββ home
β β βββ api
β β βββ components
β β βββ navigation
β β βββ queries
β β βββ screens
β βββ movie
β βββ person
β βββ profile
β βββ settings
βββ navigation # global navigation configuration
βββ types # shared TypeScript types
βββ utils # utility helpersnpm install- Start Expo β
npm start - Run on Web β
npm run web - Run on Android β
npm run android - Run on iOS β
npm run ios
π‘ When using
npm start, theopen Android/iOSoption will automatically launch the first available device or emulator without prompting you to choose. To target a specific device or emulator, usenpm run android/ios.
This project uses the TMDB API to fetch movie and TV data. You need an API key to run the app.
- Go to TMDB Developer Portal
- Log in or create a free account
- Navigate to API β Create API Key
- Fill in the required information (application name, use case, etc.)
- Copy your API Key (v3 auth)
- Create a new
.envfile at the root of the projet - Copy the content of the example environment file
.env.examplein to your.envfile - In your
.envreplace theYOUR_API_KEY_HEREplaceholder with your API key - Save the file
- Start the app as usual
β οΈ Important: Do not commit your.envfile. It is ignored by Git to protect your API key.
The API key is automatically loaded from.envand accessed viaenv.TMDB_API_KEYin the code.
Builds the app with all native dependencies and installs it on the connected emulator or device.
# π€ Android
npm run android
# π iOS
npm run iosRuns the app with native dependencies enabled.
npm startThere are several options for debugging TypeScript/JavaScript:
After starting the app in Dev Client mode:
- Press
jor selectopen debugger - Chrome will open β Console, Sources, and Network tabs available
- Enable Hermes in
app.json:"jsEngine": "hermes" - Install Flipper
- Start your Dev Client
β your app will appear in Flipper
β set breakpoints, view logs, check performance, inspect network requests
console.log("Request", request);
console.log("Response", response);β View logs in adb logcat (Android) or the Xcode console (iOS)
Production builds with optimized performance and no development tools.
# π€ Android - Build and install release APK
npm run android:release
# π iOS - Build release version (requires physical device or simulator)
npm run ios:releaseπ‘ Release builds are optimized for performance and don't include development tools like hot reloading or debugging capabilities.
# Clear existing logs and monitor React Native messages
adb logcat -c && adb logcat | findstr ReactNativeJS
# Monitor specific patterns (warning, errors, etc.)
adb logcat | Select-String -Pattern "(warning|error|etc|ReactNativeJS)"
# View all logs from your app package
adb logcat | findstr "com.anonymous.reactyamdb"# View iOS device logs (requires device connected)
xcrun devicectl list devices
xcrun devicectl view logs --device [DEVICE_ID] --streamPotential enhancements:
- Offline support
- Favorites / Watchlist
- Movie search
- Infinite scrolling
- Unit testing with Jest
- React Native Documentation β https://reactnative.dev/docs/getting-started
- Expo Documentation β https://docs.expo.dev
- React Navigation β https://reactnavigation.org
- TanStack Query β https://tanstack.com/query/latest
- TMDB API β https://developer.themoviedb.org
- Bulletproof React Architecture β https://github.com/alan2207/bulletproof-react
- React Query Patterns (TkDodo Blog) β https://tkdodo.eu/blog
This project is licensed under the MIT License.
Built with β€οΈ using React Native & Expo by jfcere





