Backend changes:
- Fix track deletion foreign key constraint (tracks.py)
* Clear current_track_id from rooms before deleting track
* Prevent deletion errors when track is currently playing
- Implement user ping/keepalive system (sync.py, websocket.py, ping_task.py, main.py)
* Track last pong timestamp for each user
* Background task sends ping every 30s, disconnects users after 60s timeout
* Auto-pause playback when room becomes empty
* Remove disconnected users from room_participants
- Enhance room deletion (rooms.py)
* Broadcast room_deleted event to all connected users
* Close all WebSocket connections before deletion
* Cascade delete participants, queue, and messages
Frontend changes:
- Add ping/pong WebSocket handling (activeRoom.js)
* Auto-respond to server pings
* Handle room_deleted event with redirect to home
- Add room deletion UI (RoomView.vue, HomeView.vue, RoomCard.vue)
* Delete button visible only to room owner
* Confirmation dialog with warning
* Delete button on room cards (shows on hover)
* Redirect to home page after deletion
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Major changes:
- Full UI redesign with Vuetify 3 (dark theme, modern components)
- Sidebar navigation with gradient logo
- Redesigned player controls with Material Design icons
- New room cards, track lists, and filter UI with chips
- Modern auth pages with centered cards
Configuration improvements:
- Centralized all settings in root .env file
- Removed redundant backend/.env and frontend/.env files
- Increased file upload limit to 100MB (nginx + backend)
- Added build args for Vite environment variables
- Frontend now uses relative paths (better for domain deployment)
UI Components updated:
- App.vue: v-navigation-drawer with sidebar
- MiniPlayer: v-footer with modern controls
- Queue: v-list with styled items
- RoomView: improved filters with clickable chips
- All views: Vuetify cards, buttons, text fields
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Replace email with username for authentication
- Update User model, schemas, and auth endpoints
- Update frontend login and register views
- Add migration to remove email column
- Add multiple track upload support
- New backend endpoint for bulk upload
- Frontend multi-file selection with progress
- Auto-extract metadata from ID3 tags
- Visual upload progress for each file
- Prevent duplicate tracks in room queue
- Backend validation for duplicates
- Visual indication of tracks already in queue
- Error handling with user feedback
- Add bulk track selection for rooms
- Multi-select mode with checkboxes
- Bulk add endpoint with duplicate filtering
- Selection counter and controls
- Add track filters in room modal
- Search by title and artist
- Filter by "My tracks"
- Filter by "Not in queue"
- Live filtering with result counter
- Improve Makefile
- Add build-backend and build-frontend commands
- Add rebuild-backend and rebuild-frontend commands
- Add rebuild-clean variants
- Update migrations to run in Docker
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add wrapper for volume slider
- Use CSS transform instead of orient attribute
- Set transform-origin to center
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add global activeRoom store for persistent WebSocket connection
- Add MiniPlayer component for playback controls across pages
- Add chunked S3 streaming with 64KB chunks and Range support
- Add queue item removal button
- Move DB credentials to environment variables
- Update .env.example with DB configuration
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>