Skip to content

Conflix is an extremely responsive netflix clone created with MERN stack. This is unlike other regular netflix clones you find on the internet.

License

Notifications You must be signed in to change notification settings

CharlesXstorm/conflix

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation


A responsive Netflix clone different from any other clone you will find on the internet.

Twitter . Instagram

About · Demo · Features · Challenges · Tools & Technologies · Screenshots · Getting Started · Requirements · License ·


desktopExperience.mp4
mobileExperience.mp4

📜✍ About The Project

Conflix is an extremely responsive Netflix clone built using MERN. I created this project to learn more about the MERN stack technology and to solidify my knowledge of best design and development practices.
I'm a professional designer/animator who has found his way into web development and this creative side of me tends to ensure that every design detail in development is represented accurately and properly.

This project is completely built from scratch without following any tutorial or copying any code abstraction from a similar base. It is 100% original, with the exception of the Conflix intro animation which is a modification of a Codepen by Claudio Bonfati.
I added the ability to play some trailers at least, to give it the feel of a proper streaming service. I've also made improvements by adding micro-interactions and minimal page route transitions. Most of the animations in this project were created using pure CSS, with a few exceptions that were made using Framer-motion.

I've put a great deal of work into this project, over 3 months and 2 weeks and I hope you'll like it as much as I do.
I would appreciate it if you could give this project a star, as a sign of encouragement. It will mean everything to know someone finds this project useful 😇.


🎬 🍿 Demo

Here you can find the demo link:

Guest Account

I've added a "signin as a guest" button for lazy users like me 😊. You don't need to signup to test the features of Conflix.
There are a few restrictions attached to the guest account.

  • Guest account cannot delete the guest & kids sub-profile.
  • Guest account can add and edit other sub-profiles but cannot edit the guest & kids sub-profile.

✨ Features

✔️   Responsive layout.
✔️   Guest sign-in.
✔️   Restriction on guest account.
✔️   User signup, sign-in, and logout.
✔️   Create up to 5 sub-profile accounts.
✔️   Edit and delete sub-profile accounts
✔️   New Users have a kid sub-profile included by default.
✔️   Select profile pictures from up to 3 specialized categories of profile icons.
✔️   Browse movies by categories.
✔️   Navigate pages by movie type (Movies, TV shows).
✔️   Kids-only content when you switch to the kids sub-profile.
✔️   Top 10 movies or TV shows in your country using Geolocation API.
✔️   Micro-interactions and minimal page transitions (pure CSS and Framer-motion).
✔️   Ability to play movie trailers.
✔️   Pause/mute movie trailers.
✔️   Play customized Conflix "C" intro animation (credits: Claudio Bonfati's pen) with characteristic Netflix sound.
✔️   Autoplay hero movie trailers on-load when on PC.
✔️   Movie trailers autoplay when hovering over the movie scroll element.
✔️   Infinite scroll implementation with scroll location indicator.
✔️   Swipeable scroll on mobile.
✔️   Special modal to show movie or series details.
✔️   Movies have dynamic ratings to determine if it's 18+ or for kids.
✔️   Add/remove movies from the Mylist category.
✔️   Favourite list persistence (session storage)
✔️   Search movies by title, actors or genres.
✔️   Loading skeleton.


🛠️ 🧩 Challenges

My biggest challenge was the task I initially thought would be the easiest: the infinite scroll with the movie detail modal.
When I was mapping out tasks for the project, I brushed off the scroll task as something that would take a few minutes, but I was so wrong. This scroll feature isn't just any regular scroll implementation, it had to have some specialized features.

These features include:
🟥 Infinite scroll that moves by a particular scroll amount.
🟥 Special modal that centrally overlays the element it highlights.
🟥 Play the available trailer video when hovering over the modal.
🟥 Detect if a scroll element is in the extreme right or left position.
🟥 Expand the modal from the right or left with micro-interactions (depending on the scroll element's position).
🟥 Detect if a movie is favourited, and dynamically render the appropriate add or remove button.
🟥 Collapse the modal from the right or left with micro-interactions (depending on the scroll element's position).


🚀 Tools ➕ Technologies

📸 Screenshots

Landing Page_Desktop_View landingPage_Desktop_view

SignUp Page_Desktop_View SignUp_page2_Desktop_view

SignIn Page_Desktop_View SignIn_Desktop_view

Profile Page_Desktop_View SubAccount_Menu_Desktop_view

Add Profile_Desktop_View Add Profile

Manage Profile_Desktop_View Manageprofile

Select Profile Icon_Desktop_View select_Icon

Home Page_Desktop_View DeskView1

Top 10 Category in your country_Desktop_View Top10_Shows

Movie Detail_Desktop_View movieDetail

Kids Only_Desktop_View kidsOnly


Error Page_Desktop_View ErrorPage


🐾 Getting Started

  • Clone the project
  git clone https://github.com/Charlesxstorm/Conflix
  • Go to the project client directory
  cd conflix/client
  • Install dependencies
  npm install
  • Create a .env file at the root of the client directory.

  • Request an API key from TMDB and add the following to the .env file

VITE_TMDB_AUTH = **TMDB_API_KEY**
VITE_TMDB_URL = https://api.themoviedb.org/3
  • Go to the JWT website
  • In the "payload" section, add the following JSON.
{"domain":"/api/v1/conflix"}
  • In the "verify signature" section, add a 256-bit secret. A generated token should now be in the "encoded" field. (you can use this tool to generate a random 256-bit secret).
  • Copy the generated token in the "encoded" section.
  • Paste this token in your .env file as follows.
VITE_API_KEY = **generated token**
VITE_API_URL = /proxy/api/v1/conflix/users
VITE_PROXY_URL = http://localhost:5000/
VITE_GEOLOCATION_URL = https://api.country.is/
  • Your completed .env file should now look like this.
VITE_TMDB_AUTH = **TMDB_API_KEY**
VITE_TMDB_URL = https://api.themoviedb.org/3
VITE_API_KEY = **generated token**
VITE_API_URL = /proxy/api/v1/conflix/users
VITE_PROXY_URL = http://localhost:5000/
VITE_GEOLOCATION_URL = https://api.country.is/
  • Go to the project server directory
  cd conflix/server
  • Install dependencies
  npm install
  • Create a .env file at the root of the server directory.

  • Go to the mongoDB website and create an account.

  • Create a database and add a database user and password.

  • Add the following to your .env file.

NODE_ENV = development
PORT = 5000
DATABASE= **the database URL**
USER= **database user**
DATABASE_PASSWORD = **database password**
JWT_SECRET = **the 256-bit secret generated earlier**
TMDB_AUTH = **TMDB_API_KEY**
TMDB_URL = https://api.themoviedb.org/3
  • In the server directory, run the application.
  npm run dev

✅ Requirements

Before starting, you need to have Git and Node installed.


📝 License

MIT