streamhub / index.html
nmtalhp's picture
Add 3 files
93c0b04 verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>StreamHub - Video Streaming Platform</title>
<script src="https://cdn.tailwindcss.com"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
/* Custom CSS for elements that need more styling than Tailwind provides */
.video-card:hover .video-overlay {
opacity: 1;
}
.video-overlay {
transition: opacity 0.3s ease;
}
.progress-bar {
transition: width 0.3s ease;
}
.player-container {
aspect-ratio: 16/9;
}
@media (max-width: 768px) {
.sidebar {
transform: translateX(-100%);
transition: transform 0.3s ease;
}
.sidebar.open {
transform: translateX(0);
}
}
</style>
</head>
<body class="bg-gray-900 text-white">
<!-- Navigation -->
<nav class="bg-gray-800 px-4 py-3 flex items-center justify-between sticky top-0 z-50">
<div class="flex items-center space-x-4">
<button id="mobile-menu-button" class="md:hidden text-xl">
<i class="fas fa-bars"></i>
</button>
<a href="#" class="text-2xl font-bold text-red-500">StreamHub</a>
<div class="hidden md:flex space-x-6">
<a href="#" class="hover:text-red-400">Home</a>
<a href="#" class="hover:text-red-400">Browse</a>
<a href="#" class="hover:text-red-400">Live</a>
<a href="#" class="hover:text-red-400">Library</a>
</div>
</div>
<div class="flex items-center space-x-4">
<div class="relative hidden md:block">
<input type="text" placeholder="Search videos..." class="bg-gray-700 px-4 py-2 rounded-full w-64 focus:outline-none focus:ring-2 focus:ring-red-500">
<button class="absolute right-3 top-2 text-gray-400">
<i class="fas fa-search"></i>
</button>
</div>
<button class="bg-red-600 hover:bg-red-700 px-4 py-2 rounded-md font-medium">
Upload
</button>
<div class="w-10 h-10 rounded-full bg-gray-600 flex items-center justify-center cursor-pointer">
<i class="fas fa-user"></i>
</div>
</div>
</nav>
<!-- Mobile Search -->
<div class="md:hidden px-4 py-2 bg-gray-800">
<div class="relative">
<input type="text" placeholder="Search videos..." class="bg-gray-700 px-4 py-2 rounded-full w-full focus:outline-none focus:ring-2 focus:ring-red-500">
<button class="absolute right-3 top-2 text-gray-400">
<i class="fas fa-search"></i>
</button>
</div>
</div>
<!-- Sidebar -->
<div id="sidebar" class="sidebar fixed md:static inset-y-0 left-0 w-64 bg-gray-800 p-4 z-40 md:translate-x-0">
<div class="flex flex-col space-y-6">
<div class="flex items-center space-x-2 mb-6">
<div class="w-10 h-10 rounded-full bg-gray-600 flex items-center justify-center">
<i class="fas fa-user"></i>
</div>
<div>
<p class="font-medium">John Doe</p>
<p class="text-sm text-gray-400">Pro Member</p>
</div>
</div>
<div>
<h3 class="text-gray-400 uppercase text-xs font-bold mb-3">Menu</h3>
<ul class="space-y-2">
<li><a href="#" class="flex items-center space-x-3 p-2 rounded hover:bg-gray-700"><i class="fas fa-home w-5"></i> <span>Home</span></a></li>
<li><a href="#" class="flex items-center space-x-3 p-2 rounded hover:bg-gray-700"><i class="fas fa-fire w-5"></i> <span>Trending</span></a></li>
<li><a href="#" class="flex items-center space-x-3 p-2 rounded hover:bg-gray-700"><i class="fas fa-compass w-5"></i> <span>Discover</span></a></li>
<li><a href="#" class="flex items-center space-x-3 p-2 rounded hover:bg-gray-700"><i class="fas fa-video w-5"></i> <span>Subscriptions</span></a></li>
</ul>
</div>
<div>
<h3 class="text-gray-400 uppercase text-xs font-bold mb-3">Library</h3>
<ul class="space-y-2">
<li><a href="#" class="flex items-center space-x-3 p-2 rounded hover:bg-gray-700"><i class="fas fa-history w-5"></i> <span>History</span></a></li>
<li><a href="#" class="flex items-center space-x-3 p-2 rounded hover:bg-gray-700"><i class="fas fa-clock w-5"></i> <span>Watch Later</span></a></li>
<li><a href="#" class="flex items-center space-x-3 p-2 rounded hover:bg-gray-700"><i class="fas fa-thumbs-up w-5"></i> <span>Liked Videos</span></a></li>
<li><a href="#" class="flex items-center space-x-3 p-2 rounded hover:bg-gray-700"><i class="fas fa-download w-5"></i> <span>Downloads</span></a></li>
</ul>
</div>
<div>
<h3 class="text-gray-400 uppercase text-xs font-bold mb-3">Categories</h3>
<ul class="space-y-2">
<li><a href="#" class="flex items-center space-x-3 p-2 rounded hover:bg-gray-700"><i class="fas fa-gamepad w-5"></i> <span>Gaming</span></a></li>
<li><a href="#" class="flex items-center space-x-3 p-2 rounded hover:bg-gray-700"><i class="fas fa-music w-5"></i> <span>Music</span></a></li>
<li><a href="#" class="flex items-center space-x-3 p-2 rounded hover:bg-gray-700"><i class="fas fa-newspaper w-5"></i> <span>News</span></a></li>
<li><a href="#" class="flex items-center space-x-3 p-2 rounded hover:bg-gray-700"><i class="fas fa-lightbulb w-5"></i> <span>Learning</span></a></li>
</ul>
</div>
</div>
</div>
<!-- Main Content -->
<main class="md:ml-64 p-4 md:p-6">
<!-- Hero Section -->
<section class="mb-8">
<div class="player-container w-full bg-black rounded-lg overflow-hidden relative">
<!-- Video Player Placeholder -->
<div class="absolute inset-0 flex items-center justify-center">
<i class="fas fa-play text-6xl text-gray-500"></i>
</div>
<div class="absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black to-transparent p-4">
<h2 class="text-2xl font-bold mb-2">Featured Video Title</h2>
<div class="flex items-center space-x-4 text-sm">
<span>1.2M views</span>
<span></span>
<span>3 days ago</span>
<span></span>
<span class="flex items-center space-x-1">
<i class="fas fa-thumbs-up"></i>
<span>45K</span>
</span>
</div>
</div>
</div>
</section>
<!-- Video Grid -->
<section>
<h2 class="text-xl font-bold mb-4">Recommended For You</h2>
<div class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4">
<!-- Video Card 1 -->
<div class="video-card bg-gray-800 rounded-lg overflow-hidden cursor-pointer transition-transform hover:scale-105">
<div class="relative">
<img src="https://via.placeholder.com/320x180" alt="Video thumbnail" class="w-full">
<div class="video-overlay absolute inset-0 bg-black bg-opacity-50 opacity-0 flex items-center justify-center">
<button class="bg-red-600 hover:bg-red-700 p-3 rounded-full">
<i class="fas fa-play"></i>
</button>
</div>
<div class="absolute bottom-2 right-2 bg-black bg-opacity-70 px-2 py-1 rounded text-sm">
10:45
</div>
</div>
<div class="p-3">
<div class="flex space-x-3">
<div class="w-10 h-10 rounded-full bg-gray-600 flex-shrink-0"></div>
<div>
<h3 class="font-medium line-clamp-2">How to build a video streaming platform with modern technologies</h3>
<p class="text-gray-400 text-sm mt-1">Tech Channel</p>
<p class="text-gray-400 text-sm">120K views • 2 days ago</p>
</div>
</div>
</div>
</div>
<!-- Video Card 2 -->
<div class="video-card bg-gray-800 rounded-lg overflow-hidden cursor-pointer transition-transform hover:scale-105">
<div class="relative">
<img src="https://via.placeholder.com/320x180" alt="Video thumbnail" class="w-full">
<div class="video-overlay absolute inset-0 bg-black bg-opacity-50 opacity-0 flex items-center justify-center">
<button class="bg-red-600 hover:bg-red-700 p-3 rounded-full">
<i class="fas fa-play"></i>
</button>
</div>
<div class="absolute bottom-2 right-2 bg-black bg-opacity-70 px-2 py-1 rounded text-sm">
22:15
</div>
</div>
<div class="p-3">
<div class="flex space-x-3">
<div class="w-10 h-10 rounded-full bg-gray-600 flex-shrink-0"></div>
<div>
<h3 class="font-medium line-clamp-2">The future of video streaming technologies and what's coming next</h3>
<p class="text-gray-400 text-sm mt-1">Future Tech</p>
<p class="text-gray-400 text-sm">450K views • 1 week ago</p>
</div>
</div>
</div>
</div>
<!-- Video Card 3 -->
<div class="video-card bg-gray-800 rounded-lg overflow-hidden cursor-pointer transition-transform hover:scale-105">
<div class="relative">
<img src="https://via.placeholder.com/320x180" alt="Video thumbnail" class="w-full">
<div class="video-overlay absolute inset-0 bg-black bg-opacity-50 opacity-0 flex items-center justify-center">
<button class="bg-red-600 hover:bg-red-700 p-3 rounded-full">
<i class="fas fa-play"></i>
</button>
</div>
<div class="absolute bottom-2 right-2 bg-black bg-opacity-70 px-2 py-1 rounded text-sm">
15:30
</div>
</div>
<div class="p-3">
<div class="flex space-x-3">
<div class="w-10 h-10 rounded-full bg-gray-600 flex-shrink-0"></div>
<div>
<h3 class="font-medium line-clamp-2">Optimizing video delivery with CDN and edge computing</h3>
<p class="text-gray-400 text-sm mt-1">DevOps Guide</p>
<p class="text-gray-400 text-sm">89K views • 3 days ago</p>
</div>
</div>
</div>
</div>
<!-- Video Card 4 -->
<div class="video-card bg-gray-800 rounded-lg overflow-hidden cursor-pointer transition-transform hover:scale-105">
<div class="relative">
<img src="https://via.placeholder.com/320x180" alt="Video thumbnail" class="w-full">
<div class="video-overlay absolute inset-0 bg-black bg-opacity-50 opacity-0 flex items-center justify-center">
<button class="bg-red-600 hover:bg-red-700 p-3 rounded-full">
<i class="fas fa-play"></i>
</button>
</div>
<div class="absolute bottom-2 right-2 bg-black bg-opacity-70 px-2 py-1 rounded text-sm">
08:22
</div>
</div>
<div class="p-3">
<div class="flex space-x-3">
<div class="w-10 h-10 rounded-full bg-gray-600 flex-shrink-0"></div>
<div>
<h3 class="font-medium line-clamp-2">Building adaptive bitrate streaming for all devices</h3>
<p class="text-gray-400 text-sm mt-1">Streaming Tech</p>
<p class="text-gray-400 text-sm">210K views • 5 days ago</p>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- Live Streams Section -->
<section class="mt-10">
<h2 class="text-xl font-bold mb-4">Live Now</h2>
<div class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4">
<!-- Live Card 1 -->
<div class="bg-gray-800 rounded-lg overflow-hidden cursor-pointer transition-transform hover:scale-105">
<div class="relative">
<img src="https://via.placeholder.com/320x180" alt="Live thumbnail" class="w-full">
<div class="absolute inset-0 bg-gradient-to-t from-black to-transparent"></div>
<div class="absolute top-2 left-2 bg-red-600 px-2 py-1 rounded text-xs font-bold">
LIVE
</div>
<div class="absolute bottom-2 left-2 flex items-center space-x-1 bg-black bg-opacity-70 px-2 py-1 rounded text-sm">
<i class="fas fa-eye"></i>
<span>12.4K</span>
</div>
</div>
<div class="p-3">
<h3 class="font-medium">Building a Streaming Platform - Day 3</h3>
<p class="text-gray-400 text-sm mt-1">Dev Streamer</p>
<p class="text-gray-400 text-sm">Gaming • Programming</p>
</div>
</div>
<!-- Live Card 2 -->
<div class="bg-gray-800 rounded-lg overflow-hidden cursor-pointer transition-transform hover:scale-105">
<div class="relative">
<img src="https://via.placeholder.com/320x180" alt="Live thumbnail" class="w-full">
<div class="absolute inset-0 bg-gradient-to-t from-black to-transparent"></div>
<div class="absolute top-2 left-2 bg-red-600 px-2 py-1 rounded text-xs font-bold">
LIVE
</div>
<div class="absolute bottom-2 left-2 flex items-center space-x-1 bg-black bg-opacity-70 px-2 py-1 rounded text-sm">
<i class="fas fa-eye"></i>
<span>8.2K</span>
</div>
</div>
<div class="p-3">
<h3 class="font-medium">Q&A About Video Encoding</h3>
<p class="text-gray-400 text-sm mt-1">Video Expert</p>
<p class="text-gray-400 text-sm">Education • Technology</p>
</div>
</div>
</div>
</section>
<!-- Upload Modal (Hidden by default) -->
<div id="upload-modal" class="fixed inset-0 bg-black bg-opacity-75 flex items-center justify-center z-50 hidden">
<div class="bg-gray-800 rounded-lg w-full max-w-2xl max-h-[90vh] overflow-y-auto">
<div class="p-6">
<div class="flex justify-between items-center mb-4">
<h2 class="text-xl font-bold">Upload Video</h2>
<button id="close-upload" class="text-gray-400 hover:text-white">
<i class="fas fa-times"></i>
</button>
</div>
<div class="border-2 border-dashed border-gray-600 rounded-lg p-8 text-center mb-6">
<i class="fas fa-cloud-upload-alt text-4xl text-gray-400 mb-3"></i>
<p class="mb-2">Drag and drop video files here</p>
<p class="text-sm text-gray-400 mb-4">or</p>
<button class="bg-red-600 hover:bg-red-700 px-6 py-2 rounded-md font-medium">
Select Files
</button>
<p class="text-xs text-gray-400 mt-3">MP4, WebM or AVI. Max 5GB.</p>
</div>
<div class="mb-6">
<label class="block text-sm font-medium mb-2">Title</label>
<input type="text" class="w-full bg-gray-700 border border-gray-600 rounded-md px-4 py-2 focus:outline-none focus:ring-2 focus:ring-red-500">
</div>
<div class="mb-6">
<label class="block text-sm font-medium mb-2">Description</label>
<textarea class="w-full bg-gray-700 border border-gray-600 rounded-md px-4 py-2 h-24 focus:outline-none focus:ring-2 focus:ring-red-500"></textarea>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 mb-6">
<div>
<label class="block text-sm font-medium mb-2">Visibility</label>
<select class="w-full bg-gray-700 border border-gray-600 rounded-md px-4 py-2 focus:outline-none focus:ring-2 focus:ring-red-500">
<option>Public</option>
<option>Unlisted</option>
<option>Private</option>
</select>
</div>
<div>
<label class="block text-sm font-medium mb-2">Category</label>
<select class="w-full bg-gray-700 border border-gray-600 rounded-md px-4 py-2 focus:outline-none focus:ring-2 focus:ring-red-500">
<option>Technology</option>
<option>Gaming</option>
<option>Education</option>
<option>Music</option>
<option>Entertainment</option>
</select>
</div>
</div>
<div class="mb-6">
<label class="block text-sm font-medium mb-2">Tags (comma separated)</label>
<input type="text" class="w-full bg-gray-700 border border-gray-600 rounded-md px-4 py-2 focus:outline-none focus:ring-2 focus:ring-red-500" placeholder="streaming, tutorial, how-to">
</div>
<div class="mb-6">
<label class="block text-sm font-medium mb-2">Thumbnail</label>
<div class="flex space-x-4">
<div class="w-1/3 h-24 bg-gray-700 rounded-md flex items-center justify-center cursor-pointer">
<i class="fas fa-image text-gray-400"></i>
</div>
<div class="w-1/3 h-24 bg-gray-700 rounded-md flex items-center justify-center cursor-pointer">
<i class="fas fa-image text-gray-400"></i>
</div>
<div class="w-1/3 h-24 bg-gray-700 rounded-md flex items-center justify-center cursor-pointer">
<i class="fas fa-image text-gray-400"></i>
</div>
</div>
</div>
<div class="flex justify-end space-x-3">
<button class="px-6 py-2 border border-gray-600 rounded-md font-medium hover:bg-gray-700">
Cancel
</button>
<button class="bg-red-600 hover:bg-red-700 px-6 py-2 rounded-md font-medium">
Upload
</button>
</div>
</div>
<!-- Upload Progress (Hidden by default) -->
<div id="upload-progress" class="p-6 border-t border-gray-700 hidden">
<h3 class="font-medium mb-4">Uploading...</h3>
<div class="w-full bg-gray-700 rounded-full h-2.5 mb-2">
<div class="progress-bar bg-red-600 h-2.5 rounded-full" style="width: 0%"></div>
</div>
<div class="flex justify-between text-sm text-gray-400">
<span>0%</span>
<span>Processing...</span>
</div>
</div>
</div>
</div>
</main>
<!-- Video Player Modal (Hidden by default) -->
<div id="video-player-modal" class="fixed inset-0 bg-black z-50 hidden">
<div class="absolute top-4 right-4 z-10">
<button id="close-player" class="text-white bg-black bg-opacity-50 rounded-full p-2 hover:bg-opacity-70">
<i class="fas fa-times"></i>
</button>
</div>
<div class="h-full flex flex-col">
<div class="flex-grow flex items-center justify-center">
<div class="w-full max-w-4xl px-4">
<div class="player-container w-full bg-black rounded-lg overflow-hidden relative">
<!-- Video Player Placeholder -->
<div class="absolute inset-0 flex items-center justify-center">
<i class="fas fa-play text-6xl text-gray-500"></i>
</div>
<div class="absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black to-transparent p-4">
<div class="flex items-center justify-between">
<div>
<h2 class="text-xl font-bold">Now Playing: Video Title</h2>
<p class="text-sm text-gray-300">1.2M views • 3 days ago</p>
</div>
<div class="flex space-x-3">
<button class="text-white hover:text-red-400">
<i class="fas fa-thumbs-up"></i> 45K
</button>
<button class="text-white hover:text-red-400">
<i class="fas fa-thumbs-down"></i>
</button>
<button class="text-white hover:text-red-400">
<i class="fas fa-share"></i>
</button>
</div>
</div>
<div class="mt-3 w-full bg-gray-700 rounded-full h-1.5">
<div class="bg-red-600 h-1.5 rounded-full" style="width: 35%"></div>
</div>
<div class="flex justify-between mt-1 text-xs text-gray-400">
<span>5:22</span>
<span>14:36</span>
</div>
<div class="flex justify-between mt-3">
<div class="flex space-x-4">
<button class="text-white hover:text-red-400">
<i class="fas fa-play"></i>
</button>
<button class="text-white hover:text-red-400">
<i class="fas fa-volume-up"></i>
</button>
<button class="text-white hover:text-red-400">
<i class="fas fa-closed-captioning"></i>
</button>
<button class="text-white hover:text-red-400">
<i class="fas fa-cog"></i>
</button>
</div>
<button class="text-white hover:text-red-400">
<i class="fas fa-expand"></i>
</button>
</div>
</div>
</div>
</div>
</div>
<div class="bg-gray-900 p-4">
<div class="max-w-4xl mx-auto">
<div class="flex items-start space-x-4">
<div class="w-12 h-12 rounded-full bg-gray-700 flex-shrink-0"></div>
<div class="flex-grow">
<div class="flex items-center justify-between">
<div>
<h3 class="font-medium">Channel Name</h3>
<p class="text-sm text-gray-400">1.5M subscribers</p>
</div>
<button class="bg-red-600 hover:bg-red-700 px-4 py-2 rounded-md font-medium text-sm">
Subscribe
</button>
</div>
<div class="mt-4 bg-gray-800 rounded-lg p-4">
<div class="flex items-center space-x-2 text-sm mb-2">
<span>45K views</span>
<span></span>
<span>3 days ago</span>
</div>
<p class="text-sm">This is the video description. It explains what the video is about and might include links or timestamps for different sections.</p>
</div>
<div class="mt-4">
<h4 class="font-medium mb-3">Comments (1,234)</h4>
<div class="flex space-x-3 mb-4">
<div class="w-8 h-8 rounded-full bg-gray-700 flex-shrink-0"></div>
<input type="text" placeholder="Add a comment..." class="bg-transparent border-b border-gray-700 w-full focus:outline-none focus:border-red-500">
</div>
<div class="space-y-4">
<!-- Comment 1 -->
<div class="flex space-x-3">
<div class="w-8 h-8 rounded-full bg-gray-700 flex-shrink-0"></div>
<div>
<div class="flex items-center space-x-2 text-sm">
<span class="font-medium">User123</span>
<span class="text-gray-400">2 days ago</span>
</div>
<p class="text-sm mt-1">Great video! Very informative and well explained.</p>
<div class="flex items-center space-x-4 mt-1 text-sm text-gray-400">
<button class="hover:text-white">
<i class="fas fa-thumbs-up"></i> 245
</button>
<button class="hover:text-white">
<i class="fas fa-thumbs-down"></i>
</button>
<button class="hover:text-white">
Reply
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
// Mobile menu toggle
document.getElementById('mobile-menu-button').addEventListener('click', function() {
document.getElementById('sidebar').classList.toggle('open');
});
// Upload modal
const uploadButtons = document.querySelectorAll('button:contains("Upload")');
const uploadModal = document.getElementById('upload-modal');
const closeUpload = document.getElementById('close-upload');
uploadButtons.forEach(button => {
button.addEventListener('click', function() {
uploadModal.classList.remove('hidden');
});
});
closeUpload.addEventListener('click', function() {
uploadModal.classList.add('hidden');
});
// Simulate upload progress
const uploadBtn = uploadModal.querySelector('button:contains("Upload")');
uploadBtn.addEventListener('click', function() {
const uploadProgress = document.getElementById('upload-progress');
const progressBar = uploadProgress.querySelector('.progress-bar');
uploadProgress.classList.remove('hidden');
uploadBtn.disabled = true;
let progress = 0;
const interval = setInterval(() => {
progress += Math.random() * 10;
if (progress >= 100) {
progress = 100;
clearInterval(interval);
uploadProgress.querySelector('span:last-child').textContent = 'Processing complete!';
}
progressBar.style.width = `${progress}%`;
uploadProgress.querySelector('span:first-child').textContent = `${Math.round(progress)}%`;
}, 500);
});
// Video player modal
const videoCards = document.querySelectorAll('.video-card');
const videoPlayerModal = document.getElementById('video-player-modal');
const closePlayer = document.getElementById('close-player');
videoCards.forEach(card => {
card.addEventListener('click', function() {
videoPlayerModal.classList.remove('hidden');
document.body.style.overflow = 'hidden';
});
});
closePlayer.addEventListener('click', function() {
videoPlayerModal.classList.add('hidden');
document.body.style.overflow = '';
});
// Close modals when clicking outside
[uploadModal, videoPlayerModal].forEach(modal => {
modal.addEventListener('click', function(e) {
if (e.target === modal) {
modal.classList.add('hidden');
document.body.style.overflow = '';
}
});
});
</script>
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=nmtalhp/streamhub" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html>