Reviving an Old Feature Request in Telescope
Tags: opensource, database, challenge, productivity
Published: 2021-12-04 05:17:53

For a while now, I was looking for an issue to work on for my release 0.4 assignment. The issue I found is huge, but very interesting. The expectations for this release are very high, so I was looking for something challenging enough to meet them.

After searching for several days☠, I finally found one (❁´◡`❁). The feature request is in [Telescope](https://github.com/Seneca-CDOT/telescope), the blog aggregator for Seneca students.

## The Feature: An integration with Livestreams 

The whole feature request (or at least the idea about it) can be found in the [original issue](https://github.com/Seneca-CDOT/telescope/issues/1026), and also, you can read David Humphrey's [blog post](https://blog.humphd.org/online-week-3/#the-telescope-podcast) about the idea and what sparked it✨.

I have to admit that I will not work on the whole feature, as it is related to a lot of new parts that would have to be thoroughly researched, tested, reviewed, and approved, and I don't want to overwhelm myself or the team to review my PR😵.

The part I will work on for my release will be introducing video aggregation in Telescope.

## Action Plan for Video Aggregation

I am not very familiar with video aggregation, as I only heard about blog aggregation when I first learned about `Telescope`, so I am completely clueless on how it might work😅.

To begin with, I plan to aggregate videos from YouTube, as it is the biggest video platform in the world, and YouTube has a really useful Data API that fits my use case😄!

## Some More Planning 

As I mentioned before, my plan for video aggregation is going to be based off of what I know from `Telescope`. I have read the source code of `Telescope` and I got a general idea and structure of how it works. I believe I can do something similar to what we have, except with major differences. First, I would like to explain how `Telescope` works in a very general overview.

### The Internals of Telescope 👀

First off, I got a quick diagram of how `Telescope` can be represented:

![Telescope overview](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kzkr2sjxs3c65hbuccb2.png)
 
As I have noted from reading the codebase for a few hours, the general idea is that the front-end communicates with the Microservices API, which communicates with the back-end. The back-end is in charge of all the data and blog caching. The back-end receives a list of feeds to read posts from. These blog posts are then cached in the redis database, which is read by the Microservices API. Of course, the back-end does more than just caching the blog posts, such as indexing the blog posts for searching purposes.

The front-end will access the information from the Redis database through the Microservices API. Information such as blog posts, users, and search are provided by this API.

### So, what's the plan?

Well, my basic plan is basically replicating the same ideas as what Telescope provides, but with video links to YouTube. Since one video at the highest quality takes much more space than hundreds of text blog posts, we cannot cache them!😬 It will be extremely expensive for us. As for the user, serving a video at the highest quality is going to eat up the bandwidth like crazy...🥴 So, instead of caching the videos themselves, we would cache the video IDs for these videos, and then simply embedding a YouTube video player on the front-end.

I have summarized my course of action as the following:

* In the back-end portion: 
    * get a source to retrieve the youtube channels (these one may have to be provided by the users in Telescope),
    * cache the video ID's of the most recent videos of each one of the channels
* In the API:
    * add an endpoint to provide the video ID's or the youtube links
* In the front-end portion:
	* provide the embedded youtube videos on the timeline where the blog posts are provided,

## Expectations

My major expectation out of all of this is that the feature gets resurrected, so that it can be carried to completion😋😋.

I also expect to complete the back-end part of the plan in a few days, as I think it will form a strong base on what we actually need to show in the front-end.

This is probably going to be my biggest PR yet in open source, as it will have to include documentation and tests for all of this!🐱‍💻🐱‍💻 Either way, wish me the best on this challenge 😊🤞🏻