Commit Graph

82 Commits

Author SHA1 Message Date
glenneth 5d31763e85 Add user registration and authentication UI improvements
- Add registration page with form validation
- Add login/register/logout navigation with conditional display
- Add auth-status API endpoint for session checking
- Add auth-ui.js for dynamic nav based on login state
- Update navigation across all pages (front, admin, profile, player)
- Style logout button with subtle red color
- Auto-login after successful registration
2025-10-07 18:39:49 -04:00
glenneth fa1de1c874 Update profile page to match site-wide layout and styling
- Remove narrow profile-container (600px) in favor of standard container (1200px)
- Replace profile-card divs with admin-section to match admin page styling
- Add consistent h1 header matching other pages
- Remove unused profile-container and profile-card CSS classes
- Keep profile-specific utility styles (profile-info, artist-stats, etc.)
2025-10-07 18:39:49 -04:00
glenneth 1b1445e25f Add user profile page with clip template styling
- Created profile.chtml template with listening statistics, recent tracks, and top artists
- Added profile.js for dynamic data loading and user interactions
- Extended LASS styles for profile-specific elements (artist stats, track items, activity charts)
- Implemented /profile route with authentication and template rendering
- Added profile API endpoints for user data, stats, recent tracks, and top artists
- Added profile link to main navigation
- Includes placeholder functionality for future listening metrics implementation
2025-10-07 18:39:49 -04:00
Luis Pereira ba13777206 fix: use nav styles on front page 2025-10-05 20:48:58 -04:00
Luis Pereira d12fde7248 fix: some sizing of live player 2025-10-05 20:48:58 -04:00
Luis Pereira d87c1be373 fix: lass rules moved up one level
Some rules were one level deeper and being created inside the btn rule
2025-10-05 20:48:58 -04:00
Luis Pereira d0649a611e fix: move font import to lass file 2025-10-05 20:48:58 -04:00
Luis Pereira c2e7cfe943 feat: move users javascript code to own file 2025-10-04 16:10:50 -04:00
Luis Pereira bd1b993a03 feat: move player javascript code to own file 2025-10-04 16:10:50 -04:00
Luis Pereira 6edbb5754b feat: move frontpage javascript code to own file 2025-10-04 16:10:50 -04:00
Luis Pereira 35f4c6516b feat: move admin javascript code to own file
Some html element ids and api routes are also fixed here.
2025-10-04 16:10:50 -04:00
Glenn Thompson 803555b8b1 Complete Templates section: CLIP refactoring, user management, pagination, playlists, UI fixes, PostgreSQL setup
 CLIP Template Refactoring:
- Centralized template rendering in template-utils.lisp
- Template caching for performance
- Eliminated code duplication

 User Management:
- Dedicated /admin/users page
- User creation, roles, activation
- Comprehensive API endpoints
- Full test suite

 Track Pagination:
- Admin dashboard: 10/20/50/100 per page
- Web player: 10/20/50 per page
- Smart navigation controls

⚠️ Playlist System (PARTIAL):
- Create empty playlists 
- View playlists 
- Save/load playlists  (database UPDATE fails)
- Audio playback fixed 
- Database limitations documented

 PostgreSQL Setup:
- Docker container configuration
- Complete database schema
- Persistent storage
- Radiance configuration
- Ready for Fade to integrate

 Streaming Infrastructure:
- All 3 streams working (MP3 128k, AAC 96k, MP3 64k)
- Fixed AAC stream (Docker caching issue)
- NAS music mount configured

 UI Fixes:
- Green live stream indicators
- Correct stream quality display
- Now Playing verified working
- Missing API endpoints added

📚 Documentation:
- 6 comprehensive org files
- Complete technical documentation
- Known issues documented

