Skip to content
Looking for a new TV show? Peruse some analytics prior to watching, and don't get spoiled in the process.
TypeScript JavaScript HTML
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
client
server
.gitignore
.travis.yml
README.md

README.md

Spoiler-Free TV Show Analytics

Build Status

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.

You can’t perform that action at this time.