arturoburigo/ScreenVerse-App
Mobile application build in React Native to connect with others and look for movies and series
ScreenVerse ๐ฌ
A modern React Native mobile application for discovering, tracking, and rating movies and TV series. Built with Expo, TypeScript, and Clerk authentication.
๐ฑ Features
๐ฏ Core Features
- Movie & TV Series Discovery: Browse through curated collections of movies and TV series
- Personalized Recommendations: AI-powered recommendations based on your preferences
- Watchlist Management: Save and organize titles you want to watch
- Rating System: Rate and review movies and TV series
- Search Functionality: Find titles by name, genre, or other criteria
- User Authentication: Secure login with Clerk authentication
- Cross-Platform: Works on iOS, Android, and Web
๐จ User Interface
- Dark Theme: Modern dark UI optimized for media consumption
- Responsive Design: Adapts to different screen sizes
- Smooth Navigation: Intuitive tab-based navigation
- Custom Fonts: Poppins font family for better readability
- Loading States: Smooth loading indicators and transitions
๐ Authentication & Security
- Clerk Integration: Professional authentication system
- Token Management: Automatic token refresh and secure storage
- Session Persistence: Stay logged in across app sessions
- Secure Storage: Encrypted token storage with Expo SecureStore
๐๏ธ Architecture
Tech Stack
- Frontend: React Native with Expo
- Language: TypeScript
- Authentication: Clerk
- State Management: React Hooks
- Navigation: Expo Router
- HTTP Client: Axios
- Storage: AsyncStorage & SecureStore
- Icons: Expo Vector Icons
Project Structure
src/
โโโ app/ # App screens and navigation
โ โโโ auth/ # Authentication screens
โ โโโ home/ # Home screen with recommendations
โ โโโ search/ # Search functionality
โ โโโ movie-details/ # Movie/TV series details
โ โโโ myspace/ # User's personal space
โ โโโ profile/ # User profile management
โ โโโ rate/ # Rating interface
โ โโโ public/ # Public landing page
โ โโโ storage/ # Token storage utilities
โโโ components/ # Reusable UI components
โ โโโ Button/ # Custom button component
โ โโโ Card/ # Movie/TV series card
โ โโโ Header/ # App header component
โ โโโ Navbar/ # Bottom navigation
โ โโโ SearchBar/ # Search input component
โโโ services/ # API services and business logic
โ โโโ api.ts # Base API configuration
โ โโโ authService.ts # Authentication service
โ โโโ searchService.ts # Search functionality
โ โโโ userService.ts # User management
โ โโโ watchlistService.ts # Watchlist operations
โ โโโ ratedService.ts # Rating operations
โโโ hooks/ # Custom React hooks
โโโ types/ # TypeScript type definitions
โโโ utils/ # Utility functions and data
โโโ movies.json # Movie database
โโโ series.json # TV series database
โโโ recommended.json # Recommendations data
๐ Getting Started
Prerequisites
- Node.js (v18 or higher)
- npm or yarn
- Expo CLI
- iOS Simulator (for iOS development)
- Android Studio (for Android development)
Installation
-
Clone the repository
git clone https://github.com/yourusername/screenverse.git cd screenverse -
Install dependencies
npm install # or yarn install -
Environment Setup
Create a.envfile in the root directory:EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key
-
Start the development server
npm start # or yarn start -
Run on your preferred platform
# iOS npm run ios # Android npm run android # Web npm run web
๐ง Configuration
Clerk Authentication Setup
- Create a Clerk account at clerk.com
- Create a new application
- Copy your publishable key
- Add it to your
.envfile
Backend API Configuration
The app connects to a backend API. Update the base URL in src/services/api.ts:
const api = axios.create({
baseURL: 'http://localhost:8080', // Change to your API URL
// ...
});๐ฑ App Screens
๐ Home Screen
- Displays recommended content
- Shows curated movie and TV series collections
- Horizontal scrolling carousels
- Quick access to trending content
๐ Search Screen
- Search movies and TV series by title
- Filter by genre, year, or type
- Real-time search results
- Advanced search options
๐ฌ Movie Details Screen
- Comprehensive movie/TV series information
- Plot overview, cast, and ratings
- Watchlist and rating functionality
- Streaming platform information
- Similar content recommendations
๐ค MySpace Screen
- Personal watchlist management
- Rated content history
- User preferences and settings
- Activity feed
๐ค Profile Screen
- User account management
- Authentication settings
- App preferences
- Account statistics
๐ API Services
Authentication Service (authService.ts)
- User registration and login
- Token management
- Session handling
- Password reset functionality
Search Service (searchService.ts)
- Movie and TV series search
- Advanced filtering
- Search history
- Trending content
Watchlist Service (watchlistService.ts)
- Add/remove from watchlist
- Watchlist management
- Mark as watched
- Watchlist synchronization
Rating Service (ratedService.ts)
- Rate movies and TV series
- Review management
- Rating history
- Average ratings calculation
๐จ UI Components
Card Component
Reusable card component for displaying movie/TV series information:
<Card
image={{ uri: movie.posterMedium }}
title={movie.title}
type="vertical"
onPress={() => handlePress(movie.id)}
/>Button Component
Custom button component with various styles:
<Button
title="Add to Watchlist"
onPress={handleWatchlist}
variant="primary"
/>SearchBar Component
Search input with real-time functionality:
<SearchBar
placeholder="Search movies and TV series..."
onSearch={handleSearch}
/>๐ Security Features
Token Management
- Automatic token refresh
- Secure token storage
- Request/response interceptors
- Session persistence
Authentication Flow
- User signs in with Clerk
- Access token is stored securely
- API requests include authentication headers
- Automatic token refresh on expiration
- Secure logout with token cleanup
๐ Data Management
Local Data
movies.json: Curated movie databaseseries.json: TV series databaserecommended.json: AI-powered recommendations
API Integration
- RESTful API communication
- Real-time data synchronization
- Offline capability with local storage
- Error handling and retry logic
๐งช Testing
Run tests with Jest:
npm test๐ฆ Building for Production
iOS
expo build:iosAndroid
expo build:androidWeb
expo build:web๐ค Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ Acknowledgments
- Expo for the amazing development platform
- Clerk for authentication services
- React Native for the mobile framework
- TypeScript for type safety
๐ Support
For support, email support@screenverse.com or join our Slack channel.
ScreenVerse - Your ultimate movie and TV series companion ๐ฑ๐ฌ