Building clubstream.io: How I built a genre-based discovery platform that connects electronic music fans with live DJ streams on Twitch — from architecture decisions to real-time detection.

Somewhere around late 2025, I found myself browsing Twitch at 2 AM looking for a decent Afro House stream. The experience was terrible. Twitch's "Music" category is a grab bag — acoustic guitar covers, lo-fi producers, karaoke nights, and buried somewhere in between, actual DJs spinning live sets. There's no way to filter by genre. No way to know if someone is playing Melodic Techno or Hard Techno without clicking into the stream and waiting. I kept thinking: there has to be a better way to find live electronic music.

There wasn't. So I built one.

clubstream.io is a genre-based discovery platform for live electronic music DJs. It uses publicly available Twitch data to detect live streams, categorizes them by genre, and gives every DJ a claimable profile page that search engines can index. Think of it as a focused lens on top of Twitch — specifically for people who want to find a Deep House set or a Drum & Bass mix without sifting through thousands of unrelated streams.

The V1 is live now, and this post walks through the reasoning behind the product, the technical decisions I made along the way, and what I learned shipping it.

The Core Problem: Discovery Is Broken for Niche Music

Twitch has about 9 million active streamers. The "Music & Performing Arts" category alone hosts tens of thousands of them at any given time. If you're into electronic music — Techno, House, Trance, or any of its subgenres — you're competing for attention with every other type of musician on the platform.

The discovery tools Twitch provides are built for gaming. Tags exist, but they're inconsistent. One DJ tags their stream "Techno," another tags it "Electronic," a third doesn't tag it at all. There's no genre taxonomy, no structured profiles, and no way to say "show me all live Afro House streams right now."

That gap is what clubstream.io fills. Instead of fighting Twitch's general-purpose interface, it creates a dedicated layer on top of it — one that understands electronic music genres and treats them as first-class citizens.

How It Works

The platform does three things well:

  1. Automatic stream detection. clubstream continuously checks publicly available Twitch data to detect when DJs go live. New streams appear on the platform within minutes — no manual listing required.
  2. Genre classification. Each DJ is mapped to one or more of 40+ electronic music genres. This is based on available metadata such as Twitch tags and stream titles, combined with manual curation as the platform evolves.
  3. Profile pages. Each DJ gets a profile page on clubstream.io, even if they haven't signed up yet. These profiles are automatically generated from publicly available data and can be claimed by the creator at any time.
  4. SEO-driven discovery. Profiles include genre tags, descriptions, and activity data tracked on clubstream. Pages are server-rendered and optimized for search engines, helping DJs build discoverability over time for their specific genres.

Why Genre Matters More Than You'd Think

Electronic music has a relationship with genre that most other music scenes don't share. A fan of Psytrance and a fan of Deep House are, functionally, different audiences. The BPM ranges are different. The energy is different. The time of day people listen is different. Putting them all under one "Electronic" umbrella is like grouping horror movies and romantic comedies under "Films" and calling it a day.

On clubstream.io, genre is the primary navigation axis. The genre overview page shows all available categories with live stream counts. Each genre has its own page with currently active streams. Visitors can filter the live feed by multiple genres simultaneously, by language, or by trending/new criteria.

This specificity is the entire point. Someone searching for "live Drum and Bass DJ stream" should land on a page that gives them exactly that — not a wall of unrelated content with a search box.

Architecture and Tech Stack

The stack is deliberately boring where it should be and custom where it matters:

The whole thing runs on a single Linux server: Nginx as a reverse proxy with SSL termination, the Next.js app managed by PM2, and PostgreSQL running locally. No Kubernetes, no microservices, no managed cloud platform. For a project at this scale — a few thousand daily visitors, a few hundred concurrent streams to track — a single well-configured VPS is more than enough. I've written about this kind of setup in the Nginx reverse proxy guide and the Docker Compose production article if you're curious about the infrastructure side.

Real-Time Detection: The Engine Behind the Platform

The stream detection pipeline is the most technically interesting part of the system. It needs to answer one question continuously: which DJs are live right now, and what genre are they playing?

