Skip to content

Repository files navigation

StreamHub - IPTV Dashboard & Music Portal

A free, open-source dashboard for streaming live TV, browsing community playlists, watching sports, and listening to music — all in one place.

ReactTypeScriptTailwind CSSVite


Features

IPTV & Live TV

  • IPTV Player — Stream curated free IPTV channels with a built-in HLS player. Quality badges, category filters, and real-time connection status. Live match notifications from the Sports section.
  • IPTV Catalog — Browse 4,000+ community-maintained channels from iptv-org/iptv and Free-TV/IPTV with automatic deduplication. Search by name, filter by category or country.
  • Live Sports — Dual-source sports streaming engine (StreamFree + ESportex fallback). Covers football, basketball, NFL, hockey, baseball, motorsport, UFC/boxing, tennis, and cricket. Stream embeds with multi-source redundancy, language switching, and HD tags. Automatically cross-references with the IPTV player for one-click live match viewing.

Stream Music

  • Internet Radio — Browse 45,000+ radio stations from 200+ countries via the free Radio Browser API. Search by name, filter by genre or country.
  • YouTube Music — Search and play YouTube music directly in the browser via the Invidious API (privacy-friendly, no API key needed).
  • Persistent Player Bar — Always-visible bottom player with play/pause, skip, seek, volume, shuffle, repeat, and queue management.
  • YouTube IFrame API — Full integration with YouTube's IFrame API for real-time progress sync, seeking, and playback control.
  • Background Playback — Media Session API keeps audio playing when minimized. Lock screen controls on Android.
  • Mobile Expanded Player — Bottom sheet with large album art, full controls, volume slider, and queue view with frosted glass backdrop.
  • Playlists & Queue — Create custom playlists, manage queue (play next, clear), shuffle & repeat. All persisted to localStorage.
  • Favorites & History — Heart any track to save it. Auto-tracks last 50 played tracks.
  • Keyboard Shortcuts — Full keyboard control: Space (play/pause), arrows (seek/skip), M (mute), S (shuffle), R (repeat).

General

  • PWA — Installable on mobile/desktop. Works offline for cached content. Service worker with auto-update.
  • Dark / Light Mode — Full theme support with smooth transitions and persistent preference.
  • Responsive Design — Mobile-first. Bottom navigation on mobile, sidebar on desktop. Safe-area insets for notched devices.

Screenshots

imageimageimage

Mobile & Responsive

FeatureBehavior
Player barFull-width bottom bar with thin progress indicator + touch seek
Expanded player92dvh bottom sheet with backdrop blur, swipe handle, large artwork
Genre/Country filtersCompact chips, 6 visible by default, "show more" toggle
Track actionsAdd to queue, favorite, and more menu always visible on mobile
Queue panelFull-width bottom sheet on mobile, floating panel on desktop
Recently PlayedStacked list with inline delete button
YouTube playerResponsive floating overlay, minimizable to bottom-right corner

Background Playback

PlatformSupport
Chrome AndroidFull — notification controls, lock screen, headphone buttons
Chrome DesktopFull — tab audio indicator
iOS SafariAfter user gesture — lock screen controls, headphone buttons
Samsung InternetFull — notification controls

Powered by the Media Session API — the same technology used by Spotify and YouTube Music.


Tech Stack

LayerTechnology
FrameworkReact 19
LanguageTypeScript 6.0
StylingTailwind CSS 3.4
Build ToolVite 8
AnimationFramer Motion
Video PlayerHLS.js
YouTubeYouTube IFrame API
Media ControlsMedia Session API
IconsLucide React

Data Sources

SourceDescriptionCoverageLicense
iptv-org/iptvCommunity-curated IPTV channels (category-grouped)2,500+MIT
Free-TV/IPTVCountry-organized IPTV channels (80+ countries)1,800+MIT
StreamFreePrimary sports source — live-only streams with real viewer counts & badgesFree API
ESportexSecondary sports source — fallback for upcoming + live eventsFree API
Radio BrowserFree, open-source database of internet radio stations45,000+CC0
InvidiousPrivacy-friendly YouTube frontend for music searchAGPL-3.0

