const { useState, useEffect, useRef } = React; // ── Route hook ────────────────────────────────────────────────────────────── function useRoute() { const [route, setRoute] = useState(window.location.hash || '#/'); useEffect(() => { const handler = () => setRoute(window.location.hash || '#/'); window.addEventListener('hashchange', handler); return () => window.removeEventListener('hashchange', handler); }, []); return route; } // ── Scroll reveal hook ────────────────────────────────────────────────────── function useScrollReveal(dep) { useEffect(() => { const els = document.querySelectorAll('.reveal'); const observer = new IntersectionObserver((entries) => { entries.forEach(e => { if (e.isIntersecting) e.target.classList.add('revealed'); }); }, { threshold: 0.08 }); els.forEach(el => observer.observe(el)); return () => observer.disconnect(); }, [dep]); } // ── Nav ───────────────────────────────────────────────────────────────────── function Nav({ route }) { const [scrolled, setScrolled] = useState(false); const [open, setOpen] = useState(false); useEffect(() => { const h = () => setScrolled(window.scrollY > 60); window.addEventListener('scroll', h); return () => window.removeEventListener('scroll', h); }, []); useEffect(() => { setOpen(false); }, [route]); const links = [ { href: '#/', label: 'Home' }, { href: '#/watch', label: 'Watch' }, { href: '#/music', label: 'Music' }, { href: '#/merch', label: 'Merch' }, { href: '#/resources', label: 'Resources' }, { href: '#/about', label: 'About' }, { href: '#/contact', label: 'Contact' }, ]; return ( ); } // ── Social icons ───────────────────────────────────────────────────────────── function SocialLinks() { const socials = [ { label: 'X', href: 'https://x.com/The_Idol_Killer', icon: }, { label: 'Facebook', href: 'https://www.facebook.com/IdolKiller', icon: }, { label: 'Kick', href: 'https://kick.com/idolkiller', icon: }, { label: 'Patreon', href: 'https://www.patreon.com/IdolKiller', icon: }, ]; return (
{new Date(video.date).toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' })}
} {video.description &&{video.description.slice(0, 300)}{video.description.length > 300 ? '…' : ''}
} Watch on YouTube ↗