Lena Chatziastros Logo

MovieMate

Case Study

Overview

MovieMate is a full-stack web application designed for movie enthusiasts to explore and manage their favorite films. The project aimed to build both the server-side and client-side components of the application, providing users with a seamless experience to access, save, and curate lists of movies based on various attributes such as genre, director, and individual preferences.

Tech Stack

Server-Side

  • Node.js
  • Express
  • MongoDB
  • Mongoose
  • JWT authentication
  • REST API
  • Postman
  • Render

Client-Side

  • React
  • React Router
  • React Bootstrap
  • Parcel
  • Netlify

Goal

The primary goal was to create a user-friendly platform where users can

My Role

I was the sole developer responsible for both backend and frontend development, including database management. This project was part of a full-stack web development course, where I utilized my JavaScript skills to:

Although I worked independently, I had access to a mentor and tutor for guidance when tackling complex challenges.

Approach

Process

Backend Development

The foundation of MovieMate's backend was built using Node.js and Express, where I designed a RESTful API to interact with a MongoDB database. This API provided endpoints to handle CRUD operations, including retrieving movies, registering users, and managing favorite lists.
Setting up proper authentication using JWT, was initially challenging. Integrating secure token-based authentication was tricky due to session management across multiple views, but I was able to resolve it through careful middleware configuration.

Database and Business Logic

MongoDB served as the NoSQL database, where I designed the schema to handle movie information and user data. I used Mongoose models to simplify queries and validations. During database setup, data validation was crucial to ensure that only correct information was saved.

Frontend Development

The client-side was developed using React to create a single-page application (SPA). The application was structured into multiple views for logging in, signing up, viewing a list of movies and movie details, and managing profiles. Different views are divided into reusable components, to allow for better maintainability.
One key challenge was managing state across different views, especially when handling user login and dynamic movie lists. To solve this, I used React Router for seamless page transitions. To ensure the state of favorites is properly synchronized across multiple views I created a custom hook and global states.

MovieMate App Screenshot MovieMate App Screenshot

Results

Conclusion

MovieMate App Screenshot on mobile device

The final product is a responsive and fully functional web application that met the original objectives. MovieMate successfully provides movie enthusiasts with a platform to discover and manage movie information.

Challenges like user authentication and state management taught me valuable lessons in debugging complex flows and handling state in React.

Key Achievements

  • Gained experience with full-stack development by building a complete web application from backend to frontend.
  • Learned how to set up a non-relational database using MongoDB, including schema design and data modeling.
  • Utilized Postman for endpoint testing, ensuring the API functionality and efficient debugging.
  • Mastered state management in React using hooks for dynamic updates and user data handling.
  • Implemented token-based user authentication for secure login and routing.
  • Designed and built a RESTful API to manage movies, users, and favorites, integrating it with the React frontend for seamless communication.
  • Developed a responsive, user-friendly interface with features like favorites management and dynamic search and filtering, to enhance user experience.

Future Improvements

While MovieMate is fully functional, there is room for improvement to enhance the user experience further:

  • Loading Screen for Authentication: Currently, the app is hosted by free hosting services. As a result, loading times can be longer during sign-up or login. A loading spinner or progress indicator could provide users with clear feedback during these operations, reducing any perceived delays.
  • Enhanced Sign-Up Process: More specific error messages during sign-up could be implemented, such as notifying users when their chosen username is already taken or when their password does not meet the requirements.
  • Account Deletion Confirmation: To prevent accidental account deletion, a verification step in the profile view could be added.