Built a complete Netflix-style streaming interface for IndeeHub's decentralized media platform with real film content. Features: - Vue 3 + TypeScript + Vite setup with hot module reloading - Netflix-inspired UI with hero section and horizontal scrolling content rows - Glass morphism design system with custom Tailwind configuration - 20+ real IndeeHub films organized into 6 categories (Bitcoin, Documentaries, Drama, etc.) - Full-featured video player component with custom controls - Mobile-responsive design with bottom navigation - Nostr integration ready (nostr-tools, relay pool, NIP-71 support) - Pinia state management for content - MCP tools configured (Filesystem, Memory, Nostr, Puppeteer) Components: - Browse.vue: Main streaming interface with hero and content rows - ContentRow.vue: Horizontal scrolling film cards with navigation arrows - VideoPlayer.vue: Custom video player with play/pause, seek, volume, fullscreen - MobileNav.vue: Bottom tab navigation for mobile devices Tech Stack: - Frontend: Vue 3 (Composition API), TypeScript - Build: Vite 7 - Styling: Tailwind CSS with custom theme - State: Pinia 3 - Router: Vue Router 4.6 - Protocol: Nostr (nostr-tools 2.22) Design: - 4px grid spacing system - Glass morphism UI components - Netflix-style hero section with featured content - Smooth animations and hover effects - Mobile-first responsive breakpoints - Dark theme with custom color palette Content: - 20+ IndeeHub films with titles, descriptions, categories - Bitcoin documentaries: God Bless Bitcoin, Dirty Coin, Searching for Satoshi - Independent films and documentaries - Working Unsplash CDN images for thumbnails and backdrops Ready for deployment to Umbrel, Start9, and Archy nodes. Co-authored-by: Cursor <cursoragent@cursor.com>
26 lines
800 B
JavaScript
26 lines
800 B
JavaScript
// Script to extract IndeeHub film data from screening room
|
|
// Run this in browser console on https://indeehub.studio/screening-room?type=film
|
|
|
|
const films = [];
|
|
const filmCards = document.querySelectorAll('a[href^="/film/"]');
|
|
|
|
filmCards.forEach((card, index) => {
|
|
const title = card.querySelector('h3, [class*="title"]')?.textContent?.trim();
|
|
const img = card.querySelector('img');
|
|
const thumbnail = img?.src || img?.getAttribute('data-src');
|
|
const link = card.getAttribute('href');
|
|
|
|
if (title && thumbnail && link) {
|
|
films.push({
|
|
id: link.replace('/film/', ''),
|
|
title: title,
|
|
thumbnail: thumbnail,
|
|
link: `https://indeehub.studio${link}`,
|
|
type: 'film'
|
|
});
|
|
}
|
|
});
|
|
|
|
console.log(JSON.stringify(films, null, 2));
|
|
copy(JSON.stringify(films, null, 2));
|