An open API service indexing awesome lists of open source software.

https://github.com/profullstack/media-streamer

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.
https://github.com/profullstack/media-streamer

Last synced: 27 days ago
JSON representation

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.

Awesome Lists containing this project

README

          

# 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

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

### 2. Install dependencies

```bash
pnpm install
```

### 3. Set up environment variables

```bash
cp .env.example .env.local
```

Edit `.env.local` with your credentials:

```env
# Supabase
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
SUPABASE_ANON_KEY=your-anon-key

# Metadata APIs
THETVDB_API_KEY=your-thetvdb-key
OMDB_API_KEY=your-omdb-key

# CoinPayPortal (for payments)
COINPAYPORTAL_MERCHANT_ID=your-merchant-id
COINPAYPORTAL_API_KEY=your-api-key
```

### 4. Run the development server

```bash
pnpm dev
```

Open [http://localhost:3000](http://localhost:3000) in your browser.

## Scripts

| Command | Description |
|---------|-------------|
| `pnpm dev` | Start development server |
| `pnpm build` | Build for production |
| `pnpm start` | Start production server |
| `pnpm test` | Run tests in watch mode |
| `pnpm test:run` | Run tests once |
| `pnpm test:coverage` | Run tests with coverage |
| `pnpm lint` | Run ESLint |
| `pnpm typecheck` | Run 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.

```bash
# 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:**

```bash
# 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](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