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.
- Host: GitHub
- URL: https://github.com/profullstack/media-streamer
- Owner: profullstack
- Created: 2025-12-26T12:47:32.000Z (about 2 months ago)
- Default Branch: master
- Last Pushed: 2026-01-04T22:00:47.000Z (about 1 month ago)
- Last Synced: 2026-01-05T03:12:04.315Z (about 1 month ago)
- Language: TypeScript
- Homepage: https://bittorrented.com
- Size: 2.3 MB
- Stars: 14
- Watchers: 0
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
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