Note: Playlist editing requires PostgreSQL migration (Fade's task)
2025-10-04 09:54:04 -04:00
Glenn Thompson ab7a7c47b5 Complete CLIP template refactoring and all template features
 CLIP Template System:
- Created template-utils.lisp with centralized rendering
- Template caching for performance
- render-template-with-plist for consistent API
- Proper CLIP attribute processors (data-text)
- Documentation in docs/CLIP-REFACTORING.org

 Admin Dashboard Complete:
- System Status: All 4 indicators working (Server, DB, Liquidsoap, Icecast)
- Music Library: Scan, upload, duplicate detection working
- Track Management: Pagination (20/page, configurable 10/20/50/100)
- Player Control: HTML5 audio player with play/pause/stop
- User Management: Moved to separate /admin/users page

 User Management:
- New /admin/users route with dedicated page
- Inline user creation form
- User stats dashboard
- Role management (listener/DJ/admin)
- Activate/deactivate users
- API endpoint /api/users/create
- Tested with curl - all working

 Live Stream & Now Playing:
- Fixed: Green 🟢 LIVE STREAM indicator (was red)
- Fixed: Stream quality display matches selected stream (AAC/MP3)
- Now Playing updates every 10s from Icecast
- No HTML rendering bugs - working correctly

 Track Library:
- Fixed recursive directory scanning bug
- 64 tracks scanned and in database
- Pagination working perfectly

 Front Page & Web Player:
- Station Status shows correct stream quality
- Quality selector updates all displays
- Live stream indicators green
- Now Playing working on all pages

All Templates section items complete [4/4] 
2025-10-04 09:54:04 -04:00
Glenn Thompson 24feeddfa8 feat: Add auto-scan on startup and live Icecast/Liquidsoap status checks
- Auto-scan music library on startup to load existing tracks
- Add check-icecast-status() function to query Icecast API
- Add check-liquidsoap-status() function to check Docker container
- Update admin dashboard to show real-time streaming status
- Eliminates need to manually copy files from incoming on every restart
2025-10-04 09:54:04 -04:00
Brian O'Reilly 0fef44225f we get objects and not arrays, return them appropriately. 2025-10-03 10:19:19 -04:00
Brian O'Reilly 3393d2015f javascript _and_ html in one day? Fade's a real programmer now! 2025-10-03 09:54:51 -04:00
Glenn Thompson aad7f49d0c feat: Add AAC streaming support with quality selector
- Add AAC 96kbps stream via %fdkaac encoder in Liquidsoap
- Update Docker image to savonet/liquidsoap:v2.2.5 for AAC support
- Add stream quality selector to front page and player page
- Enable real-time switching between AAC/MP3 formats
- Set AAC as recommended default for better quality/bandwidth ratio
- Add comprehensive documentation in AAC-STREAMING.md

Stream URLs:
- http://localhost:8000/asteroid.aac (96kbps AAC - recommended)
- http://localhost:8000/asteroid.mp3 (128kbps MP3 - compatible)
- http://localhost:8000/asteroid-low.mp3 (64kbps MP3 - low bandwidth)

Benefits:
- 25% bandwidth reduction vs equivalent MP3 quality
- Better audio quality at same bitrate
- Modern streaming standard used by major platforms
2025-10-02 16:51:59 +03:00
Glenn Thompson d8306f0585 feat: Complete Docker streaming integration with web interface
- Add live stream integration to both front page and player page
- Add /api/icecast-status endpoint to fetch real-time stream data
- Add drakma dependency for HTTP requests to Icecast
- Fix JavaScript errors on player page with proper error handling
- Add auto-updating 'Now Playing' info every 10 seconds
- Update .gitignore to preserve docker/music/ directory structure
- Add .gitkeep to maintain docker/music/ folder in repository
- Improve user experience with separate public/registered user flows

Integration now complete:
- Front page: Public live stream access
- Player page: Live stream + playlist management for registered users
- Real-time metadata from Icecast JSON API
- Graceful error handling for missing stream backend
2025-10-02 16:51:03 +03:00
Brian O'Reilly 919e2f491b courier gives me a headache...
and this is kind of a throw-back 8bit computer style font. The colours
are still kind of aggressively unpleasant (to me), but I'm hesitant to
change due to fear of comitting visual violence to people with normal
colour vision. :)
2025-09-30 21:24:47 -04:00
Brian O'Reilly 969548f9e6 repair merge conflict chaff after the fact. 2025-09-30 20:41:25 -04:00
Brian O'Reilly 69bd4a841f Merge branch 'SystemConfiguration'
just squash the entire state of play into main for better coherence
and decreased confusion.
2025-09-30 15:47:06 -04:00
Glenn Thompson 6b1b330ed2 fix: Correct template paths and navigation links
- Fix CSS paths in admin.chtml, login.chtml, and player.chtml
  (change /static/ to /asteroid/static/)
