- Movies App
Providing movie data:
The Movie DB.
The Open Movie Database.
Welcome to the Movie Finder Project! This is a dynamic web application that allows users to explore, discover, and learn more about the latest and most popular movies. Whether you're looking for details on the newest blockbusters or just browsing through high-rated films, Movie Finder makes it easy and fun.
Visit the live demo.
- Latest Movies: Get information about the most recent movies released.
- Highest Rated: Discover which movies are topping the charts with the highest ratings.
- Movie Details: Dive deep into each movie's synopsis, cast, and more!
- Advanced Search:Explore our Advanced Search to finely-tune your movie discoveries by filtering through actors, directors, writers, ratings, and more, ensuring you find exactly what you're looking for.
- React.js
- React Router
- Axios
- react Redux
- React-toastify
- React Query
- Styled-components
- React-responsive-carousel
- React-slick
- Slick-carousel
- Cors
- Dotenv
- Express
- Mongoose
- Morgan
- Winston
- Clone the repository from
https://github.com/obrm/makes-movie-app.git
. - Install dependencies with
npm install
. - cd to frontend and install dependencies.
- cd to the backend and install dependencies.
- Add the
config.env
in the backend folder and.env
in the frontend folder. - Run the application using
npm run dev
.
All the API calls are available in the constant.js
file in the config
folder in the backend.
- The
config.env
file in thebackend/config
folder is omitted from the repository for security reasons. The values are as follows. Insert your relevant values where the blanks:
PORT=5000
NODE_ENV=development
FRONTEND_URL=http://localhost:5173
MONGO_URI=
JWT_SECRET=
OPENAI_API_KEY=
TMDB_API_KEY=
OMDB_API_KEY=
- In the frontend, this is the content of the
.env
fille:
VITE_BACKEND_URL=http://localhost:5000/api/v1/
- This hook provides a way to perform dynamic API requests using React Query's useMutation, with automatic cache invalidation and toast notifications for success or error feedback.
- This custom React hook utilizes react-query to fetch data from a given URL, handling loading states and errors with integrated notifications.
Our Movies App utilizes the Redux Toolkit for efficient global state management, ensuring a responsive and interactive user experience. With uiSlice
, we manage the application's dynamic UI features, such as theme changes and loading animations, demonstrating our commitment to a seamless user interface.
- Theme Management: The
uiSlice
allows users to switch between themes, enhancing the visual experience across the application. - Loading Indicators: Through the
spinner
state, we provide immediate feedback for any background operations, keeping the user informed.
This structured approach to state management with Redux Toolkit not only simplifies state logic but also significantly improves the maintainability and scalability of our application.
- Custom Input Components: To reduce code repetition and enhance maintainability, reusable input components are implemented for consistent form elements across the application.
- MovieCard Component: A MovieCard component abstracts the display logic, enabling a concise iteration over movie data arrays for rendering within various views such as Home, Search Results, and Recommendations.
- Optimized Data Queries: Utilizing react-query, the app efficiently manages server state with hooks that handle data fetching, caching, and state synchronization, providing a responsive and up-to-date user interface.
- User-friendly error notifications are shown using the
react-toastify
package. It's centralized in the App component to handle errors application-wide.
- Ori Baram (Team Lead).
- Amal Shweiki.
- Aziz Touma.
- Mahmoud Dana.
- Mony Baruch.
- Mohammed Alyan.
- Shadi Nabwani.
- This project is licensed under the MIT License.