A smart movie discovery app that helps you find the perfect film based on your preferences, genres, and AI-powered suggestions.
Movie Dashboard
- Backend entrypoint:
src/backend/server.js - API + DB access helpers:
src/backend/movieApi.jsandsrc/backend/db.js - Main UI logic:
frontend/script.js - Preferences flow:
src/backend/routes/preferences.jsandfrontend/script.js
Find My Film is a full-stack movie recommendation platform built with a simple frontend and a Node/Express backend. It combines TMDb data with an LLM-powered suggestion layer and stores user watchlists and preferences in SQLite.
Users can browse and search movies, pick preferred genres, receive AI suggestions, and maintain a personal watchlist.
- AI-powered movie suggestions (LLM + TMDb)
- Search and filter by title, genre, year, actor, rating
- Persistent watchlist with duplicate prevention
- Preferences (favorite genres)
- Test coverage for key routes (Vitest)
| Layer | Tech |
|---|---|
| Frontend | HTML, CSS, JavaScript |
| Backend | Node.js, Express |
| Database | SQLite |
| AI | LLM (via API) + TMDb |
| Testing | Vitest |
project/
# front-end
├── frontend/
│ ├── index.html
│ ├── script.js
│ └── styles.css
# source
├── src/
│ ├── backend/
│ │ ├── routes/
│ │ │ ├── llmRoutes.js
│ │ │ ├── movies.js
│ │ │ └── watchlist.js
│ │ ├── utils/
│ │ │ └── genreMap.js
│ │ ├── db.js
│ │ ├── llm.js
│ │ ├── movieApi.js
│ │ └── server.js
│ └── database/
│ ├── movies_recommendation.db
│ └── setup.sql
# tests and misc
├── tests/
│ ├── example.test.js
│ ├── llmroutes.test.js
│ ├── movieroute.test.js
│ └── server.test.js
├── .env.example
├── package.json
└── README.md
- Install dependencies
npm install-
Create a
.envfile (see.env.example) and set required API keys -
Initialize the SQLite database (run once):
# from project root
sqlite3 src/backend/database/movies_recommendation.db < src/backend/database/setup.sql- Start the backend
npm start- Open the frontend in your browser:
Create a .env file in the project root with the following values:
# TMDb API key
TMDB_API_KEY=your_tmdb_api_key
# LLM/API key for suggestions
LLM_API_KEY=your_llm_api_key
# Port (optional)
PORT=3000You can copy .env.example to .env and fill the values.
- The project uses SQLite. The database file is
src/backend/database/movies_recommendation.db. - Use
src/backend/database/setup.sqlto create required tables.
If you need to reset the DB locally, remove the .db file and re-run the sqlite3 command above.
Run unit tests with:
npm test|
Group contributions (with Salem): Worked together on the HTML structure Collaborated on the CSS styling for the frontend Individual contributions:
Set up the Express server
Implemented the basic watchlist router
Configured the GitHub Actions CI pipeline
Organized the project folder structure
Wrote and updated the README
Created the Group contributions (with Dagim): Worked together on the HTML structure Collaborated on the CSS styling for the frontend Individual contributions: Assisted with building the frontend interface Implemented several movie routes Fetched movie details using movie ID Added features to display movie information from IMDb Built frontend functionality for searching movies and actors Implemented the watchlist display feature Implemented the "Pick Genres" feature Individual contributions:
Watchlist feature (end-to-end):
Created the LLM feature (end-to-end):
Developed Group contributions (with Muna): Planned the app and proposed the watchlist feature Resolved merge conflicts and reviewed PRs Collaborated on preferences and recommendation features Co-presented the project Individual contributions:
Implemented all TMDb API functions in Group contributions (with Atiqa):
Set up |
This project is available under the MIT License.

