Spoiler-Free TV Show Analytics
The demo can be found here.
At a Glance
- NodeJS application to combine the results of several APIs into a coherent React front-end. The OMDb API is used to provide information about the TV Show (actors, genre, episodes), the Google Custom Search API is used to provide images, and the TasteDive API is used to provide recommendations about the TV show.
- Typeahead functionality is built into the search input. Results of previous searches are persisted in the database, and these TV show names are sent to the front-end on app load. A trie data structure is used for this functionality.
What Is It For
It's hard to find good shows to watch, especially when looking for show information and recommendations can easily lead to spoilers. This app aggregates useful information to decide whether a show is worth watching and how close each episode is to the series rating.
It's not a wildly popular use case, but I found the building process to be useful for learning about async-await best practices, caching, and error handling.
Technical Stack: ReactJS, NodeJS, MongoDB, Redux, TypeORM
- The front-end is built using React with heavy reliance on a personal component library.
- For state management, I opted to use Redux. It's a bit overkill for a project like this, but I prefer the predictable data flow.
- For the back-end, I'm using a NodeJS application that takes in the name of a TV show and outputs information like actors, recommendations, and images. There's not much heavy business logic here, and it's mostly just combining the results of various API calls or database fetches into a single response.
- For the database, I'm using MongoDB. I wanted to get more experience with NoSQL, and given the data isn't heavily relational, it made sense here.
What could be added to it
- This project was meant to stay small and be more of an exploration of NodeJS best practices. But if I had to answer, I think it would be pretty cool to implement "quality warnings". So for something like when the user searches Game of Thrones, there might be a box that shows up like "Click here for spoilers", and it would show something like "Show finale rated much lower than series rating." For other shoes, it might have a "Season 2 rated much lower than season 1." It could be cool to prevent watching a show that you know is only going to get worse.
What are the expectations of it
I fully intend for this to just be a hobby project that I check up on now and then.
How to run it
For the front-end:
npm run dev
For the back-end:
npm run dev
Note that environment variables are used for database configuration and API calls.