Skip to content

StreamKeeper is a dynamic web application built with React that allows users to explore and discover movies and TV shows, utilizing the TMDb API for real-time data and an intuitive user experience.

Notifications You must be signed in to change notification settings

MMaitland1/StreamKeeper-React

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

StreamKeeper React

StreamKeeper is a dynamic web application that provides users with a comprehensive interface to explore a wide array of movies, TV shows, and related content. Built on React and integrated with a Node.js backend, the application effectively utilizes the TMDb (The Movie Database) API, allowing users to discover, search, and learn about their favorite media with ease. The application's design emphasizes user experience, responsiveness, and performance, ensuring that users can navigate through vast amounts of content without hassle.

Table of Contents

Overview

StreamKeeper is designed to cater to movie and television enthusiasts who wish to have quick and easy access to extensive media information. By harnessing the capabilities of the TMDb API, the application serves as a powerful tool for discovering films and shows, exploring detailed descriptions, viewing trailers, and checking ratings and reviews. The application’s architecture is built for scalability and performance, providing users with a seamless browsing experience.

Key Features

  • Responsive Design: The application is fully responsive, ensuring a consistent and optimized user experience across various devices, including desktops, tablets, and mobile phones. It adapts the layout to suit the screen size, making navigation intuitive.

  • Dynamic Search: Users can utilize a dynamic search bar to find movies, TV shows, and actors quickly. The search functionality is designed to provide real-time results, enhancing user engagement by allowing immediate access to relevant content.

  • Cache Mechanism: StreamKeeper implements a sophisticated caching system that stores frequently accessed data. This approach minimizes unnecessary API calls, leading to faster load times and a smoother user experience. The cache helps to reduce the latency in retrieving data, ensuring that users spend less time waiting and more time exploring.

  • Comprehensive Detail Pages: Each media item has a dedicated detail page that provides users with in-depth information, including descriptions, ratings, reviews, and related content. This feature allows users to gain a thorough understanding of their favorite films and shows.

  • User-Friendly Navigation: The Navbar is designed for easy navigation, featuring clear links to major sections of the application, including the home page, browse page, and specific categories for movies and TV shows. The layout promotes an intuitive browsing experience, making it simple for users to find what they are looking for.

Technology Stack

  • Frontend: The user interface is built using React.js, allowing for a modular approach to component development. React enables efficient updates and rendering of the UI, ensuring a fast and responsive experience.

  • Styling: CSS is utilized for styling components, with a focus on modern design principles that enhance usability and aesthetic appeal. CSS-in-JS libraries can be integrated for scoped styles, which keep styles organized and maintainable.

  • API Integration: Axios is employed to handle HTTP requests to the TMDb API, enabling the application to fetch real-time data effectively. Axios simplifies the process of managing requests and responses, streamlining error handling and response processing.

  • State Management: The React Context API is used for global state management, allowing components to share data without prop drilling. This approach enhances the application's scalability by providing a centralized state management solution.

  • Testing: The project employs Jest and React Testing Library to ensure component reliability and functionality. This setup allows developers to write unit tests for components, ensuring that they behave as expected under various conditions.

Project Structure

The project structure is meticulously organized to promote maintainability, readability, and scalability. The organization of files and folders ensures that developers can easily navigate the codebase, add new features, or modify existing functionality without confusion. Below is the detailed project structure:

