Hackathon Submission for Boilermake VIII


Mapping the Twitch Universe

This was the video that started it all. User KiranGershenfeld created VisualizingTwitchCommunities, showing a cluster map of streamers on Twitch. The closer streamers were to each other, the more viewers watched both streamers' content. A simple concept exposed a large issue. What was found was that the Twitch community is separated into factions, and is ultimately divided.

VisualizingTwitchCommunities Repository

Stream Sniper serves to bridge the gap between Twitch communities, and help users find channels with new, refreshing content. Just a couple clicks and you can sit back, relax, and watch a new side of Twitch!

What it does

Stream Sniper gives users five unique, live, and hardworking streamers that make content the user is interested in! This is based off of data collected by If a user is feeling lucky, they can choose the random option! Our webapp provides five random live content creators geared toward a more general audience.

How we built it

Our project is a full-stack web application that uses Python, HTML, JavaScript, and CSS. We deployed a flask server to Heroku in order to serve dynamic content which allows our python to interact with our frontend code.

Our frontend homepage utilizes the parallax.js library to provide an interactive user experience from the beginning to the end. We make use of multiple templates, navigation bars, and routing to provide ease of access to traverse to different parts of the web app. Furthermore, we use JavaScript functions to store information to get/post to the Python methods.

We utilized Python and data straight from in order to create a recommender engine for users to find content creators similar to the ones they watch. We utilize an optimization algorithm that ensures we are not feeding back exactly the same content. Our goal in doing so is to allow users to discover novel streamers that they could relate with and have a good time watching! Furthermore, we have an option to find random streamers. To ensure our users can watch fresh content immediately from hard-working twitch content creators, we show live channels to support those that are wanting to grow their channel.

Challenges we ran into

Some of the more pressing challenges that caused bottlenecks in our progress were relating to sending and storing data between our python code and our HTML. After some hardcore sessions of debugging, however, we were able to ensure that the correct information sent over accordingly and received the correct output via get and post http requests.

Accomplishments that we're proud of

We were able to successfully create and deploy a full-stack application. All of the members of our team are freshmen, so we aren't exactly well-versed in many languages. Therefore, we are proud of our flexibility and persistence throughout which allowed our project to not only be finished but also deployed and polished. We even got a few hours of sleep!

What we learned

Our frontend team learned a lot on how to efficiently create forms to post/get data to Python code using flask and javascript variables. Furthermore, we learned how to deploy a web application to Heroku. We dabbled in a few javascript libraries, parallax.js the most, and learned how to adjust data values in HTML in order to make smooth content.

Our backend team learned a lot about the Twitch API, its caveats, and its brilliance. We learned how to utilize it for our recommendation algorithms, and we also learned how to combine this with knowledge of Data Science in order to optimize the functionality. We also learned a lot more about the Flask framework and how to use it with our own Python scripts.

What's next for Stream Sniper

We hope to optimize our recommendation algorithm further by focusing more on helping smaller streamers in the future. Furthermore, we would like to create more versions of our advanced search. Having users add a select few streamers who want to find similar content was an idea that was brought up during the hackathon.

Share this project: