Summary
TopReview helps movie watchers make faster decisions by aggregating large volumes of reviews and converting them into sentiment categories (negative / neutral / positive) and a readable summary of what people are saying.
My Role
I supported planning and coordination, built shared UI elements (footer), helped with page layout (especially the review page), debugged styling issues, and implemented the ChatGPT API portion used for summarizing categorized reviews.
The Challenge
We faced shifting scope due to a team member leaving mid-project, which forced us to remove planned search functionality. We also had to select workable review sources (TMDb and Letterboxd) and integrate multiple APIs reliably within limited time (3-4 weeks).
Problem
Movies are getting longer, and each title can have hundreds of reviews. Users need a faster way to understand overall sentiment without reading everything.
TopReview addresses this by automatically collecting reviews and turning them into sentiment groups and summaries.
Solution
How it works
- Fetch movie data: Get movie info using TMDb.
- Collect reviews: Pull user reviews from sources like Letterboxd (plus other open sources when available).
- Sentiment analysis: Use Google Cloud NLP to label each review as negative, neutral, or positive.
- Summarize: Feed categorized reviews into ChatGPT to generate a concise summary.
- Display: Show movie info and summarized reviews on the review page.
Tech stack
- Frontend: EJS + HTML + CSS
- Backend: Node.js (Express)
- Database: MySQL
- APIs: TMDb, Letterboxd, Google Cloud NLP, ChatGPT
- Testing: Mocha
- Workflow: Agile + GitHub Projects
Architecture
Core pages
- Register
- Login
- Home (movie cards)
- Review page (summaries + source review links)
- Profile
Key constraints
- Search feature removed after team member departure
- Rotten Tomatoes not usable; relied on TMDb and Letterboxd
- API integration needed stable formatting across responses
Testing
Auth + validation tests
- Password hashing and storage during registration
- Login success after registration
- Required-field validation on login/register
- Username uniqueness checks
- Login case-sensitivity checks
Review page verification
- Movie pages load and show summaries correctly
- Source review links align with displayed review content
- Table/movie metadata displays correctly on the page
Project artifacts
The original deployment and hosted demo are currently unavailable, but the repository and documentation below capture the full project scope, architecture, and implementation.
- GitHub repository: source code + commit history
- Project presentation: overview, tools, architecture diagram, challenges
- Project report: detailed description, contributions, test results, deployment notes
Links
Use these links to review the full implementation and supporting documentation.
Reflection
What I learned
This project strengthened my ability to integrate multiple external APIs and translate NLP outputs into a clear, user-facing experience. I gained hands-on experience reading API documentation (particularly for the ChatGPT API) and debugging integration and usage issues. I also improved my frontend debugging skills and collaborated within an Agile workflow using GitHub Projects as a Kanban board, which helped our team stay aligned and track progress effectively.
What I’d improve next
- Restore search and filtering to support faster discovery
- Add clearer transparency around sentiment scoring and summary generation
- Improve reliability with caching and rate-limit handling for external APIs
- Re-deploy the app and publish a new demo video