The project takes user's Letterboxd accounts and finds the intersecting films between users and a given Letterboxd list. Questions are then outputted based on the number of questions that the host wants to create and can be played in a Kahoot type style.

The handling of Letterboxd's API is done with the letterboxdpy library to ready user profiles and lists. Movies are checked against a database created for this project on which is hosted on Supabase. If no questions for the given movie exist in the database, Gemini is prompted to generate questions in the categories of Plot, Cast, Crew, Cinematography, and Behind the Scenes. These questions are then stored in the database.

The Python backend is connected to the React frontend using FastAPI. The FastAPI backend is hosted on Render with the React frontend being hosted on GitHub pages. This allows for the site to be fully online and independent of a host machine, though computation on Render may take longer.

Backend support currently allows for user-inputted questions, but it is not yet connected to the website view. Gemini is often accurate when generating questions but can still make mistakes. This is why a user voting system has been implemented so that questions with enough dislikes will be under admin review, whereas questions that are liked will take many more dislikes to reach that same review point. Users will also be able to vote on user-submitted questions in case of inaccuracies by the community.

The website is still in a very early state, so there may be missing parts or it may be unplayable. The testing.py file on the GitHub repo is a better example of what the final idea should be.

This was my first time working with any online formats for server hosting, so the largest challenges came with connecting it to the frontend to allow for a fully online experience. That being said, I went into this weekend with no knowledge of Supabase, React, FastAPI, and Render, and have left with being much more comfortable in all of them, so I would be happy to use them again in future projects.

Built With

Share this project:

Updates