GitHunt
AR

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.

ScreenVerse
Expo
TypeScript
Clerk

๐Ÿ“ฑ 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

  1. Clone the repository

    git clone https://github.com/yourusername/screenverse.git
    cd screenverse
  2. Install dependencies

    npm install
    # or
    yarn install
  3. Environment Setup
    Create a .env file in the root directory:

    EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key
  4. Start the development server

    npm start
    # or
    yarn start
  5. Run on your preferred platform

    # iOS
    npm run ios
    
    # Android
    npm run android
    
    # Web
    npm run web

๐Ÿ”ง Configuration

Clerk Authentication Setup

  1. Create a Clerk account at clerk.com
  2. Create a new application
  3. Copy your publishable key
  4. Add it to your .env file

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

  1. User signs in with Clerk
  2. Access token is stored securely
  3. API requests include authentication headers
  4. Automatic token refresh on expiration
  5. Secure logout with token cleanup

๐Ÿ“Š Data Management

Local Data

  • movies.json: Curated movie database
  • series.json: TV series database
  • recommended.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:ios

Android

expo build:android

Web

expo build:web

๐Ÿค Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

๐Ÿ™ Acknowledgments

๐Ÿ“ž Support

For support, email support@screenverse.com or join our Slack channel.


ScreenVerse - Your ultimate movie and TV series companion ๐Ÿ“ฑ๐ŸŽฌ