- Fix navigation links to use correct /asteroid/ prefix
- Fix player link to include trailing slash (/asteroid/player/)
- Resolves 'layout fuckage' issues in SystemConfiguration branch

All templates now properly load CSS and navigation works correctly.
2025-09-30 15:30:02 -04:00
Glenn Thompson b1a61fae00 Fix user management API authentication and data formatting
- Fixed find-user-by-id to handle BIT type database IDs
- Updated user-has-role-p to extract role from list format
- Enhanced API endpoint to return properly formatted JSON data
- Added comprehensive debugging for authentication flow
- Created login.chtml template with CLIP data binding
- Resolved 'Error loading users' issue in admin panel
2025-09-30 14:11:46 -04:00
Glenn Thompson 84d0bc4ce4 Fix Asteroid Radio authentication system
- Fix database query syntax for RADIANCE hash table returns
- Handle RADIANCE field storage format (lists instead of strings)
- Configure r-simple-sessions module for session management
- Update login page styling to match main site theme
- Implement working authentication with admin/asteroid123
- Add proper error handling and debug logging
- Ensure session persistence and redirects work correctly
2025-09-30 14:11:46 -04:00
Brian O'Reilly 16f3592e97 recursively scan the music directory to implicit depth 2
it is likely that the music library will contain directories of
albums, read the files inside those dirs.
2025-09-30 14:11:46 -04:00
Glenn Thompson 00942b60bc Fix user management API authentication and data formatting
- Fixed find-user-by-id to handle BIT type database IDs
- Updated user-has-role-p to extract role from list format
- Enhanced API endpoint to return properly formatted JSON data
- Added comprehensive debugging for authentication flow
- Created login.chtml template with CLIP data binding
- Resolved 'Error loading users' issue in admin panel
2025-09-30 13:20:58 -04:00
Glenn Thompson 806031e57f Fix Asteroid Radio authentication system
- Fix database query syntax for RADIANCE hash table returns
- Handle RADIANCE field storage format (lists instead of strings)
- Configure r-simple-sessions module for session management
- Update login page styling to match main site theme
- Implement working authentication with admin/asteroid123
- Add proper error handling and debug logging
- Ensure session persistence and redirects work correctly
2025-09-30 13:20:58 -04:00
Brian O'Reilly 1778a269d8 recursively scan the music directory to implicit depth 2
it is likely that the music library will contain directories of
albums, read the files inside those dirs.
2025-09-30 13:20:58 -04:00
Glenn Thompson cb1d6e5596 Implement complete internet radio streaming system
- Add live streaming with Icecast2 and Liquidsoap integration
- Fix track streaming endpoints with proper RADIANCE database queries
- Implement music library management with metadata extraction
- Add web player interface with HTML5 audio controls
- Fix admin panel functionality for file management
- Create playlist system for continuous radio broadcasting
- Add live stream URL to web interface
- Support MP3 streaming at 128kbps with proper audio processing
- Enable network access for internal radio broadcasting
- Add comprehensive README.org documentation
- Create start/stop scripts for service management
- Use secure random password for streaming authentication
2025-09-11 15:30:01 +03:00
Glenn Thompson f119390459 Fix API status endpoint and update navigation
- Change API endpoint from /api/status to /status to avoid RADIANCE API call interpretation
- Update navigation link in front-page.chtml to point to new /status endpoint
- API now returns proper JSON instead of 500 error
2025-09-10 10:51:02 -04:00
Glenn Thompson 1d6bb33894 Complete CLIP templating migration
- Remove all inline HTML from asteroid.lisp
- Add CLIP templates: front-page.chtml, admin.chtml, player.chtml
- Implement data-text attribute processor for dynamic content
- Fix LASS compilation to use read-from-string
- Update all route handlers to use clip:process-to-string
- Maintain original asteroid radio functionality and styling
2025-09-10 10:51:02 -04:00
Brian O'Reilly 86011ae127 this is where the templates go.
front-page.chtml per glenneth's work.
2025-08-30 10:08:05 -04:00