Quarantine drove many of us to streaming platforms such as Netflix and Hulu. We wanted to bring a unique spin to recommending new movies to watch, reminiscent of the bookstores that wrap their books so you can't see their covers. Using our project provides you with just a limited summary of the movie, meaning you need to decide if it's worth watching on the premise alone.

What it does

Thus, we wanted to enhance that experience by creating a website that generates film recommendations with a Tinder-like swiping selection. At its core, our project is a website that generates film recommendations with a Tinder-like swiping selection. You aren't able to see any information beyond the film's premise, but you can have faith that the recommendations will be related in the genre to films you've previously expressed interest in.

How we built it

We used Code Sandbox to collaborate with React for front-end development. For back-end development we used Python and Flask. From a user’s perspective, a deck of cards appear as the main focus of the website displaying the title and summary of each film. The user can choose to accept or reject each film recommendation by swiping right or left respectively. If the user accepts the movie, but there are no logged genres that they like yet, the program takes a random genre that the accepted movie is part of and sets it as preferred. Once that genre is set, all future recommendations MUST contain at least that genre in its list of genres. If the user starts accepting more movies and already has that first genre logged, there is a 50% chance that a random genre from the liked movie will be added that that genre list, which will end up requiring all future recommendations to contain any genres in that list). Once that second genre preference is filled, it moves on to the third genre that is liked by the user, which has a 30% random probability of being logged as one of the preferred genres, but also a 40% chance that the selected movie does not require the third genre, due to potentially narrowing the scope of recommendations too much. All preferred genres also have a built in "counter" where if the user rejects a movie, the respective counter for the last genre logged would start ticking down by 1. For example, if there are two genres logged and the user rejects a movie, the counter for the second logged genre would tick down by one. Counters for the first, second, and third genres, which start at 10, 5, and 3 respectively, are based on their chances of being added to the list in the first place. Once a counter for one of the genres reaches 0, that genre is removed from its slot and its counter reset to its max, allowing the user to log a new genre in that slot, so that late genres are easier to fine tune than earlier ones, in order to compensate for the fact that the recommendations offered are strictly based on the user’s logged genres

Challenges we ran into

We struggled most with connecting the back end to the front end and allowing information and requests to flow freely between both of them. It was also difficult to create the recommendation engine. We originally wanted the engine to use an AI, but this quickly proved to be out of our technical depth. As a result, we pivoted to a non-AI engine for recommendations, focusing on how to structure it so it could recommend with nearly as well as an AI could.

Accomplishments that we're proud of

We're definitely proud of the way the recommendation engine turned out, as it is able to recommend movies very well despite not using an AI of any sort. Our front end also looks incredibly polished, and makes you feel like the real experience.

What we learned

We learned that sending information between the front and back end (specifically with React and Python/Flask in our case) is very difficult, and required the majority of the time to figure out. Figuring out how all of the different methods and syntaxes correlated and worked together required many guides, mentors, and tutorials.

What's next for Movie Generator

Possible improvements would be to use AI to generate descriptions for each movie. We had to hand-write out summaries for all of our sample movies which is terribly inefficient. Leveraging an NLP model to automatically create one-liner summaries may be an interesting development to pursue. Developing an AI recommendation engine would also be another step forward. We could explore content filtering or collaborative filtering approaches given more time. Other possible improvements would be adding movie pictures to each card, as well as flipping the back of each card to provide further information about the movie, such as its cast, rating, and nearby cinemas and dates in which the movie will be shown (provided they are recent releases). Adding an option in which the user could write reviews on each movie is also an idea.

Built With

Share this project: