| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <title>SingSync - Your Ultimate Karaoke Hub</title> |
| <link rel="icon" type="image/x-icon" href="https://static.photos/music/200x200/1"> |
| <script src="https://cdn.tailwindcss.com"></script> |
| <script src="https://unpkg.com/feather-icons"></script> |
| <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script> |
| <script src="https://cdn.jsdelivr.net/npm/vanta@latest/dist/vanta.waves.min.js"></script> |
| <script> |
| tailwind.config = { |
| theme: { |
| extend: { |
| colors: { |
| primary: '#FF5F7E', |
| secondary: '#6E44FF', |
| dark: '#1A1A2E', |
| light: '#F5F5F5' |
| } |
| } |
| } |
| } |
| </script> |
| <style> |
| @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap'); |
| body { |
| font-family: 'Poppins', sans-serif; |
| background-color: #000000 !important; |
| } |
| .bg-dark, .bg-gray-800, .bg-gray-700, .bg-gray-900 { |
| background-color: #000000 !important; |
| border-color: #222222 !important; |
| } |
| .text-light { |
| color: #ffffff !important; |
| } |
| .text-gray-400 { |
| color: #666666 !important; |
| } |
| .text-gray-500 { |
| color: #777777 !important; |
| } |
| .video-wrapper { |
| aspect-ratio: 16/9; |
| } |
| .queue-item:hover { |
| transform: translateX(5px); |
| } |
| .search-result:hover { |
| transform: scale(1.02); |
| } |
| </style> |
| </head> |
| <body class="bg-dark text-light min-h-screen"> |
| <div id="vanta-bg" class="fixed inset-0 -z-10 opacity-20"></div> |
| |
| |
| <header class="bg-dark bg-opacity-80 backdrop-blur-md sticky top-0 z-50 border-b border-primary border-opacity-20"> |
| <div class="container mx-auto px-4 py-3 flex justify-between items-center"> |
| <div class="flex items-center space-x-2"> |
| <i data-feather="mic" class="text-primary w-8 h-8"></i> |
| <h1 class="text-2xl font-bold bg-gradient-to-r from-primary to-secondary bg-clip-text text-transparent">SingSync</h1> |
| </div> |
| <div class="flex space-x-4"> |
| <button class="px-4 py-2 rounded-full bg-primary hover:bg-primary/90 transition flex items-center space-x-2"> |
| <i data-feather="user" class="w-4 h-4"></i> |
| <span>Sign In</span> |
| </button> |
| <button class="px-4 py-2 rounded-full bg-secondary hover:bg-secondary/90 transition flex items-center space-x-2"> |
| <i data-feather="plus" class="w-4 h-4"></i> |
| <span>Create Room</span> |
| </button> |
| </div> |
| </div> |
| </header> |
|
|
| <main class="container mx-auto px-4 py-8"> |
| |
| <section class="text-center mb-12"> |
| <h2 class="text-4xl md:text-5xl font-bold mb-4">Sing Your Heart Out</h2> |
| <p class="text-lg text-gray-300 max-w-2xl mx-auto">Discover millions of karaoke tracks, create playlists, and queue up your favorites with friends.</p> |
| |
| <div class="max-w-2xl mx-auto mt-8 relative"> |
| <form id="searchForm" class="relative"> |
| <input type="text" placeholder="Search for songs, artists, or lyrics..." |
| class="w-full px-6 py-4 rounded-full bg-gray-900 border border-gray-700 focus:border-primary focus:ring-2 focus:ring-primary/50 outline-none transition"> |
| <button type="submit" class="absolute right-2 top-2 bg-primary p-2 rounded-full hover:bg-primary/90 transition"> |
| <i data-feather="search" class="w-5 h-5"></i> |
| </button> |
| </form> |
| <div id="searchResults" class="absolute z-50 w-full mt-2 bg-gray-900 rounded-xl shadow-lg border border-gray-700 hidden max-h-96 overflow-y-auto"></div> |
| </div> |
| </section> |
|
|
| |
| <div class="grid grid-cols-1 lg:grid-cols-3 gap-8"> |
| |
| <div class="lg:col-span-2 space-y-8"> |
| |
| <div class="bg-dark bg-opacity-60 backdrop-blur-md rounded-xl p-6 border border-gray-700 shadow-lg"> |
| <h3 class="text-xl font-semibold mb-4 flex items-center space-x-2"> |
| <i data-feather="play" class="text-primary w-5 h-5"></i> |
| <span>Now Playing</span> |
| </h3> |
| <div class="video-wrapper bg-black rounded-lg overflow-hidden mb-4 relative pb-[56.25%]"> |
| <iframe class="absolute top-0 left-0 w-full h-full" |
| src="https://www.youtube.com/embed/fJ9rUzIMcZQ?autoplay=0&controls=1" |
| frameborder="0" |
| allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" |
| allowfullscreen></iframe> |
| </div> |
| <div class="flex justify-between items-center"> |
| <div> |
| <h4 class="text-xl font-bold">Bohemian Rhapsody</h4> |
| <p class="text-gray-400">Queen</p> |
| </div> |
| <div class="flex space-x-3"> |
| <button class="p-2 rounded-full bg-gray-700 hover:bg-gray-600 transition"> |
| <i data-feather="skip-back" class="w-5 h-5"></i> |
| </button> |
| <button class="p-3 rounded-full bg-primary hover:bg-primary/90 transition"> |
| <i data-feather="pause" class="w-6 h-6"></i> |
| </button> |
| <button class="p-2 rounded-full bg-gray-700 hover:bg-gray-600 transition"> |
| <i data-feather="skip-forward" class="w-5 h-5"></i> |
| </button> |
| </div> |
| </div> |
| </div> |
|
|
| |
| <div class="bg-dark bg-opacity-60 backdrop-blur-md rounded-xl p-6 border border-gray-700 shadow-lg"> |
| <div class="flex justify-between items-center mb-4"> |
| <h3 class="text-xl font-semibold flex items-center space-x-2"> |
| <i data-feather="list" class="text-secondary w-5 h-5"></i> |
| <span>Queue</span> |
| </h3> |
| <button class="text-sm bg-secondary px-3 py-1 rounded-full hover:bg-secondary/90 transition"> |
| Clear All |
| </button> |
| </div> |
| <div class="space-y-2 max-h-96 overflow-y-auto pr-2"> |
| |
| <div class="queue-item flex items-center justify-between p-3 bg-gray-800 rounded-lg hover:bg-gray-700 transition cursor-pointer"> |
| <div class="flex items-center space-x-3"> |
| <img src="https://static.photos/music/200x200/2" alt="Song Cover" class="w-12 h-12 rounded"> |
| <div> |
| <h4 class="font-medium">Sweet Child O' Mine</h4> |
| <p class="text-sm text-gray-400">Guns N' Roses</p> |
| </div> |
| </div> |
| <div class="flex items-center space-x-2"> |
| <span class="text-sm text-gray-400">3:56</span> |
| <button class="text-gray-400 hover:text-primary"> |
| <i data-feather="x" class="w-4 h-4"></i> |
| </button> |
| </div> |
| </div> |
| <div class="queue-item flex items-center justify-between p-3 bg-gray-800 rounded-lg hover:bg-gray-700 transition cursor-pointer"> |
| <div class="flex items-center space-x-3"> |
| <img src="https://static.photos/music/200x200/3" alt="Song Cover" class="w-12 h-12 rounded"> |
| <div> |
| <h4 class="font-medium">Billie Jean</h4> |
| <p class="text-sm text-gray-400">Michael Jackson</p> |
| </div> |
| </div> |
| <div class="flex items-center space-x-2"> |
| <span class="text-sm text-gray-400">4:54</span> |
| <button class="text-gray-400 hover:text-primary"> |
| <i data-feather="x" class="w-4 h-4"></i> |
| </button> |
| </div> |
| </div> |
| <div class="queue-item flex items-center justify-between p-3 bg-gray-800 rounded-lg hover:bg-gray-700 transition cursor-pointer"> |
| <div class="flex items-center space-x-3"> |
| <img src="https://static.photos/music/200x200/4" alt="Song Cover" class="w-12 h-12 rounded"> |
| <div> |
| <h4 class="font-medium">Livin' on a Prayer</h4> |
| <p class="text-sm text-gray-400">Bon Jovi</p> |
| </div> |
| </div> |
| <div class="flex items-center space-x-2"> |
| <span class="text-sm text-gray-400">4:09</span> |
| <button class="text-gray-400 hover:text-primary"> |
| <i data-feather="x" class="w-4 h-4"></i> |
| </button> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
|
|
| |
| <div class="space-y-8"> |
| |
| <div class="bg-dark bg-opacity-60 backdrop-blur-md rounded-xl p-6 border border-gray-700 shadow-lg"> |
| <div class="flex justify-between items-center mb-4"> |
| <h3 class="text-xl font-semibold flex items-center space-x-2"> |
| <i data-feather="folder" class="text-primary w-5 h-5"></i> |
| <span>Your Playlists</span> |
| </h3> |
| <button class="p-1 rounded-full bg-primary hover:bg-primary/90 transition"> |
| <i data-feather="plus" class="w-4 h-4"></i> |
| </button> |
| </div> |
| <div class="space-y-3"> |
| <div class="flex items-center space-x-3 p-2 rounded-lg hover:bg-gray-700 transition cursor-pointer"> |
| <img src="https://static.photos/music/200x200/5" alt="Playlist Cover" class="w-12 h-12 rounded"> |
| <div> |
| <h4 class="font-medium">80s Rock Anthems</h4> |
| <p class="text-sm text-gray-400">24 songs</p> |
| </div> |
| </div> |
| <div class="flex items-center space-x-3 p-2 rounded-lg hover:bg-gray-700 transition cursor-pointer"> |
| <img src="https://static.photos/music/200x200/6" alt="Playlist Cover" class="w-12 h-12 rounded"> |
| <div> |
| <h4 class="font-medium">Pop Divas</h4> |
| <p class="text-sm text-gray-400">18 songs</p> |
| </div> |
| </div> |
| <div class="flex items-center space-x-3 p-2 rounded-lg hover:bg-gray-700 transition cursor-pointer"> |
| <img src="https://static.photos/music/200x200/7" alt="Playlist Cover" class="w-12 h-12 rounded"> |
| <div> |
| <h4 class="font-medium">Karaoke Classics</h4> |
| <p class="text-sm text-gray-400">32 songs</p> |
| </div> |
| </div> |
| </div> |
| </div> |
| |
| <div class="bg-dark bg-opacity-60 backdrop-blur-md rounded-xl p-6 border border-gray-700 shadow-lg mb-6"> |
| <h3 class="text-xl font-semibold mb-4 flex items-center space-x-2"> |
| <i data-feather="filter" class="text-secondary w-5 h-5"></i> |
| <span>Filters</span> |
| </h3> |
| <div class="flex flex-wrap gap-2"> |
| <button class="px-3 py-1 rounded-full bg-gray-700 hover:bg-primary/20 border border-primary/30 transition text-sm">All</button> |
| <button class="px-3 py-1 rounded-full bg-gray-700 hover:bg-primary/20 border border-primary/30 transition text-sm">Pop</button> |
| <button class="px-3 py-1 rounded-full bg-gray-700 hover:bg-primary/20 border border-primary/30 transition text-sm">Rock</button> |
| <button class="px-3 py-1 rounded-full bg-gray-700 hover:bg-primary/20 border border-primary/30 transition text-sm">Hip-Hop</button> |
| <button class="px-3 py-1 rounded-full bg-gray-700 hover:bg-primary/20 border border-primary/30 transition text-sm">R&B</button> |
| <button class="px-3 py-1 rounded-full bg-gray-700 hover:bg-primary/20 border border-primary/30 transition text-sm">Country</button> |
| <button class="px-3 py-1 rounded-full bg-gray-700 hover:bg-primary/20 border border-primary/30 transition text-sm">EDM</button> |
| <button class="px-3 py-1 rounded-full bg-gray-700 hover:bg-primary/20 border border-primary/30 transition text-sm">Jazz</button> |
| <button class="px-3 py-1 rounded-full bg-gray-700 hover:bg-primary/20 border border-primary/30 transition text-sm">English</button> |
| <button class="px-3 py-1 rounded-full bg-gray-700 hover:bg-primary/20 border border-primary/30 transition text-sm">Spanish</button> |
| <button class="px-3 py-1 rounded-full bg-gray-700 hover:bg-primary/20 border border-primary/30 transition text-sm">Korean</button> |
| <button class="px-3 py-1 rounded-full bg-gray-700 hover:bg-primary/20 border border-primary/30 transition text-sm">Japanese</button> |
| </div> |
| </div> |
|
|
| |
| <div class="bg-dark bg-opacity-60 backdrop-blur-md rounded-xl p-6 border border-gray-700 shadow-lg"> |
| <h3 class="text-xl font-semibold mb-4 flex items-center space-x-2"> |
| <i data-feather="search" class="text-secondary w-5 h-5"></i> |
| <span>Popular Now</span> |
| </h3> |
| <div class="space-y-4"> |
| <div class="search-result flex items-center space-x-3 p-2 rounded-lg hover:bg-gray-700 transition cursor-pointer"> |
| <img src="https://static.photos/music/200x200/8" alt="Song Cover" class="w-12 h-12 rounded"> |
| <div class="flex-1"> |
| <h4 class="font-medium">Blinding Lights</h4> |
| <p class="text-sm text-gray-400">The Weeknd</p> |
| </div> |
| <button class="p-2 rounded-full bg-secondary hover:bg-secondary/90 transition"> |
| <i data-feather="plus" class="w-4 h-4"></i> |
| </button> |
| </div> |
| <div class="search-result flex items-center space-x-3 p-2 rounded-lg hover:bg-gray-700 transition cursor-pointer"> |
| <img src="https://static.photos/music/200x200/9" alt="Song Cover" class="w-12 h-12 rounded"> |
| <div class="flex-1"> |
| <h4 class="font-medium">Levitating</h4> |
| <p class="text-sm text-gray-400">Dua Lipa</p> |
| </div> |
| <button class="p-2 rounded-full bg-secondary hover:bg-secondary/90 transition"> |
| <i data-feather="plus" class="w-4 h-4"></i> |
| </button> |
| </div> |
| <div class="search-result flex items-center space-x-3 p-2 rounded-lg hover:bg-gray-700 transition cursor-pointer"> |
| <img src="https://static.photos/music/200x200/10" alt="Song Cover" class="w-12 h-12 rounded"> |
| <div class="flex-1"> |
| <h4 class="font-medium">Stay</h4> |
| <p class="text-sm text-gray-400">The Kid LAROI, Justin Bieber</p> |
| </div> |
| <button class="p-2 rounded-full bg-secondary hover:bg-secondary/90 transition"> |
| <i data-feather="plus" class="w-4 h-4"></i> |
| </button> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
| </main> |
|
|
| <footer class="bg-dark bg-opacity-80 backdrop-blur-md border-t border-gray-700 mt-12"> |
| <div class="container mx-auto px-4 py-6"> |
| <div class="flex flex-col md:flex-row justify-between items-center"> |
| <div class="flex items-center space-x-2 mb-4 md:mb-0"> |
| <i data-feather="mic" class="text-primary w-6 h-6"></i> |
| <span class="font-bold">SingSync</span> |
| </div> |
| <div class="flex space-x-6"> |
| <a href="#" class="hover:text-primary transition">About</a> |
| <a href="#" class="hover:text-primary transition">Features</a> |
| <a href="#" class="hover:text-primary transition">Pricing</a> |
| <a href="#" class="hover:text-primary transition">Contact</a> |
| </div> |
| <div class="flex space-x-4 mt-4 md:mt-0"> |
| <a href="#" class="p-2 bg-gray-700 rounded-full hover:bg-gray-600 transition"> |
| <i data-feather="facebook" class="w-4 h-4"></i> |
| </a> |
| <a href="#" class="p-2 bg-gray-700 rounded-full hover:bg-gray-600 transition"> |
| <i data-feather="twitter" class="w-4 h-4"></i> |
| </a> |
| <a href="#" class="p-2 bg-gray-700 rounded-full hover:bg-gray-600 transition"> |
| <i data-feather="instagram" class="w-4 h-4"></i> |
| </a> |
| </div> |
| </div> |
| <div class="text-center text-sm text-gray-500 mt-6"> |
| © 2023 SingSync. All rights reserved. Made with ❤️ for karaoke lovers. |
| </div> |
| </div> |
| </footer> |
| <script> |
| |
| document.getElementById('searchForm').addEventListener('submit', async function(e) { |
| e.preventDefault(); |
| const query = this.querySelector('input').value.trim(); |
| if (!query) return; |
| |
| const resultsContainer = document.getElementById('searchResults'); |
| try { |
| |
| resultsContainer.innerHTML = ` |
| <div class="p-4 text-center text-gray-400"> |
| <i data-feather="loader" class="w-6 h-6 animate-spin mx-auto"></i> |
| <p class="mt-2">Searching...</p> |
| </div>`; |
| feather.replace(); |
| resultsContainer.classList.remove('hidden'); |
| |
| |
| const response = await fetch(`https://itunes.apple.com/search?term=${encodeURIComponent(query)}&media=music&limit=5`); |
| const data = await response.json(); |
| |
| if (data.results && data.results.length > 0) { |
| resultsContainer.innerHTML = data.results.map(song => ` |
| <div class="search-result flex items-center p-3 hover:bg-gray-900 transition cursor-pointer border-b border-gray-800 last:border-0"> |
| <img src="${song.artworkUrl100.replace('100x100', '200x200')}" alt="${song.trackName}" class="w-12 h-12 rounded"> |
| <div class="ml-3 flex-1"> |
| <h4 class="font-medium">${song.trackName}</h4> |
| <p class="text-sm text-gray-400">${song.artistName}</p> |
| </div> |
| <span class="text-sm text-gray-500 mr-3">${Math.floor(song.trackTimeMillis/60000)}:${String(Math.floor((song.trackTimeMillis%60000)/1000)).padStart(2, '0')}</span> |
| <button class="p-2 rounded-full bg-secondary hover:bg-secondary/90 transition" onclick="addToQueue('${song.trackId}')"> |
| <i data-feather="plus" class="w-4 h-4"></i> |
| </button> |
| </div> |
| `).join(''); |
| |
| const filteredResults = mockResults.filter(song => |
| song.title.toLowerCase().includes(query.toLowerCase()) || |
| song.artist.toLowerCase().includes(query.toLowerCase()) |
| ); |
| |
| if (filteredResults.length === 0) { |
| resultsContainer.innerHTML = ` |
| <div class="p-4 text-center text-gray-400"> |
| <i data-feather="frown" class="w-6 h-6 mx-auto"></i> |
| <p class="mt-2">No results found for "${query}"</p> |
| </div>`; |
| } else { |
| resultsContainer.innerHTML = filteredResults.map(song => ` |
| <div class="search-result flex items-center p-3 hover:bg-gray-800 transition cursor-pointer border-b border-gray-800 last:border-0"> |
| <img src="${song.cover}" alt="${song.title}" class="w-12 h-12 rounded"> |
| <div class="ml-3 flex-1"> |
| <h4 class="font-medium">${song.title}</h4> |
| <p class="text-sm text-gray-400">${song.artist}</p> |
| </div> |
| <span class="text-sm text-gray-500 mr-3">${song.duration}</span> |
| <button class="p-2 rounded-full bg-secondary hover:bg-secondary/90 transition"> |
| <i data-feather="plus" class="w-4 h-4"></i> |
| </button> |
| </div> |
| `).join(''); |
| } |
| feather.replace(); |
| } catch (error) { |
| resultsContainer.innerHTML = ` |
| <div class="p-4 text-center text-red-400"> |
| <i data-feather="alert-circle" class="w-6 h-6 mx-auto"></i> |
| <p class="mt-2">Error searching. Please try again.</p> |
| </div>`; |
| feather.replace(); |
| } |
| }); |
| |
| |
| document.addEventListener('click', function(e) { |
| if (!document.getElementById('searchForm').contains(e.target)) { |
| document.getElementById('searchResults').classList.add('hidden'); |
| } |
| }); |
| |
| |
| function handleResize() { |
| if (window.innerWidth < 768) { |
| document.querySelector('.grid').classList.remove('lg:grid-cols-3'); |
| document.querySelector('.grid').classList.add('grid-cols-1'); |
| document.querySelector('.lg\\:col-span-2').classList.remove('lg:col-span-2'); |
| } else { |
| document.querySelector('.grid').classList.add('lg:grid-cols-3'); |
| document.querySelector('.grid').classList.remove('grid-cols-1'); |
| document.querySelector('.lg\\:col-span-2').classList.add('lg:col-span-2'); |
| } |
| } |
| |
| window.addEventListener('resize', handleResize); |
| handleResize(); |
| |
| VANTA.WAVES({ |
| el: "#vanta-bg", |
| mouseControls: true, |
| touchControls: true, |
| gyroControls: false, |
| minHeight: 200.00, |
| minWidth: 200.00, |
| scale: 1.00, |
| scaleMobile: 1.00, |
| color: 0x0, |
| shininess: 100.00, |
| waveHeight: 10.00, |
| waveSpeed: 0.50, |
| zoom: 0.65 |
| }); |
| |
| document.addEventListener('DOMContentLoaded', () => { |
| |
| anime({ |
| targets: 'header, section, .bg-dark', |
| opacity: [0, 1], |
| duration: 800, |
| easing: 'easeInOutQuad', |
| delay: anime.stagger(100) |
| }); |
| }); |
| </script> |
| <script> |
| feather.replace(); |
| |
| |
| document.addEventListener('keydown', function(e) { |
| if (e.ctrlKey && e.key === 'd') { |
| document.body.classList.toggle('bg-black'); |
| } |
| }); |
| </script> |
| </body> |
| </html> |
|
|