August – December 2024

Movie Recommendation Application

A full-stack Python application connecting natural-language requests to user profiles, movie preferences, and recommendation retrieval in PostgreSQL.

University of Pittsburgh | Advanced Data Management Technologies Laboratory (ADMT)

Project Overview

I developed the application layer supporting a movie recommendation system, integrating a Streamlit interface, Python application logic, the OpenAI API, and PostgreSQL. Users could provide profile information and movie preferences conversationally, with the application translating their requests into database operations and returning natural-language responses.

The core engineering challenge was coordinating a multi-step conversation with persistent data: interpreting flexible user input, storing the relevant information, and retrieving it for subsequent interactions.

My Responsibilities

I built the user interface and the integrations connecting it to the language model and database. My scope covered the conversation flow, profile and preference storage, and the request-to-SQL pipeline supporting preference updates and recommendation retrieval.

The interface collected names, genre preferences, and movie ratings. I integrated language-model processing to extract relevant information from short answers or full sentences and prompt users again when their responses did not address the question.

I implemented PostgreSQL storage and retrieval so the application could recognize returning profiles and reuse saved preferences without repeating the initial rating collection.

Movie chatbot extracting profile information from conversational replies and asking again after an irrelevant response
The chatbot collects profile information through natural-language replies and prompts again when an answer does not address the question.

How It Works

  1. Start with a conversation. The user provides profile information, shares movie preferences, or requests recommendations through the natural-language interface.
  2. Translate the request. Python application logic and the OpenAI API interpret the input and translate the relevant request into SQL.
  3. Work with stored data. PostgreSQL stores or retrieves profile and preference information, supporting preference updates and recommendation retrieval.
  4. Respond in natural language. Database query results are translated into a readable response and returned through the interface.
Architecture diagram showing natural-language requests moving through a React frontend, Python API, language model, and PostgreSQL database
The original chatbot architecture that informed this project, showing the request-to-SQL and response flow. The movie application later moved to Streamlit, as described below.

Engineering Decisions

Consolidating the application in Python. The initial React and Flask structure required repeated coordination between separate frontend and backend layers during the conversation. I moved the interface to Streamlit and reorganized the existing Python code, bringing conversation handling, API calls, and database operations into a simpler application structure.

Separating conversational input from stored information. Language-model processing extracted the information needed at each step, allowing flexible phrasing while preserving structured profile and preference data in PostgreSQL.

Supporting recommendation integration. I structured the application to accommodate recommendation functionality through an API, keeping the interface and data-management work adaptable as the broader system evolved.