Skip to content

A comprehensive multi-media streaming platform that allows users to stream music, movies, books, and live TV from torrents and IPTV sources - without downloading content until playback.

Notifications You must be signed in to change notification settings

profullstack/media-streamer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Repository files navigation

BitTorrented

A comprehensive multi-media streaming platform that allows users to stream music, movies, books, and live TV from torrents and IPTV sources - without downloading content until playback.

Features

Torrent Streaming

  • ๐ŸŽต Music Streaming - Stream FLAC, MP3, OGG, and more with full player controls
  • ๐ŸŽฌ Video Streaming - Watch videos with seeking, fullscreen, and picture-in-picture
  • ๐Ÿ“š Ebook Reader - Read PDFs and EPUBs with progress tracking
  • ๐Ÿ” Deep Search - Search across file names, paths, and metadata
  • โฌ‡๏ธ Download - Download individual files or entire torrents
  • ๐ŸŽ™๏ธ Podcasts - Browse and stream podcasts with episode tracking

IPTV Support

  • ๐Ÿ“บ Live TV - Stream from M3U playlists and Xtream Codes providers
  • ๐Ÿ“‹ EPG Guide - Electronic Program Guide for live channels
  • ๐Ÿ”„ Multiple Providers - Manage multiple IPTV sources
  • ๐Ÿ” IPTV Subscriptions - Premium IPTV access with subscription management

Personal Library

  • โค๏ธ Favorites - Save your favorite files for quick access
  • ๐Ÿ“ Collections - Create custom playlists and watchlists
  • ๐Ÿ“œ Watch History - Track your viewing and reading progress
  • ๐Ÿ”„ Progress Sync - Resume where you left off across devices

Social Features

  • ๐ŸŽ‰ Watch Parties - Synchronized viewing with friends
  • ๐Ÿ’ฌ Real-time Chat - Chat while watching together

Premium Features

  • ๐Ÿ’ณ Crypto Payments - Pay with cryptocurrency via CoinPayPortal
  • ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Family Plans - Share with up to 10 family members
  • ๐Ÿ“บ IPTV Add-on - Premium live TV subscription

Platform

  • ๐Ÿ“ฑ PWA Support - Install as a native app on mobile and desktop
  • ๐ŸŒ™ Dark Mode - Premium dark-mode-first design
  • ๐Ÿ”’ Server-side Security - All sensitive operations server-side only
  • โšก Server-Side Rendering - Fast page loads with pre-fetched data

Tech Stack

  • Frontend: Next.js 16, React 19, TypeScript, Tailwind CSS
  • Backend: Next.js API Routes (Server-side only)
  • Database: Supabase (PostgreSQL with Full-Text Search)
  • Torrent: WebTorrent (metadata-only fetching)
  • Video: Video.js with HLS.js for M3U8 streaming
  • Payments: CoinPayPortal (cryptocurrency)
  • Testing: Vitest with TDD approach
  • Deployment: DigitalOcean Droplet (with UDP support for DHT)

Prerequisites

  • Node.js v24+
  • pnpm v9+
  • Supabase account

Getting Started

1. Clone the repository

git clone https://github.com/your-org/bittorrented.git cd bittorrented

2. Install dependencies

pnpm install

3. Set up environment variables

cp .env.example .env.local

Edit .env.local with your credentials:

# SupabaseSUPABASE_URL=https://your-project.supabase.coSUPABASE_SERVICE_ROLE_KEY=your-service-role-keySUPABASE_ANON_KEY=your-anon-key# Metadata APIsTHETVDB_API_KEY=your-thetvdb-keyOMDB_API_KEY=your-omdb-key# CoinPayPortal (for payments)COINPAYPORTAL_MERCHANT_ID=your-merchant-idCOINPAYPORTAL_API_KEY=your-api-key

4. Run the development server

pnpm dev

Open http://localhost:3000 in your browser.

Scripts

CommandDescription
pnpm devStart development server
pnpm buildBuild for production
pnpm startStart production server
pnpm testRun tests in watch mode
pnpm test:runRun tests once
pnpm test:coverageRun tests with coverage
pnpm lintRun ESLint
pnpm typecheckRun TypeScript type checking

Project Structure

