We’re a team of three of life long gamers and avid twitch watchers. We love the gaming space and what Twitch has done within it. So when we found out about Twitch’s extension competition we wanted to expand on two areas we felt passionate about as both gamers and twitch viewers. These areas are:
1) Building strong communities through streamer chat interactions
2) Building big moments that get people excited to watch Twitch
BountyStreamer accomplishes both of these by making incentivized donations a first class feature on Twitch.
Incentivized donations are not a new thing. We often see viewers attaching challenges to donations. Usually these challenges are something like, "Win a game of solo duos and I’ll donate another $50" or “Sing this games theme song as best you can and I’ll donate another $5”.
These types of donations are fun for both streamers and viewers. Viewers get to influence the content their watching by challenging streamers to fun or difficult tasks, and streamers get to provide the type of content their viewers are interested in seeing. In addition to bringing streamers closer to their chat community, Its these types of donations that lead to some of the biggest, most hyped moments on twitch. Drake gave an incentivized donation to Ninja for 5k to win a game of fortnite, and half a million people watched it play out. These big moments get the twitch community excited and keep viewers invested in the stream.
However, for as popular as these types of donations are, there is no formal system for them. The current limitations around incentivized donations are:
1) There is no guarantee the user will fulfill their promise once the challenge completes. The proposer of the donation has nothing forcing them to donate money once the streamer completes the task.
2) For viewers tuning into a stream while a broadcaster is attempting a challenge, it can be confusing to know why something on stream is happening. There typically isnt any on stream messaging saying “Attempting to win a game of solo duos for $10”.
3) The viewer is solely responsible for evaluating if the broadcaster completed the challenge. No one else has a say which can lead to disagreements.
These limitations inspired us to build BountyStreamer.
What it does
BountyStreamer is a twitch panel extension and backend service that provides viewers a way to send donation challenges (bounties) to broadcasters. Broadcasters can manage their bounties, and viewers can view the broadcaster’s bounties directly from the panel. Additionally, a viewer can click the “Open Bounty” button and be directed to the BoutnyStreamer website where they’ll open a new bounty for the streamer. Once a bounty is opened, a broadcaster can “activate” the bounty to notify the stream that he or she is attempting to complete the bounty. After attempting the bounty, the broadcaster can mark it completed or failed and the bounty will be resolved if both the broadcaster and viewer agree on the outcome. If the broadcaster completes the bounty, the transaction is completed. Otherwise the transaction is voided.
BountyStreamer improves upon the existing incentivized donation flow in the following ways:
1) When proposing a donation, the viewer is charged the full amount of their donation. Funds are held until the bounty finishes. If the streamer completes the bounty, the funds are released to the streamer. If the streamer isnt able to complete the bounty or the bounty expires, the transaction is voided.
2) BountyStreamer provides an in stream ui so viewers know what task is being attempted and what the stakes are. This puts the big moment right in the viewers face.
3) BountyStreamer leverages a weighted voting system to learn if a bounty was completed successfully or not, preventing one person from controlling the outcome.
How we built it
See this diagram for an overview of BountyStreamer’s architecture: https://ibb.co/VNyYz35
BountyStreamer leverages react to create a seemless front end experience when interacting with the extension. The backend is powered by SpringBoot and all infrstructure is hosted on AWS. BountyStreamer’s backend integrates with Twitch’s API primarily for user authentication, but uses a couple other APIs as well. The backend also integrates with PayPal’s API for handling payments between viewers and streamers. For storing persistent state, BountyStreamer uses AWS RDS running PostgreSQL.
New features are developed on a local stack and once ready, code is pushed to a git repository. Copdepipeline pulls down new commits, builds the code, runs a test suite, and deploys code to EC2 instances. The built code is first deployed to a Beta staging area where the feature can be tested in an environment that mirrors production. And once testing is complete, the feature is promoted to production.
Challenges we ran into
A small, three person dev team required judicious feature selection. There simply wasn’t enough manpower to build all the cools things we wanted to. Hard choices were made around what features to prioritize and in what order.
We hit an unfortunate hurdle early on in development. We intended on creating BountyStreamer as a bits enabled application, however the current bits APIs doesn’t expose the functionality required for our use case. As a workaround, we decided to use paypal. Using paypal has its drawbacks, one of them being it does not natively integrate with Twitch. We designed our extension with this in mind and are eager when we can replace the paypal payments flow with Twitch bits.
Accomplishments that we're proud of
We’re proud of creating an extension that fulfills a need on a platform we use everyday. We know our extension can help a broadcaster grow their community by creating big moments, all while earning some extra income.
We’re also proud of our architecture. Building a full stack in AWS was a new experience for us. But despite limited time and resources, we were able to build our platform completely within AWS and we are confident its architected to scale as the extension gets more users.
What we learned
One of our big take-a-ways was learning the ins and out of AWS development and architecting an application with AWS. We were also pleasantly surprised at what it costs to host all the resources. Our monthly bill is much lower than anticipated.
What's next for BountyStreamer
The next steps for BountyStreamer is to release the extension and talk to users to learn what we can improve. We will also build support for “community bounties” so viewers can add onto an existing bounty. This feature allows a broadcaster’s community to pool their money together and increase the total value of a bounty. We are also eager to add Twitch bits as a payment option.