Commit Graph

147 Commits

Author SHA1 Message Date
Dorian
bcaae91dfd Apply glassmorphism to scroll navigation arrows
Styled scroll buttons with glass treatment:
- Background: rgba(0, 0, 0, 0.35) with 24px backdrop blur
- Border: Subtle white border with glow
- Box shadow: Layered shadows with inset highlight
- Hover: Darker background with enhanced glow
- Opacity: 70% default, 100% on hover
- Matches overall glassmorphic design language

Buttons now have the same elegant glass styling as other UI elements.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:44:09 +00:00
Dorian
439bc792a3 Make hero banner 10% taller
Increased hero section height:
- Mobile: 51vh → 56vh (10% increase)
- Desktop: 55vh → 61vh (11% increase)

Provides more visual impact and breathing room for featured content.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:43:41 +00:00
Dorian
8260908024 Keep scroll navigation buttons visible when content can scroll
Changed scroll buttons behavior:
- Always visible at 70% opacity when there's more content to scroll
- Increase to 100% opacity on hover
- Removed group-hover requirement
- Only show when canScrollLeft/canScrollRight is true

Users now have a clear indicator when more content is available
without needing to hover over the content row.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:43:18 +00:00
Dorian
e854f67851 Add hero title gradient and spacing styles
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:41:58 +00:00
Dorian
d8580638ba Add gradient and character spacing to hero title
Applied same styling as content row titles:
- Gradient from #fafafa to #9ca3af
- letter-spacing: 0.05em (5% character spacing)
- Used background-clip: text for gradient effect
- Maintains uppercase and bold styling

Hero title now matches the visual language of section titles.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:41:34 +00:00
Dorian
47a82c5158 Make titles bolder and add 5% character spacing
Changed content row titles to:
- font-bold (700 weight) for more emphasis
- letter-spacing: 0.05em (5% character spacing)
- Maintains gradient effect from #fafafa to #9ca3af
- More prominent and readable

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:40:32 +00:00
Dorian
12f27bc4fd Add color system rules to design standards
Established core color constants:
- Pure black: #0a0a0a (never #000000)
- White text: #FAFAFA (never #FFFFFF)
- Reverse in light mode (bg: #FAFAFA, text: #0a0a0a)

Updated:
- visual-design-system.mdc: Added core color constants section
- visual-design-system.mdc: Updated dark mode CSS variables
- code-quality.mdc: Added color consistency checklist

These rules ensure consistent color usage across the entire application.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:40:09 +00:00
Dorian
98031720bf Reduce title boldness and add gradient effect
Changed content row titles to:
- font-semibold (less bold than before)
- Added gradient: #fafafa (very light grey) to #9ca3af (light grey)
- Used background-clip: text for gradient effect
- More subtle and elegant appearance

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:39:20 +00:00
Dorian
e42555323e Make content row titles uppercase and bolder
Changed section titles (Featured Films, etc.) to:
- Uppercase with 'uppercase' class
- font-bold on mobile, font-extrabold on desktop
- More prominent and attention-grabbing

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:38:41 +00:00
Dorian
4800cac837 Move profile avatar styles to global CSS with original fill
Changes:
- Moved .profile-avatar styles from Browse.vue to src/style.css
- Restored original gradient fill: orange (#f97316) to pink (#ec4899)
- Kept gradient border treatment
- Added z-index to span for proper layering
- Now available globally for reuse

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:33:55 +00:00
Dorian
9f001572cc Add gradient border to profile avatar circle
Applied the same gradient border treatment as other UI elements:
- Inner gradient fill: Red to orange to blue
- Outer gradient border: White to red with mask composite
- 2px border width with rounded corners
- Applied to both desktop and mobile profile avatars

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:32:50 +00:00
Dorian
192abfc88c Rename Home to Films and remove duplicate Films button
Navigation now shows: Films, Series, Creators, My List

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:30:47 +00:00
Dorian
f40a3c57db Add mobile margins to header logo and profile
- Logo: ml-2 on mobile (8px left margin)
- Profile: mr-2 on mobile (8px right margin)
- Desktop: ml-0/mr-0 (no extra margins)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:29:32 +00:00
Dorian
39feb722f5 Fix PWA installation for Brave/Android - Complete rewrite
Critical fixes for PWA installation:
1.  Use proper Vite PWA registration with virtual:pwa-register
2.  Simplified manifest.json (removed verbose name, fixed orientation)
3.  Added 'any maskable' dual-purpose icon for better compatibility
4.  Removed crossorigin from manifest link (causes issues)
5.  Simplified start_url to just '/'
6.  Added msapplication-TileColor meta tag
7.  Set injectRegister: 'auto' in Vite config
8.  Use public/manifest.json directly instead of generating

This should now work on Brave Browser Android with proper 'Install App' prompt.
Test: Clear site data, visit site, should see install prompt within 30 seconds.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:26:31 +00:00
Dorian
a61da35357 Fix health check - use curl instead of wget
Issues fixed:
1. Removed duplicate health check from Dockerfile (docker-compose overrides it)
2. Switched from wget to curl (more reliable in alpine)
3. Installed curl in the Docker image
4. Simplified health check command

The health check now properly tests if Nginx is serving content on port 7777.
Container should show as healthy after 40s start period.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:22:04 +00:00
Dorian
38c322bfaf Fix favicon 404 - move app-icon.svg to public folder
The favicon was trying to load from /assets/images/app-icon.svg
which doesn't exist in the build output (Vite only copies public folder).

Copied app-icon.svg to public/icons/ and updated index.html reference.
This fixes the 404 error and container health check.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:19:45 +00:00
Dorian
0c9d2845e3 Fix Android PWA installation with PNG icons
Generated proper PNG icons for Android PWA support:
- icon-192.png / icon-512.png (standard icons)
- icon-192-maskable.png / icon-512-maskable.png (with 10% padding for Android)
- apple-touch-icon.png (180x180 for iOS)

Android requires PNG icons, not SVG, for proper PWA installation.
SVG-only manifests cause 'shortcut' behavior instead of full app install.

Updated manifest.json, index.html, and vite.config.ts to use PNG icons.
Added icon generation scripts for future updates.

This should now offer proper 'Install App' on Android instead of 'Add to Home Screen'.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:18:45 +00:00
Dorian
c32a4f80e5 Make splash logo responsive - 200px mobile, 400px desktop
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:17:26 +00:00
Dorian
3f99aaec43 Fix Docker health check - use root path instead of /health
The health check was failing because /health endpoint doesn't exist.
Changed to check the root path (/) which serves the Vue app.
This should prevent the container from restarting.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:16:18 +00:00
Dorian
5ebb3e20f9 Add heavily staggered border drawing animation
Draw sequence (cascading):
- 0.0s: Top left block starts
- 0.2s: Top right block
- 0.4s: Center circle
- 0.6s: Diagonal 1
- 0.8s: Diagonal 2
- 1.0s: Diagonal 3
- 1.2s: Diagonal 4
- 1.4s: Bottom left block
- 1.6s: Bottom center block
- 1.8s: Bottom right block

Undraw mirrors this in perfect reverse!
Creates a beautiful cascading effect.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:15:26 +00:00
Dorian
33eb672b36 Slow down background fade out to 1.5s
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:13:00 +00:00
Dorian
8f1db67c61 Reverse undraw animation - mirror of draw sequence
Changes:
- Fills disappear in reverse order (last-in, first-out)
- Strokes undraw using reverse dasharray animation
- Diagonals undraw with reverse 0.3s stagger
- Circle undraws slower (2s) like it drew
- Background still fades out smoothly after undraw completes

Animation now perfectly mirrors itself!

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:12:36 +00:00
Dorian
8b5b7297d3 Add SplashIntro import to Browse.vue
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:11:28 +00:00
Dorian
896e5d3ced Add splash intro animation with logo
Animation Sequence (5 seconds total):
1. Borders draw (0-1.5s): Stroke dasharray animation
2. Fills appear (1.2-2.1s): Staggered opacity fade-in for each shape
3. Hold (2.1-3s): Logo fully visible
4. Undraw (3-4.5s): Scale down + fade out
5. Reveal (4.5-5s): Interface fades in

Features:
- Black background (#0a0a0a)
- SVG stroke-dasharray for border drawing effect
- Staggered fill animations for depth
- Center circle draws slower for emphasis
- Scale + fade undraw effect
- Fixed z-index: 9999 overlay
- Smooth transition when removing splash

Draft implementation ready for refinement!

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:11:08 +00:00
Dorian
d44878bae6 Make Play button fill more transparent for better glass effect
- Reduce opacity from 0.95 to 0.85 (85% transparent)
- Hover state: 0.95 for subtle feedback
- More glassmorphic appearance with background showing through
- Better matches design system glass aesthetic

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:08:25 +00:00
Dorian
db6d058a49 Fix light mode Play button gradient border visibility
- Change gradient from white/light-gray to darker gray tones
- Old: rgba(255,255,255,0.8) → rgba(200,200,200,0.3) (too subtle)
- New: rgba(100,100,100,0.4) → rgba(50,50,50,0.2) (visible)
- Creates subtle dark outline that's visible on white button
- Matches design system glassmorphism with proper gradient borders

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:08:00 +00:00
Dorian
d4b2d67a0c Show profile name on mobile header without dropdown
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:05:56 +00:00
Dorian
f170fd6625 Add profile dropdown and move nav to left with 40px gap
Header Layout Changes:
- Move navigation buttons next to logo on left side (40px gap)
- Remove centered navigation positioning
- Add profile dropdown after search on right side

Profile Dropdown Features:
- Shows user avatar, name 'Dorian', and chevron icon
- Glassmorphic dropdown menu with our button styles
- Menu items: Profile, Settings, Sign Out
- Icons for each menu item
- Smooth slide-down animation
- Click outside to close
- Desktop only (hidden on mobile)
- Uses same glass effect as nav buttons

Responsive:
- Mobile shows simple avatar without dropdown
- Search button hidden on mobile
- Nav stays in mobile bottom bar

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:05:22 +00:00
Dorian
0031456f4e Fix Android PWA installation - add proper web app instead of shortcut
Android PWA Requirements:
- Add mobile-web-app-capable meta tag for Android
- Add application-name meta tag
- Add prefer_related_applications: false to manifest
- Add explicit icon sizes (192x192, 512x512) for both any and maskable
- Add orientation: any for flexible display
- Add lang and dir to manifest for proper localization
- Add ?source=pwa to start_url for analytics
- Add crossorigin="use-credentials" to manifest link
- Add proper service worker registration in main.ts
- Add vite-plugin-pwa/client types to env.d.ts

This ensures Android recognizes it as a full PWA instead of creating a shortcut

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:03:00 +00:00
Dorian
91dd58c0b2 Update Play and More Info buttons with glassmorphism styles
- Add hero-play-button with light mode glass effect (white background)
- Add hero-info-button with dark mode glass effect
- Apply gradient borders with ::before pseudo-elements
- Add hover animations with translateY and enhanced shadows
- Responsive padding: 10px/28px mobile, 12px/32px desktop
- Match nav button styling with proper backdrop blur and inset highlights

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 00:01:33 +00:00
Dorian
b94226a7f4 Update SVG assets for improved design consistency
- Revise app-icon.svg and logo.svg to enhance stroke widths and circle radii for a more cohesive look
- Adjust stroke widths from 3 to 30 for better visibility
- Maintain design elements while ensuring a unified aesthetic across both icons

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-02 23:59:07 +00:00
Dorian
04926961b7 Fix Docker image pull error by removing image tag
- Remove 'image: indeedhub-prototype:latest' line
- Force Docker to build from Dockerfile instead of trying to pull
- Fixes Portainer deployment error: 'pull access denied'

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-02 23:57:04 +00:00
Dorian
6e9f4f1f8e Change mobile side margins to 16px (px-4)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-02 23:56:38 +00:00
Dorian
9eb659cfc9 Fix PWA installation on mobile devices
- Remove references to non-existent PNG icon files in manifest
- Use SVG icon for both 'any' and 'maskable' purposes
- Add start_url and scope to manifest for proper PWA installation
- Remove orientation restriction for better compatibility
- Remove shortcuts that reference non-existent routes
- Update vite.config.ts with proper PWA settings
- Add devOptions to disable PWA in development
- Separate 'any' and 'maskable' icon entries as required by spec
- Increase container top padding to prevent hover clipping

Build success: 44 entries precached (82.02 MB)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-02 23:56:04 +00:00
Dorian
176a37be30 Fix banner backdrop fallback path to use public folder
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-02 23:55:06 +00:00
Dorian
a57bd11bd0 Fix banner backdrop image path for production
- Move god-bless-bitcoin-backdrop.jpg to public/images/ folder
- Update content store to use /images/ path instead of /assets/images/
- Files in public/ are served directly in production builds
- Fixes broken banner image on production server

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-02 23:52:49 +00:00
Dorian
6ade69d477 Update logos and improve film title styling
- Update app-icon.svg with new gradient strokes and circle element
- Update logo.svg with matching design improvements and gradient borders
- Increase film title size to 20px (text-xl) with bold weight on desktop
- Keep 16px (text-base) with semibold weight on mobile for better proportions

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-02 23:50:53 +00:00
Dorian
93403375d3 Fix TypeScript build errors for Docker deployment
- Add ImportMeta and ImportMetaEnv type declarations to env.d.ts
- Fix typo: INDEEHHUB_API → INDEEDHUB_API in indeeHubApi.ts
- Fix nostr-tools Filter type usage in subscribeToContent
- Remove unused Filter import and userPrivkey parameter
- Increase Workbox maximumFileSizeToCacheInBytes to 10MB for large images
- Build now succeeds with 43 precached entries (81.98 MB)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-02 23:47:45 +00:00
Dorian
3f3849e76f Add Docker deployment support and PWA enhancements
- Add Dockerfile with multi-stage build (Node.js + Nginx)
- Add docker-compose.yml for Portainer stack deployment on port 7777
- Add nginx.conf with PWA support, gzip compression, and security headers
- Add .dockerignore for optimized Docker builds
- Add DEPLOYMENT.md with comprehensive deployment guide
- Configure Vite PWA plugin with service worker and offline support
- Add PWA manifest.json with app icons and shortcuts
- Enhance logo.svg with iOS-style glass effects (filters, gradients, highlights)
- Add app-icon.svg for PWA installation
- Update mobile nav with glassmorphic active tab styling
- Fix mobile tab bar layout shift issues with flex-1 and consistent sizing
- Update index.html with PWA meta tags and Apple-specific settings
- Add health check endpoint at /health for container monitoring

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-02 23:43:42 +00:00
Dorian
90c55883f2 feat: enhance styling and layout for improved user experience
- Added custom fonts 'Blade Knight' and 'Coligra' for a unique aesthetic
- Updated background color and styling for body and app components
- Improved content card design with glass morphism effects and hover states
- Enhanced mobile navigation with a floating glass effect and updated button styles
- Adjusted header layout for better responsiveness and visual appeal

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-02 23:18:35 +00:00
Dorian
ea03167da8 feat: enhance layout and styling of content rows and header
- Updated content card width from 140/180px to 200/280px for improved visibility
- Changed image class to use 'object-contain' and added background color for better aesthetics
- Introduced a gradient background for the header with dynamic styles based on scroll position
- Added new CSS classes for header gradient effects and improved backdrop filter for a modern look

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-02 22:46:45 +00:00
Dorian
b5c6901372 feat: improve content card sizing and spacing
- Reduced card width from 200/280px to 140/180px
- Increased gap between cards from 8px to 32px (gap-8)
- Added vertical padding (py-4) to content rows
- Made title text smaller and responsive
- Hide description on mobile for cleaner look

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-02 22:35:17 +00:00
Dorian
2269100dfb feat: use downloaded local images for all films
- Updated film data to use 21 locally downloaded images
- All posters and backdrops now served from /public/images/films/
- No external CDN dependencies for core films
- Includes Bitcoin docs, dramas, and independent films
- Images: webp, png, jpeg formats (optimized)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-02 22:34:00 +00:00
Dorian
8b8d5f7b0f feat: add downloaded film images
- Downloaded 15 film posters and backdrops from CloudFront CDN
- Updated film data to use local images where available
- Remaining films still use CDN URLs
- Images saved in public/images/films/ directory

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-02 22:33:00 +00:00
Dorian
92d6943cb3 feat: integrate real IndeeHub film data with CDN images
- Replaced placeholder content with 20 real IndeeHub films
- All films now use IndeeHub's CloudFront CDN for images
- Added actual film titles, descriptions, and metadata
- Reduced hero section height (60vh/65vh) for better fold usage
- Content starts higher on page with more visible films

Films include:
- Bitcoin documentaries: God Bless Bitcoin, Bitcoiners, Hard Money
- Dramas: The Things We Carry, Kismet, Clemont, Bender
- Economics: Bitcoin: End of Money, Menger Notes, Housing Bubble
- Plus shorts and independent films

Images served from d1yvaqj97q119b.cloudfront.net

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-02 22:26:50 +00:00
Dorian
f8abd42329 feat: transparent header and image download scripts
- Made header transparent on scroll for premium Netflix-style look
- Added browser console script to download all IndeeHub images
- Created Python script for batch image downloading
- Added shell script for curl-based downloads

The header now starts fully transparent and transitions to semi-transparent
black with blur when scrolling, creating a floating navigation effect.

Download scripts will extract all film posters, backdrops, and metadata
from IndeeHub.studio screening room.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-02 22:23:17 +00:00
Dorian
0bb1bcc5f9 Initial commit: IndeeHub decentralized streaming platform
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>
2026-02-02 22:19:47 +00:00