* Rundown to Launch. Still to do: * Setup asteroid.radio server at Hetzner [7/7] - [X] Provision a VPS - [X] Firewall - [X] Install user utilities - [X] Install base toolchain - [X] Install lisp - [X] Set up DNS - [X] Create user accounts * Deploy the system [10/10] - [X] Install and configure HAproxy - [X] Create a user to contain asteroid - [X] Checkout asteroid in ~asteroid on b612 - [X] Build the docker containers - [X] Build asteroid from the sources - [X] Configure HAproxy to front http://asteroid.radio/ -> http://localhost:8080/ - [X] Set ASTEROID_STREAM_URL in ~asteroid/.bashrc - [X] Start the docker containers for liquidsoap, icecast, and postgresql - [X] Start asteroid, check the stream (Underworld:Juanita/Kiteless) - [X] Announce that the system is live in #asteroid.radio ** PROBLEMS [3/12] 1) [X] Liquidsoap is exposing its management console via telnet on the exterior network interface of b612.asteroid.radio 2) [X] icecast is also binding the external interface on b612, which it should not be. HAproxy is there to mediate this flow. 3) [X] We're still on the built in i-lambdalite database 4) [X] The templates still advertise the default administrator password, which is no bueno. 5) [ ] We need to work out the TLS situation with letsencrypt, and integrate it into HAproxy. 6) [ ] The administrative interface should be beefed up. 6.1) [X] Deactivate users 6.2) [X] Change user access permissions 6.3) [ ] Listener statistics, breakdown by day/hour, new users, % changed &c 7) [X] When the player is paused, there are pretty serious stream sync issues in the form of stuttering for some time after the stream is unpaused. 8) [ ] User profile pages should probably be fleshed out. 9) [ ] the stream management features aren't there for Admins or DJs. 10) [ ] The "Scan Library" feature is not working in the main branch 11) [ ] The player widget should be styled so it fits the site theme on systems running 'light' thmes. 12) [ ] ensure each info field 'Listeners: ..' &c has only one instance per page. * Server runtime configuration [0/1] - [ ] parameterize all configuration for runtime loading [0/2] - [ ] strip hard coded configurations out of the system - [ ] add configuration template file to the project ** [X] Database [0/1] - [-] PostgresQL [1/3] - [X] Add a postgresql docker image to our docker-compose file. - [X] Configure radiance for postres. - [X] Migrate all schema to new database. ** [X] Page Flow [2/2] ✅ COMPLETE - [X] When a user logs in, their user profile page should become the root node of the app in their view. - [X] When the admin user logs in, their view should become the admin profile page which should have panels for adminstering various aspects of the station. note: Front-page conditional elements working correctly - nav links display based on authentication status and user role (Profile/Admin/Logout for logged-in users, Login/Register for anonymous users). ** [X] Templates: move our template hyrdration into the Clip machinery [4/4] ✅ COMPLETE - [X] Admin Dashboard [2/2] - [X] System Status [4/4] - [X] Server Status (Shows 🟢 Running) - [X] Database Status (Shows connection status) - [X] Liquidsoap Status (Checks Docker container) - [X] Icecast Status (Checks Docker container) - [X] Music Library Management [3/3] - [X] Add Music Files (Upload and scan working) - [X] Track Management (Pagination complete - 20 tracks per page, 4 pages total) Pagination implemented with configurable items per page (10/20/50/100). - [X] Player Control (Play/pause/stop working with HTML5 audio) play/pause/edit &etc - [X] User Management (Moved to separate /admin/users page) - [X] Live Stream - [X] Now Playing (Working correctly - displays artist and track) - [X] Front Page [3/3] - [X] Station Status (Shows live status, listeners, quality) - [X] Live Stream (Green indicator, quality selector working) - [X] Now Playing (Updates every 10s from Icecast, no HTML bugs) - [X] Web Player [5/6] ⚠️ MOSTLY COMPLETE (Playlists limited by database) - [X] Live Radio Stream (Working with quality selector) - [X] Now Playing (Updates correctly from Icecast) - [X] Personal Track Library (Pagination: 20 tracks/page, search working) - [X] Audio Player (Full controls: play/pause/prev/next/shuffle/repeat/volume) - [ ] Playlists (PARTIAL - Can create/view, but cannot save/load tracks - requires PostgreSQL) - [X] Create empty playlists - [X] View playlists - [ ] Save queue as playlist (tracks don't persist - db:update fails) - [ ] Load playlists (playlists are empty - no tracks saved) - [ ] Edit playlists (requires PostgreSQL) - [X] Play Queue (Add tracks, clear queue - save as playlist blocked by database)