streamkeeper-react/
├── node_modules/                                    # Directory for npm packages
├── public/                                          # Publicly accessible files
│   ├── Logo.png                                     # Logo image
│   └── index.html                                   # Main HTML file
├── src/                                             # Source files for the React application
│   ├── cache/                                       # Caching mechanism for API responses
│   │   └── cache.js                                 # Cache implementation
│   ├── components/                                  # Reusable React components
│   │   ├── BrowseCard/                              # BrowseCard component directory
│   │   │   ├── BrowseCard.js                        # BrowseCard component logic
│   │   │   ├── BrowseCard.styled.js                 # Styled components for BrowseCard
│   │   │   └── BrowseCard.test.js                   # Tests for BrowseCard component
│   │   ├── DisplayCardA/                            # DisplayCardA component directory
│   │   │   ├── DisplayCardA.js                      # DisplayCardA component logic
│   │   │   ├── DisplayCardA.styled.js               # Styled components for DisplayCardA
│   │   │   └── DisplayCardA.test.js                 # Tests for DisplayCardA component
│   │   ├── DisplayCardB/                            # DisplayCardB component directory
│   │   │   ├── DisplayCardB.js                      # DisplayCardB component logic
│   │   │   ├── DisplayCardB.styled.js               # Styled components for DisplayCardB
│   │   │   └── DisplayCardB.test.js                 # Tests for DisplayCardB component
│   │   ├── DisplayCardCarousel/                     # DisplayCardCarousel component directory
│   │   │   ├── DisplayCardCarousel.js               # DisplayCardCarousel component logic
│   │   │   ├── DisplayCardCarousel.styled.js        # Styled components for DisplayCardCarousel
│   │   │   └── DisplayCardCarousel.test.js          # Tests for DisplayCardCarousel component
│   │   ├── MediaDisplayCarousel/                    # MediaDisplayCarousel component directory
│   │   │   ├── MediaDisplayCarousel.js              # MediaDisplayCarousel component logic
│   │   │   ├── MediaDisplayCarousel.styled.js       # Styled components for MediaDisplayCarousel
│   │   │   └── MediaDisplayCarousel.test.js         # Tests for MediaDisplayCarousel component
│   │   ├── Navbar/                                  # Navbar component directory
│   │   │   ├── Navbar.js                            # Navbar component logic
│   │   │   ├── Navbar.styled.js                     # Styled components for Navbar
│   │   │   └── Navbar.test.js                       # Tests for Navbar component
│   │   ├── ProviderList/                            # ProviderList component directory
│   │   │   ├── ProviderList.js                      # ProviderList component logic
│   │   │   ├── ProviderList.styled.js               # Styled components for ProviderList
│   │   │   └── ProviderList.test.js                 # Tests for ProviderList component
│   │   └── SearchBar/                               # SearchBar component directory
│   │       ├── SearchBar.js                         # SearchBar component logic
│   │       ├── SearchBar.styled.js                  # Styled components for SearchBar
│   │       └── SearchBar.test.js                    # Tests for SearchBar component
│   ├── images/                                      # Directory for image assets
│   ├── models/                                      # Data models representing different entities
│   │   ├── Card.js                                  # Card model
│   │   ├── Media.js                                 # Media model
│   │   ├── Movie.js                                 # Movie model
│   │   ├── Person.js                                # Person model
│   │   └── TVShow.js                                # TV Show model
│   ├── pages/                                       # Page components for routing
│   │   ├── BrowsePage.js                            # BrowsePage component
│   │   ├── HomePage.js                              # HomePage component
│   │   ├── InfoDisplayPage.js                       # InfoDisplayPage component
│   │   ├── MovieDetailPage.js                       # MovieDetailPage component
│   │   ├── PersonDetailPage.js                      # PersonDetailPage component
│   │   ├── SearchResultsPage.js                     # SearchResultsPage component
│   │   └── TvShowDetailPage.js                      # TvShowDetailPage component
│   ├── services/                                    # API service files
│   │   ├── MainService.js                           # Main service for API calls
│   │   ├── MovieService.js                          # Service for movie-related API calls
│   │   ├── PersonService.js                         # Service for person-related API calls
│   │   ├── PrefetchService.js                       # Service for pre-fetching data
│   │   └── TvShowService.js                         # Service for TV show-related API calls
│   ├── App.css                                      # Main application styles
│   ├── App.js                                       # Main application component
│   ├── index.js                                     # Entry point of the application
│   └── reportWebVitals.js                           # Web vitals reporting
├── .gitignore                                       # Specifies files to ignore in Git
├── package-lock.json                                # Lock file for npm packages
├── package.json                                     # Project metadata and dependencies
└── README.md                                        # Project documentation

## Getting Started

To get started with StreamKeeper, follow these instructions:

### Prerequisites

Make sure you have the following installed:

- Node.js (version X.X.X or higher)
- npm (Node Package Manager)

Installation

  1. Clone the repository:

    git clone <repository_url>
    cd streamkeeper-react
  2. Install dependencies:

    npm install
  3. Run the application:

    npm start

Usage

Once the application is running, you can navigate to http://localhost:3000 in your web browser to start using StreamKeeper. Explore the various features, search for movies or TV shows, and dive into detailed information about your favorite content.

Available Routes

StreamKeeper provides a variety of routes that users can access:

  • / - Home Page: The landing page where users can find the latest content.
  • /browse - Browse Page: A curated list of movies and TV shows for exploration.
  • /movie/:id - Movie Detail Page: Detailed information about a specific movie.
  • /tv/:id - TV Show Detail Page: Detailed information about a specific TV show.
  • /search - Search Results Page: Displays results based on user queries.

Components

The application consists of various reusable components that promote maintainability and scalability. Each component is designed to serve a specific purpose within the application, ensuring a cohesive user experience.

Example: Navbar Component

The Navbar component serves as the main navigation element, providing links to different sections of the application. It is built to be responsive and adapt to various screen sizes, enhancing user accessibility.

Models

The models in StreamKeeper define the data structures used throughout the application. Each model represents a different entity, such as movies, TV shows, and persons, and encapsulates the properties relevant to that entity.

Example: Movie Model

The Movie model contains attributes such as title, release date, overview, and ratings. This structure allows the application to manage and display movie data effectively.

Services

The service layer handles API calls to retrieve data from TMDb. Each service is dedicated to a specific domain, such as movies or TV shows, and encapsulates all the necessary logic to interact with the TMDb API.

Example: MovieService

The MovieService is responsible for fetching movie data, including popular movies, specific movie details, and searching for movies based on user input. By centralizing API interactions, the service layer simplifies the components and promotes cleaner code.

Caching Mechanism

StreamKeeper incorporates a caching mechanism to enhance performance and user experience. Cached data reduces the frequency of API calls, allowing the application to retrieve previously fetched data quickly. This results in faster load times and less waiting for users, particularly when navigating back to previously viewed content.

Testing

To ensure the application runs smoothly, comprehensive testing is implemented throughout the codebase. Using Jest and React Testing Library, each component undergoes rigorous testing to confirm that they function as intended. This process helps identify and rectify issues before deployment, ensuring a reliable user experience.

About

StreamKeeper is a dynamic web application built with React that allows users to explore and discover movies and TV shows, utilizing the TMDb API for real-time data and an intuitive user experience.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published