Deduplication: IPTV M3U sources are merged at runtime. Duplicate streams (same URL) are automatically removed (~4,000+ unique channels). Sports matches are deduplicated by title across both sources.


Getting Started

Prerequisites

  • Node.js 18+ (recommended 20+)
  • npm or yarn or pnpm

Installation

# Clone the repository
git clone https://github.com/TechKnoWEB/StreamHub.git
cd StreamHub
# Install dependencies
npm install
# Start development server
npm run dev

The app will be available at http://localhost:5173.

Build for Production

npm run build

Output will be in the dist/ directory.

Preview Production Build

npm run preview

Project Structure

src/
├── components/
│ ├── HomePage.tsx # Landing page
│ ├── LiveStreams.tsx # IPTV player + live match integration
│ ├── IPTVChannels.tsx # Multi-source channel catalog
│ ├── LiveSports.tsx # Dual-source sports engine
│ ├── LegalDisclaimer.tsx # Legal & terms
│ ├── AboutPage.tsx # About page
│ ├── Sidebar.tsx # Desktop navigation sidebar
│ ├── BottomNav.tsx # Mobile bottom navigation
│ ├── PWAInstallBanner.tsx # PWA install prompt
│ ├── VideoPlayer.tsx # HLS video player
│ └── SportsPlayer.tsx # Sports stream embed player
├── music/
│ ├── types.ts # Music-specific types
│ ├── MusicContext.tsx # Global music state
│ ├── hooks/
│ │ ├── useAudioPlayer.ts # HTML5 Audio controller
│ │ ├── useYouTubePlayer.ts # YouTube IFrame API controller
│ │ ├── useRadioBrowser.ts # Radio Browser API integration
│ │ └── useYouTubeSearch.ts # YouTube search via Invidious
│ └── components/
│ ├── MusicPortal.tsx # Main music page
│ ├── MusicPlayer.tsx # Persistent bottom player
│ ├── TrackCard.tsx # Reusable track row
│ ├── InternetRadio.tsx # Radio station browser
│ ├── YouTubeSearch.tsx # YouTube music search
│ └── YouTubeEmbed.tsx # YouTube IFrame player
├── context/
│ ├── ThemeContext.tsx # Dark/light theme
│ └── LiveStreamContext.tsx # Shared live match state
├── types.ts # Shared TypeScript interfaces
├── App.tsx # Root with hash routing
├── main.tsx # Entry point
└── index.css # Global styles

Available Scripts

CommandDescription
npm run devStart Vite dev server with HMR
npm run buildTypeScript compile + Vite production build
npm run previewPreview the production build locally
npm run lintRun ESLint

How It Works

IPTV Player

Loads curated free IPTV channels (beIN Sports, Fox Sports, etc.) and streams them via HLS.js through a local proxy to handle CORS. When a live football match is available from the Sports section, a prominent red "Live Match" card appears at the top of the channel list.

IPTV Catalog

Fetches M3U playlists from two sources in parallel (iptv-org + Free-TV), deduplicates by stream URL, and merges into a single unified catalog. Supports search, category filtering, and country filtering.

Live Sports

Connects to the SportSRC API to display upcoming match schedules across 9 sport categories. Selecting a match loads embedded stream players directly from embed.st.

Stream Music

The music portal connects to two free APIs:

  • Radio Browser API — No authentication required. Search 45K+ stations by name, genre, or country. Streams play directly via HTML5 Audio with Media Session API integration.
  • Invidious API — Privacy-friendly YouTube frontend. Searches YouTube for music videos and plays them via the YouTube IFrame API for full playback control.

All user data (volume, favorites, playlists, recently played) is persisted to localStorage under the streamhub-music key.

URL Hash Routing

Active tab state is stored in the URL hash (#home, #iptv, #catalog, #sports, #music). Refreshing the page restores the last-viewed section. Browser back/forward navigation works correctly.


Contributing

Contributions are welcome! Feel free to open an issue or submit a pull request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

This project is open source and available under the MIT License.


Acknowledgments

About

An open-source IPTV Player dashboard that brings everything together — stream live TV channels, Stream Music and world wide radio, explore community-curated playlists, and catch all the sports action in one place. Enjoy free access to the FIFA World Cup 2026, right from your screen.

Topics

Resources

Security policy

Stars

30 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages