Commit Graph

13 Commits

Author SHA1 Message Date
Brian Fertig 569c432fb5 feat: implement preloading of next track in queue
- Add a hidden `preloadAudio` element to buffer the next song in the queue
- Automatically preload the next track after the current one starts playing
- Update service worker cache version to v6 to ensure fresh assets are fetched
2026-04-18 16:08:54 -06:00
Brian Fertig a4954dfaa8 feat: add playlist cover generation and service worker updates
- Add database migration for `generated_playlist_covers` table to track playlist cover jobs
- Implement backend routes for generating, polling, and applying playlist cover art via ComfyUI
- Add `comfyui_node_image_seed` setting to allow configurable seeds for image generation
- Update UI to show "Generate Cover Art" link on playlist forms when image generation is enabled
- Add service worker update notification banner with refresh and dismiss options
- Enhance player with push notifications for now-playing updates
- Update service worker to handle notification clicks and improve caching strategy
2026-04-18 09:18:03 -06:00
Brian Fertig 8170cfb7a2 feat: add social features, user uploads, AI music generation, and PWA enhancements
- Add social features: like/favorite songs and playlists, notifications, and public profile pages
- Enable user music: logged-in users can upload songs and create playlists with visibility controls and NSFW flag
- Implement AI music generation via ComfyUI with per-user rate limiting, workflow configuration, and optional cover art generation
- Expand admin panel for user management and AI settings
- Enhance PWA support: lock-screen controls, background playback, and visualizer
- Add email verification via SMTP and avatar cropping
- Update package version to 1.0.0 and bump service worker cache
2026-04-17 20:12:34 -06:00
Brian Fertig df14aa8975 feat: integrate lightbox for media images and improve media session handling
- Add lightbox support to song/playlist cover images by adding lb-trigger class and data-lightbox attributes
- Prevent default click behavior in lightbox.js to avoid navigation when opening image modal
- Update player UI to conditionally enable/disable lightbox on album art based on cover presence
- Set navigator.mediaSession.playbackState proactively during audio reassignment to prevent OS throttling
- Wrap media session seek handlers in try-catch blocks for compatibility with mobile streaming sources
2026-04-15 21:24:54 -06:00
Brian Fertig 5eadf57068 feat: Add Media Session API support for browser media controls
- Implement `updateMediaSession()` to sync track metadata (title, artist, artwork) with browser's media session
- Update playback state (`playing`/`paused`) via `mediaSession.playbackState`
- Register action handlers for common media controls: play, pause, next/prev track, seek operations
- Integrate `updateMediaSession()` call into `playCurrent()` to show metadata when playback starts

Enables native browser media notification and lock screen controls on supported platforms.
2026-04-14 22:42:37 -06:00
Brian Fertig 561f41f0ce feat: add 3D canvas objects flanking lightbox/now-playing overlays and playlist highlighting
- Introduce dynamic 3D geometry objects (torusKnot, trefoil, hyperboloid, etc.) rendered with Three.js on both sides of the screen when lightbox or now-playing overlay is open; only active on viewports ≥1280px wide.
- Add CSS styling for `.oo-canvas` (z-index 3100) and `.card.playlist-active` to highlight the currently active playlist card with neon-cyan glow effects.
- Extend player.js to track `briTunesActivePlaylistId` and toggle `playlist-active` class on cards via data attributes.
- Add `data-playlist-id` attributes to playlist cards in home, playlists, profile views and play buttons in playlist view for highlighting support.
2026-04-11 15:17:51 -06:00
Brian Fertig 25d68e1dcb feat: add user profiles with slugs and enhance now-playing UI
- Add database migration to create unique `slug` column for users table
- Implement profile routes (`/profiles`, `/profiles/:slug`) with views for:
  • listing verified user profiles with avatars, song/playlist counts
  • individual profile pages showing user's songs, playlists, liked items
- Add helper functions in `users.js`, `songs.js`, `playlists.js`, and `social.js`
  to support public visibility filtering and profile data enrichment
- Enhance now-playing overlay UI with:
  • vinyl sleeve animation (sleeve + record peeking behind cover)
  • clickable creator info to open profile page if slug exists
  • track row click to jump directly to a song in the queue
- Update CSS for profiles grid, detail creator links, and overlay styling
- Add "Profiles" link to header navigation

This enables a full user profile system with vanity URLs and improves the
music player experience with visual polish and direct navigation.
2026-04-11 13:46:12 -06:00
Brian Fertig a4c1595eaa feat: add "Now Playing" overlay modal for playlist playback with persistent reopen button
- Introduce a full-screen "Now Playing" overlay modal with left (cover/creator) and right (track list/controls) panels
- Add CSS styles for animated cyan-themed overlay, track list, progress bar, and equalizer visualizer
- Integrate new `now-playing.js` module and update layout to include it
- Refactor playlist action buttons to include a "Now Playing" reopen button that appears when playback starts
- Dispatch `briTunes:queue` event on queue initialization for external UI synchronization
2026-04-11 11:33:35 -06:00
Brian Fertig f044d98afc feat: implement social actions (like/favorite) for songs and playlists
- Add database tables for song/playlist likes and favorites
- Create `social` service with toggle functions and enrichment helpers
- Implement `/api/:type/:id/(like|favorite)` routes with CSRF protection
- Add like/favorite buttons to player, song lists, playlists, and cards
- Support guest → login redirect via `data-require-login`
- Inject CSRF token into layout for JS API requests
2026-04-11 09:12:21 -06:00
Brian Fertig 08cc6b2b03 feat: add repeat functionality to player UI and enhance song metadata display
- Introduce repeat button with active state styling and toggle logic in player.js
- Update background grid animation to use faster, distance-scaled flyby passes for more dynamic visuals
- Extend song view model (`songs.js`) to include uploader's display name
- Improve user verification flow (`users.js`) to ensure fresh state after async password check
- Add uploader info line in public song page view
2026-04-10 22:01:40 -06:00
Brian Fertig 9438330f22 feat: add playlist creation credit display, shuffle playback, drag-and-drop reordering, and email verification flow improvements
- Display playlist creator name on public and admin playlist views
- Add shuffle playback button for playlists in player UI
- Implement drag-and-drop reordering for playlist tracks with visual feedback
- Improve email verification UX: redirect pending users to verify page with resend option
- Simplify admin routes by removing redundant role checks (user-based filtering already handled)
- Adjust featured playlist count and add "show all" links on home page
2026-04-10 20:14:54 -06:00
Brian Fertig f34ff9b8fb UI Update 2026-04-09 20:23:54 -06:00
Brian Fertig a515df90de first commit 2026-04-09 18:41:01 -06:00