Skip to content
Project_Blank
Back to work
Twitch × Spotify

StreamVibes

Chat commands and redeems queue songs on Spotify directly — no bot to babysit, no alt-tabbing mid-stream.

01 / The problem

Song requests during a stream have always meant manual work. A viewer asks for a track in chat, and the streamer alt-tabs out of the game to search Spotify and queue it themselves — over and over, all stream. It breaks flow, and there's no way to control who's even allowed to ask. Anyone in chat can spam requests just as easily as a trusted regular.

02 / The approach

StreamVibes turns a chat command or a channel point redeem straight into a Spotify action, with a permission layer in front of it. A streamer decides who the commands respond to — everyone in chat, VIPs only, or mods only — and that role check happens before anything touches Spotify.

From chat command to queued songA chat command or redeem passes a role check, is validated by a secure API route, fetches the streamer's Spotify keys, and queues the song.Chat command!songrequest or redeemRole checkEveryone, VIP, or modSecure API routeValidates & forwardsSpotify keysFetched per streamerSong queuedAdded to Spotify instantly

The permission model is a single toggle per role, not a fixed rule:

  • Everyone — any viewer in chat can trigger song requests.
  • VIPs only — requests are limited to a streamer's VIP list.
  • Mods only — requests are limited to the mod team, useful for curated listening sessions.

Reading chat live for every streamer at once is the harder half of this. A single server watching chat for hundreds of concurrent streams doesn't scale cleanly, so StreamVibes runs the chat-reading layer as a fleet of Docker containers instead of one process. Streamers currently live get distributed across containers by viewer count and chat rate — busier streams take up more of a container's headroom. When a container gets close to overloaded, it splits in two: its highest-viewer streamer moves to the new container, and any newly added streamers route to that new container until it fills up as well.

How containers split under loadLive streamers are routed to containers by viewer and chat rate. A container within capacity keeps taking streamers; an overloaded container splits in two, moving its highest-viewer streamer to the new container.Container monitors loadWithin capacityStreamer added normallyOverloadedSplits into two containersNew streamers route to the newest container until it fills too

Each container just watches chat and waits. When a command or redeem fires, the container forwards that event to a secure API route, which fetches the requesting streamer's own stored Spotify credentials and makes the request on their behalf — every streamer's keys stay scoped to their own account and their own API calls.

03 / Under the hood

StreamVibes is built on Next.js with Supabase as the database layer. The chat-reading workers run in Docker specifically because they need a persistent, stateful process per shard of streamers — not a stateless request/response function — and containers make that horizontally scalable without hand-managing servers. Twitch's API supplies chat events and channel point redemptions; the Spotify Web API handles the actual queueing.

04 / Where things stand

StreamVibes is still in active testing — a group of streamers is using it live and regularly so we can catch real chat-load and edge-case behavior before a wider release.

More work

Have a tool in mind?

If it's workflow, scheduling, or a platform integration streamers need, we can probably build it.

Start a Project