whatisonthe.tv

 In Active Development

History

The journey of whatisonthe.tv spans several iterations, having its roots as far back as 2003. After a period of activity until 2008, it found itself in digital limbo, sidelined and relegated to bit rot.

Past Use

Originally, whatisonthe.tv served as my personal tool for tracking and searching TV Listings which provided TV shows, movies and actors via a web interface. Beyond its practical uses, such as keeping an eye on my favorite shows and acotrs, the project was an experimental playground for learning new technologies. However, with the rise of streaming platforms, my consumption patterns shifted away from linear TV, leading the utility of whatisonthe.tv to wane and eventually halt, entering a period of bit rot.

Revival

As of 2023, the project has taken on a new direction. Veering away from its initial incarnation as a TV Listings platform, the app is in the process of being refocused to track my personal viewing habits. Currently, it's in its alpha stage of development.

whatisonthe.tv

A Tale of Three Apps

Initially conceived as a Perl application paired with a MySQL database, it evolved into an ORM-based Perl app using Class::DBI and KinoSearch for full-text searches. Fast forward to today, and whatisonthe.tv has metamorphosed into a triad of applications. The user-facing front end is built using React and is hosted at whatisonthe.tv. This front end communicates with a Rails API hosted at api.whatisonthe.tv. When necessary, the API fetches data from the TVDB via my Ruby gem, thetvdb_api.

Front End (whatisonthe.tv)

The user interface of whatisonthe.tv is crafted using React.js and enjoys hosting on Vercel, accessible through a custom domain. Designed as a Single Page Application (SPA), it utilises react-router for navigation and react-query for fetching data. This front end interfaces seamlessly with the API located at api.whatisonthe.tv.

API (api.whatisonthe.tv)

The API employs cache-aside and lazy loading design principles to optimise data retrieval. When a search query is made, the API first checks its own data store. If the data exists, it's immediately returned to the user. If not, the API utilizes my tvdb_api gem to fetch the information from TVDB's API. To facilitate this, a set of background workers run asynchronously to gather and store this new data in the API's data store, ensuring it's readily available for future queries.

+---------------------+       +--------------------+
|    Front-End App    |<----->|        API         |
|  (whatisonthe.tv)   |       | (api.whatisonthe.tv)|
+---------------------+       +--------------------+
                                |
                                | Check Cache
                                v
                         +--------------+
                         |   Data Store  |
                         +--------------+
                                |
                                | Cache Miss
                                v
                         +--------------+
                         | tvdb_api gem  |
                         +--------------+
                                |
                                | Fetch Data
                                v
                         +--------------+
                         |     TVDB      |
                         |     API       |
                         +--------------+
                                |
                                | Background Workers
                                v
                         +--------------+
                         |   Data Store  |
                         +--------------+
                                |
                                | Return Data
                                v

Future

At the moment, the project is in active development. While I do plan to launch a changelog app to dynamically display updates and modifications across each project, that feature is still in the works. In the meantime, for an up-to-date view on the latest changes, you can either explore the web app itself or visit the associated GitHub repositories.

Links