Profile page fixes:
- Use session:field with string 'user-id' instead of symbol
- Use find-user-by-id to get user object
- Use dm:field to access user data (username, role)
- Add missing template parameters (top-artist-4, top-artist-5)
- Add error handling with detailed logging
Player-content fixes:
- Remove broken player.js that was causing ReferenceError
- Add simple inline Now Playing updater script
- Fetches /api/asteroid/partial/now-playing every 10 seconds
- Updates after 200ms initial delay
All fixes tested and working in frameset mode:
- Profile page loads correctly with user data
- Now Playing panel updates on player page
- Stream continues playing during navigation
- Spectrum analyzer MUTED indicator working
- Login/logout without halting stream
Known issue:
- ParenScript player.lisp has compilation issue (extra paren on line 242)
- Only 15/36 functions compile
- Non-frameset mode still halts stream on navigation (expected)
- Execute scripts after AJAX navigation to enable dynamic content updates
- Fix spectrum analyzer audio element reference across navigation
- Stop and restart spectrum analyzer when re-initializing after AJAX load
- Find audio element in parent frame for frameset mode
- Clear all intervals/timeouts before navigation to prevent errors
- Add status-content.ctml placeholder page
- Remove debug logging from spectrum analyzer
Fixes:
- Now playing panel updates on player page after navigation
- MUTED indicator appears correctly across all pages
- No console errors from abandoned intervals
- Clean resource cleanup on page transitions
- Add frameset-aware content pages: login-content, admin-content, profile-content
- Implement AJAX navigation to prevent audio interruption during page transitions
- Add handleLogout() function to logout without breaking frameset
- Update login form to submit via AJAX and follow redirects
- Add audio keep-alive protection with 500ms interval check
- Update logout handler to detect frameset mode and redirect appropriately
- Add .gitignore entry for generated asteroid.css
The persistent audio player now continues playing through:
- Login page loading
- Login form submission
- Redirect to admin/profile pages
- Navigation within admin/profile
- Logout process
All navigation within frameset mode now uses fetch() to load content
without actual page navigation, keeping the audio player frame untouched.
- Add monotone theme with deep blue to cobalt gradient
- Update canvas border color dynamically to match selected theme
- Set initial border color on page load based on saved preference
Major Changes:
- Convert all JavaScript files to Parenscript for better maintainability
- Move spectrum-analyzer to parenscript/ directory structure
- Add parenscript-utils.lisp for shared utilities
- Convert admin.js, player.js, front-page.js, auth-ui.js to Parenscript
- Convert profile.js, users.js, recently-played.js to Parenscript
Stream Reconnect Fixes (from merged PR):
- Add reset-spectrum-analyzer function to properly clean up Web Audio API
- Implement reconnect logic for pauses longer than 10 seconds
- Detect stale audio in 'playing' event and force stream reconnection
- Prevent 'Now Playing' updates while stream is paused
- Reduce reconnect delay to 200ms for faster response
- Add proper spectrum analyzer reset/reinit during reconnection
UX Improvements:
- Change live indicator from blink to smooth pulse (2s ease-in-out)
- Pulse animation like old PowerBook/MacBook sleep indicator
- Add MUTED indicator to spectrum analyzer when audio is muted
- Spectrum continues to flow even when muted (data still streaming)
- Red 'MUTED' text displayed in top-right corner of canvas
Technical Details:
- Parenscript files generate JavaScript via API endpoints
- All player modes updated: main player, front page, popout, frame player
- Improved audio context handling to only create once per element
- Added comprehensive error handling and logging
- Updated asteroid.asd to include parenscript module structure
Documentation:
- Updated all documentation dates to 2025-12-06
- Added PARENSCRIPT-EXPERIMENT.org documenting the conversion
- Updated PROJECT-HISTORY.org with Phase 9 (Visual Audio Features)
- Added comprehensive project statistics (408 commits, 9,300 LOC)
This conversion improves code maintainability by using Lisp throughout
the stack and makes it easier to share code between frontend and backend.
- Implement Web Audio API-based spectrum analyzer with green gradient bars
- Add spectrum analyzer to front page and persistent player content frames
- Support cross-frame audio element access for frameset mode
- Add CORS headers to Icecast configuration for Web Audio API
- Serve Parenscript-generated JavaScript dynamically via API endpoint
- Canvas visualization appears below page title, above navigation