Twitch's public APIs provide access to currently live streams by category. Electronic music falls under a handful of Twitch categories, but not all streams in those categories are DJ sets. Some are production sessions, some are music lessons, some are people chatting with background music. The challenge is filtering signal from noise.

The detection logic works in layers:

  1. Polling cycle. The system periodically checks publicly available stream data from relevant Twitch categories. New streams get flagged for classification.
  2. Classification. Publicly visible stream titles, tags, and channel metadata are matched against known patterns. A title like "Deep House & Afro vibes — Saturday night session" gets parsed into genre signals. Known DJs (already in the database) skip this step entirely.
  3. Profile creation or update. New DJs get a profile page generated automatically from public data. These pages can be claimed and customized by the DJ at any time. Returning DJs get their activity data on clubstream updated. Genre assignments may shift over time as a DJ plays different styles.

The entire pipeline is designed to be conservative. False positives (non-DJs appearing on the platform) are worse than false negatives (missing a DJ for a cycle). When in doubt, the system waits for more data before creating a public profile.

SEO as a Growth Engine

Most streaming platforms treat search engines as an afterthought. Channel pages on major platforms tend to be JavaScript-heavy, slow to render, and optimized for logged-in users — not for search crawlers. That's a missed opportunity, especially for DJs who could benefit from organic traffic to grow their audience.

On clubstream.io, every DJ profile is a fully server-rendered HTML page with structured data markup. The page title follows a predictable pattern: "[DJ Name] — [Primary Genre] DJ on clubstream.io." The meta description includes their top genres and a brief summary. Schema.org Person markup tells search engines exactly who this page is about.

Genre pages work the same way. A page like /genre/afro-house carries its own meta title, description, and structured data. Over time, these pages accumulate internal links from DJ profiles and the live feed, building topical authority naturally.

The bet here is straightforward: if someone Googles "Afro House DJ live stream," a dedicated page with fresh content and proper markup has a better shot at ranking than a generic Twitch search result. It's not a guaranteed win — Google's ranking factors are famously opaque — but the structural foundation is there.

What I Shipped in V1

The initial release includes everything needed for the core loop to work:

What I intentionally left out: social features (comments, chat, followers feed), mobile apps, and monetization. V1 needed to prove that the discovery model works before layering on complexity. If people come back to find streams through clubstream.io instead of scrolling Twitch directly, the core thesis holds.

Lessons from Building and Shipping

Start with the data model, not the UI

I spent the first two weeks of this project on the database schema and the Twitch integration — no frontend at all. Getting the DJ → Genre → Stream relationships right early on saved me from painful migrations later. The UI was built around data that already existed and was already being collected.

SSR is worth the complexity tax for content platforms

Client-side rendering would have been faster to build. But for a platform that depends on Google indexing thousands of pages, server-side rendering isn't optional — it's the whole strategy. Next.js makes this manageable, though the mental model of "which code runs on the server vs. the client" requires constant attention.

Don't over-engineer the infrastructure

A single VPS with Nginx, PM2, and PostgreSQL handles the current load with headroom. I could have set up Docker Compose, a managed database, a CDN, and a separate worker process. But every layer of infrastructure is a layer you have to monitor, update, and debug at 3 AM when something breaks. Right-size the stack for where the product is today, not where you hope it'll be in a year.

Genre taxonomy is a rabbit hole

Defining 40+ genres sounds simple until you realize that "Melodic Techno" and "Melodic House & Techno" are — depending on who you ask — either the same genre or completely different things. The taxonomy will never be perfect. The goal is "useful enough" rather than "musicologically correct."

What Comes Next

The V1 is the foundation. The roadmap for the coming months includes tighter community features (following DJs, notifications when a favorite goes live), editorial content around the genres and the DJs themselves, and deeper analytics for DJs who use the platform to understand their audience.

If you're into electronic music, go browse some streams on clubstream.io. If you're a DJ streaming on Twitch, your profile might already be there — search for yourself on the live page or claim your page through the dashboard.

And if you're curious about the infrastructure stack behind it, the clubstream.io project page has a visual breakdown of the architecture and features.