Inspiration

Millions of coding videos exist on YouTube, yet learners waste precious time sifting through irrelevant content to find concise, trustworthy tutorials. YouTube Shorts offer brilliant bite-sized learning opportunities but lack a centralized, topic-focused discovery platform to organize them effectively. We wanted to build something that can solve these issues

What it does

Just like on YouTube, users can type in the topic they want to learn, but unlike YouTube our feed does not get irrelevant after 4-5 videos. For example, if you search up python, we can give you 200+ shorts from verified reputable channels with the database we have currently set up.

How we built it

Build Database (main.py) This Python script uses the YouTube Data API to fetch the entire video history from a curated whitelist of 15+ educational channels. It uses pagination to process all 19,000+ videos, then performs a duration check on each one to accurately filter the list down to 1,800+ actual shorts (60 seconds or less). The final list is saved as shorts_db.json.

Categorize Database (categorize_db.py) This second script reads the shorts_db.json file. It sends the 1,800+ shorts to the Gemini API in batches to enrich the data. It calls the AI twice for each batch: once to assign a specific category (e.g., "Python", "System Design") and a second time to extract 3-5 relevant keywords from the title. The final, enriched list is saved as categorized_db.json.

Serve API (test.py) This is the actual FastAPI server that the user interacts with. When it starts, it loads the final categorized_db.json file into memory. When a user sends a search query from the React app, this server performs an instant search against the local list, checking the user's query against the video title, its category, and its keywords

Auth0 authentication (public/js/app.js) This script was used to query the authentication required for features such as custom curated channel lists.

Base html and JavaScript was used for the frontend.

Hosted the API server on Vultr for cloud computing by running it on fastapi on arch linux.

Challenges we ran into

The first challenge was figuring out the most efficient way to fetch and categorize the shorts from YouTube. Since there was no way to get just the shorts from each channel, we had to go through every video uploaded by that channel and check whether it was a short. Using this method, we were able to get a database with all the shorts and then we categorized that database using the Gemini API. Since we have the database ready beforehand, we will not have to call any API when the user searches for anything. This dramatically increases the speed For the frontend, we thought it would be quick and simple so we decided not to use a framework (like react) but this was not the case. Fun fact: We have written more code for our front end than the back end. Trouble Shooting issues related to the front end and issues with hosting it on Vultr was also a major challenge.

Accomplishments that we're proud of

We were able to get exactly what we wanted. Our website is now able to give users a large amount of relevant, high quality videos based on the topic of their choosing

What we learned

We learned how to use APIs to get what we need. We now know to never code frontend without a framework

What's next for HASS: Doom scrolling…… with a purpose

Work with our users to modify the channel list, since right now it is based on our subjective opinions and online data

Built With

Share this project:

Updates