Next.js Livestream Platform
image
image
image
image
image
image
image

A production-grade livestreaming platform built with Next.js, supporting RTMP/WHIP ingest, OBS streaming, real-time chat, viewer system, and a complete creator dashboard. Designed with performance, scalability, and modern UI/UX in mind.Built with world-class engineering standards — $200K+ level architecture.

Features

Live viewer count updated in real-time
Unique chat colors per viewer
Follow system
Block system
Kick participants from stream in real-time
Followers-only chat mode
Slow mode for chat
Enable / disable chat
MySQL database
API routes for ingest, chat, moderation & follow system
Server-side rendering everywhere
Secure auth (Better Auth / Auth.js)
Optimized for large simultaneous viewers
MySQL database
API routes for ingest, chat, moderation & follow system
Server-side rendering everywhere
Secure auth (Better Auth / Auth.js)
Optimized for large simultaneous viewers
Socket-based live chat
Real-time moderation actions
Real-time presence system
Sync user data to DB via webhooks
Sync livestream status (live/ended) to DB in real-time
Responsive Designs
File & Folder Structure
Production Code
server.ts
import { NextRequest } from 'next/server';

export const middleware = async (req: NextRequest) => {
  let user = undefined;
  let team = undefined;
  const token = req.headers.get('token');

  if(req.nextUrl.pathname.startsWith('/auth')) {
    user = await getUserByToken(token);

    if(!user) {
      return NextResponse.redirect('/login');
    }
  }

  if(req.nextUrl.pathname.startsWith('/team')) {
    user = await getUserByToken(token);

    if(!user) {
      return NextResponse.redirect('/login');
    }

    const slug = req.nextUrl.query.slug;
    team = await getTeamBySlug(slug); // [!code highlight]

    if(!team) { // [!code highlight]
      return NextResponse.redirect('/'); // [!code highlight]
    } // [!code highlight]
  } // [!code highlight]

  return NextResponse.next(); // [!code highlight]
}

export const config = {
  matcher: ['/((?!_next/|_static|_vercel|[\w-]+\.\w+).*)'], // [!code highlight]
};
server.ts
import { createMiddleware, type MiddlewareFunctionProps } from '@app/(auth)/auth/_middleware';
import { auth } from '@/app/(auth)/auth/_middleware'; // [!code --]
import { auth } from '@/app/(auth)/auth/_middleware'; // [!code ++]
import { team } from '@/app/(team)/team/_middleware';

const middlewares = {
  '/auth{/:path?}': auth,
  '/team{/:slug?}': [ auth, team ],
};

export const middleware = createMiddleware(middlewares); // [!code focus]

export const config = {
  matcher: ['/((?!_next/|_static|_vercel|[\w-]+\.\w+).*)'],
};
Tech Stack
/svg/react.svg
/svg/docker.svg
/svg/nextjs.svg
/svg/sql.svg
/svg/github.svg
/svg/nextjs.svg
/svg/nextjs.svg
System Design & Docker