FilmFinder is a cross-platform movie discovery application that allows users to search for and explore movies using the OMDb API (Open Movie Database). The project showcases modern mobile development practices with implementations in both native Android (Kotlin) and React Native (TypeScript).
- Search for Movies: Find detailed information about movies by title
- Actor Search: Search for movies featuring specific actors in local database
- Extended Search: Comprehensive movie search with filtering options and pagination
- Local Database: Save your favorite movies for offline viewing
- Responsive Design: Optimized for both portrait and landscape orientations
- Dark Mode Support: Seamless light and dark theme switching (Android)
- Cross-Platform: Available in both native Android and React Native implementations
- Location:
apps/android/
- UI: Jetpack Compose with Material 3 design
- Architecture: MVVM (Model-View-ViewModel)
- Local Storage: Room Database
- Network: HttpURLConnection with custom ApiClient
- Image Caching: Custom LRU cache implementation
- Dependency Injection: Manual dependency injection
- Navigation: Jetpack Navigation Compose
- Location:
apps/reactNative/
- UI: React Native with native components
- Architecture: Custom hooks with state management
- Local Storage: Expo SQLite
- Network: Fetch API with custom service layer
- Image Handling: React Native Image with caching
- Navigation: React Navigation 6
- Platform: Expo managed workflow
- API: OMDb API for movie data
- Database: SQLite for local storage
- Network: RESTful API communication
- Image Loading: Efficient caching mechanisms
- Language: Kotlin
- UI Framework: Jetpack Compose
- Architecture Components: ViewModel, LiveData, Room
- Build System: Gradle with Kotlin DSL
- Minimum SDK: API 24 (Android 7.0)
- Language: TypeScript
- Framework: React Native 0.79+
- State Management: React Hooks (useState, useEffect, custom hooks)
- Database: Expo SQLite
- Navigation: React Navigation 7
- Development: Expo SDK 53
FilmFinder/
├── apps/
│ ├── android/ # Native Android application
│ │ ├── app/
│ │ │ ├── src/main/java/com/example/filmfinder/
│ │ │ │ ├── data/ # Data layer (repositories, API, database)
│ │ │ │ ├── ui/ # UI layer (screens, components, themes)
│ │ │ │ └── utils/ # Utility classes
│ │ │ └── build.gradle.kts
│ │ ├── gradle/
│ │ └── settings.gradle.kts
│ └── reactNative/ # React Native application
│ ├── src/
│ │ ├── components/ # Reusable UI components
│ │ ├── screens/ # Screen components
│ │ ├── data/ # Data models, API, database
│ │ ├── hooks/ # Custom React hooks
│ │ ├── navigation/ # Navigation configuration
│ │ └── utils/ # Utility functions
│ ├── App.tsx
│ ├── package.json
│ └── app.json
├── README.md
├── ROADMAP.md
└── LICENSE
- Android Studio (for Android development)
- Node.js (v16 or higher for React Native)
- Expo CLI (for React Native development)
- OMDb API Key (free at https://www.omdbapi.com/)
-
Clone the repository
git clone <repository-url> cd FilmFinder
-
Open Android project
cd apps/android # Open in Android Studio or build with Gradle
-
Configure API key
- Create
local.properties
in the android app directory
OMDB_API_KEY="your_api_key_here" OMDB_BASE_URL="https://www.omdbapi.com/"
- Create
-
Build and run
./gradlew assembleDebug # Or run directly from Android Studio
-
Navigate to React Native directory
cd apps/reactNative
-
Install dependencies
npm install
-
Configure API key
- Create
.env
file in the root of the reactNative directory
# OMDb API Configuration OMDB_API_KEY=your_api_key_here OMDB_BASE_URL=https://www.omdbapi.com/
- Create
-
Start the development server
npx expo start
-
Run on device/simulator
# For Android npx expo run:android # For iOS (macOS only) npx expo run:ios
- MovieRepository: Central data access point for both local and remote data
- AppDatabase: Room database configuration for movie storage
- ApiClient: HttpURLConnection-based network client
- ImageCacheManager: Custom LRU cache for efficient image loading
- ViewModels: State management for each screen
- MovieRepository: Unified data access layer
- DatabaseService: Expo SQLite service for local storage
- ApiService: Fetch-based API client
- Custom Hooks: State management (useMovieSearch, useActorSearch, etc.)
- Navigation: React Navigation setup
Feature | Android (Kotlin) | React Native (TypeScript) |
---|---|---|
Movie Search | ✅ | ✅ |
Actor Search | ✅ | ✅ |
Extended Search | ✅ | ✅ |
Local Database | ✅ (Room) | ✅ (Expo SQLite) |
Image Caching | ✅ (Custom LRU) | ✅ (Built-in) |
Offline Support | ✅ | ✅ |
Dark Mode | ✅ | 🚧 (Planned) |
Landscape/Portrait | ✅ | ✅ |
Network Detection | ✅ | ✅ |
Error Handling | ✅ | ✅ |
- Hot Reload: Both platforms support hot reload for faster development
- Type Safety: Kotlin and TypeScript provide compile-time type checking
- Modern UI: Material 3 (Android) and native components (React Native)
- State Management: Reactive state management on both platforms
- Navigation: Type-safe navigation systems
- Testing: Unit test foundations included
MIT License
Copyright (c) 2025 Sanithu Jayakody
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
- OMDb API for providing the movie data
- Android Jetpack for modern Android development toolkit
- React Native for cross-platform mobile development
- Expo for streamlined React Native development
- Material Design for design principles
See ROADMAP.md for planned features and development timeline.
Note: This project demonstrates modern mobile app development practices across two different platforms, showcasing how the same core functionality can be implemented using platform-specific approaches while maintaining consistent user experience.