bittorrented/ โ”œโ”€โ”€ src/ โ”‚ โ”œโ”€โ”€ app/ # Next.js App Router โ”‚ โ”‚ โ”œโ”€โ”€ api/ # API routes (server-side only) โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ library/ # Library API (favorites, collections, history) โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ iptv/ # IPTV API (channels, playlists, subscriptions) โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ auth/ # Authentication API โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ payments/ # Payment processing API โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ stream/ # Streaming API โ”‚ โ”‚ โ”œโ”€โ”€ library/ # My Library page (server-rendered) โ”‚ โ”‚ โ”œโ”€โ”€ live-tv/ # Live TV page โ”‚ โ”‚ โ”œโ”€โ”€ podcasts/ # Podcasts page โ”‚ โ”‚ โ”œโ”€โ”€ layout.tsx # Root layout โ”‚ โ”‚ โ””โ”€โ”€ page.tsx # Home page โ”‚ โ”œโ”€โ”€ components/ # React components โ”‚ โ”‚ โ”œโ”€โ”€ layout/ # Layout components (sidebar, header) โ”‚ โ”‚ โ”œโ”€โ”€ torrents/ # Torrent-related components โ”‚ โ”‚ โ”œโ”€โ”€ live-tv/ # Live TV components (HLS player) โ”‚ โ”‚ โ”œโ”€โ”€ media/ # Media player components โ”‚ โ”‚ โ””โ”€โ”€ ui/ # UI primitives โ”‚ โ”œโ”€โ”€ lib/ # Utility functions and services โ”‚ โ”‚ โ”œโ”€โ”€ supabase/ # Supabase client (server-side only) โ”‚ โ”‚ โ”œโ”€โ”€ library/ # Library repository (favorites, collections, history) โ”‚ โ”‚ โ”œโ”€โ”€ iptv/ # IPTV services (M3U parser, playlist cache) โ”‚ โ”‚ โ”œโ”€โ”€ iptv-proxy/ # IPTV proxy for HLS rewriting โ”‚ โ”‚ โ”œโ”€โ”€ podcasts/ # Podcast services โ”‚ โ”‚ โ”œโ”€โ”€ torrent/ # Torrent services โ”‚ โ”‚ โ”œโ”€โ”€ streaming/ # Streaming services โ”‚ โ”‚ โ”œโ”€โ”€ magnet/ # Magnet URL parsing โ”‚ โ”‚ โ”œโ”€โ”€ payments/ # Payment processing โ”‚ โ”‚ โ””โ”€โ”€ indexer/ # File indexing โ”‚ โ”œโ”€โ”€ hooks/ # React hooks โ”‚ โ””โ”€โ”€ types/ # TypeScript types โ”œโ”€โ”€ public/ # Static assets โ”œโ”€โ”€ supabase/ # Supabase migrations โ””โ”€โ”€ plans/ # Implementation plans 

Testing

This project follows Test-Driven Development (TDD). Tests are written first, then implementation.

# Run tests in watch mode pnpm test# Run tests once pnpm test:run # Run tests with coverage pnpm test:coverage

Deployment

DigitalOcean Droplet (Recommended)

We use a DigitalOcean Droplet instead of App Platform because App Platform doesn't support UDP, which is required for DHT (Distributed Hash Table) peer discovery in BitTorrent.

Quick Start:

# 1. SSH into your Droplet ssh root@YOUR_DROPLET_IP # 2. Run the setup script curl -fsSL https://raw.githubusercontent.com/profullstack/music-torrent/main/scripts/setup-droplet.sh | bash # 3. Setup SSL certbot --nginx -d yourdomain.com -d www.yourdomain.com

What the setup script does:

  • Installs Node.js 22, pnpm, FFmpeg, Nginx
  • Clones the repository
  • Creates a systemd service for auto-restart
  • Configures Nginx as reverse proxy

GitHub Actions auto-deploy:

  • Push to main branch triggers automatic deployment
  • Required GitHub Secrets:
    • DROPLET_HOST - Droplet IP address or hostname
    • DROPLET_USER - SSH username (e.g., ubuntu)
    • DROPLET_SSH_KEY - Private SSH key for authentication
    • ENV_FILE - Contents of .env file for production
  • Optional GitHub Secrets:
    • DROPLET_PORT - SSH port (defaults to 22 if not set)

See docs/deployment-droplet.md for detailed instructions.

Security

  • All Supabase calls are server-side only - No client-side database access
  • Rate limiting - Prevents abuse of magnet ingestion and streaming
  • Input validation - All user inputs are validated
  • No content storage - Only metadata is stored, content is streamed on-demand
  • Webhook verification - Payment webhooks are cryptographically verified

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Write tests first (TDD)
  4. Implement the feature
  5. Ensure all tests pass
  6. Submit a pull request

License

MIT

About

A comprehensive multi-media streaming platform that allows users to stream music, movies, books, and live TV from torrents and IPTV sources - without downloading content until playback.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •