From 3aa21c82786508836c2844f7af4872e7fcb8f348 Mon Sep 17 00:00:00 2001 From: Glenn Thompson Date: Sun, 7 Dec 2025 14:27:54 +0300 Subject: [PATCH] Add About and Status pages with improved navigation - Added About page with detailed technical stack, AGPL license info, and community links - Added Status page for both frameset and non-frameset modes - Fixed all navigation links to use /asteroid/frameset as home (workaround for Radiance routing) - Removed broken AJAX loadInFrame() navigation in frameset content pages - Fixed logout buttons to redirect properly after logout - Added spectrum analyzer support for live-stream-audio element ID - Updated all Home links across the site to avoid Radiance welcome page - Made About and Status pages consistent between frameset and non-frameset modes - Added proper navigation to all pages with About, Status, and other links --- asteroid.lisp | 23 +++++- parenscript/spectrum-analyzer.lisp | 6 +- template/about-content.ctml | 107 ++++++++++++++++++++++++ template/about.ctml | 102 +++++++++++++++++++++++ template/admin.ctml | 5 +- template/audio-player-frame.ctml | 24 +++++- template/front-page-content.ctml | 105 +++--------------------- template/front-page.ctml | 3 +- template/login.ctml | 3 +- template/player-content.ctml | 31 +------ template/player.ctml | 39 ++++++++- template/profile.ctml | 5 +- template/register.ctml | 3 +- template/status-content.ctml | 126 ++++++++++------------------- template/status.ctml | 57 +++++++++++++ template/users.ctml | 6 +- 16 files changed, 421 insertions(+), 224 deletions(-) create mode 100644 template/about-content.ctml create mode 100644 template/about.ctml create mode 100644 template/status.ctml diff --git a/asteroid.lisp b/asteroid.lisp index fa5763a..3d3abd3 100644 --- a/asteroid.lisp +++ b/asteroid.lisp @@ -625,12 +625,33 @@ (format t "ERROR in profile-content: ~a~%" e) (format nil "

Error loading profile

~a
" e)))) +;; Status page (non-frameset mode) +(define-page status-page #@"/status" () + "Status page" + (clip:process-to-string + (load-template "status") + :title " Asteroid Radio - Status")) + ;; Status content frame (for frameset mode) (define-page status-content #@"/status-content" () "Status page content (displayed in content frame)" (clip:process-to-string (load-template "status-content") - :title "📡 Asteroid Radio - Status")) + :title " Asteroid Radio - Status")) + +;; About page +(define-page about-page #@"/about" () + "About Asteroid Radio" + (clip:process-to-string + (load-template "about") + :title "About - Asteroid Radio")) + +;; About content (for frameset mode) +(define-page about-content #@"/about-content" () + "About content (displayed in content frame)" + (clip:process-to-string + (load-template "about-content") + :title "About - Asteroid Radio")) ;; Configure static file serving for other files ;; BUT exclude ParenScript-compiled JS files diff --git a/parenscript/spectrum-analyzer.lisp b/parenscript/spectrum-analyzer.lisp index 53200ed..a3e7be4 100644 --- a/parenscript/spectrum-analyzer.lisp +++ b/parenscript/spectrum-analyzer.lisp @@ -45,7 +45,8 @@ ;; Try current document first (setf audio-element (or (ps:chain document (get-element-by-id "live-audio")) - (ps:chain document (get-element-by-id "persistent-audio")))) + (ps:chain document (get-element-by-id "persistent-audio")) + (ps:chain document (get-element-by-id "live-stream-audio")))) ;; If not found and we're in a frame, try parent frame (frameset mode) (when (and (not audio-element) @@ -253,7 +254,8 @@ ;; Try current document first (setf audio-element (or (ps:chain document (get-element-by-id "live-audio")) - (ps:chain document (get-element-by-id "persistent-audio")))) + (ps:chain document (get-element-by-id "persistent-audio")) + (ps:chain document (get-element-by-id "live-stream-audio")))) ;; If not found and we're in a frame, try parent frame (frameset mode) (when (and (not audio-element) diff --git a/template/about-content.ctml b/template/about-content.ctml new file mode 100644 index 0000000..a5b88d8 --- /dev/null +++ b/template/about-content.ctml @@ -0,0 +1,107 @@ + + + + About - Asteroid Radio + + + + + + + +
+
+

+ Asteroid + ABOUT ASTEROID RADIO + Asteroid +

+ +
+
+
+

🎵 Asteroid Music for Hackers

+

+ Asteroid Radio is a community-driven internet radio station born from the SystemCrafters community. + We celebrate the intersection of music, technology, and hacker culture—broadcasting for those who + appreciate both great code and great music. +

+

+ We met through a shared set of technical biases and a love for building systems from first principles. + Asteroid Radio embodies that ethos: music for hackers, built by hackers. +

+
+ +
+

🛠️ Built with Common Lisp

+

+ This entire platform is built using Common Lisp, demonstrating the power and elegance + of Lisp for modern web applications. We use: +

+
    +
  • Radiance - Web application framework
  • +
  • Clip - HTML5-compliant template engine
  • +
  • LASS - Lisp Augmented Style Sheets
  • +
  • ParenScript - Lisp-to-JavaScript compiler
  • +
  • Icecast - Streaming media server
  • +
  • Liquidsoap - Audio stream generation
  • +
+

+ By building in Common Lisp, we're doubling down on our technical values and creating features + for "our people"—those who appreciate the elegance of Lisp and the power of understanding your tools deeply. +

+
+ +
+

📖 Open Source & AGPL Licensed

+

+ Asteroid Radio is free and open source software, licensed under the + GNU Affero General Public License v3.0 (AGPL). +

+

+ The source code is available at: + https://github.com/Fade/asteroid +

+

+ We believe in transparency, collaboration, and the freedom to study, modify, and share the software we use. + The AGPL ensures that improvements to Asteroid Radio remain free and available to everyone. +

+
+ +
+

🎧 Features

+
    +
  • Live Streaming - Multiple quality options (AAC, MP3)
  • +
  • Persistent Player - Frameset mode for uninterrupted playback while browsing
  • +
  • Spectrum Analyzer - Real-time audio visualization with customizable themes
  • +
  • Track Library - Browse and search the music collection
  • +
  • User Profiles - Track your listening history
  • +
  • Admin Tools - Manage tracks, users, and playlists
  • +
+
+ +
+

🤝 Community

+

+ We're part of the SystemCrafters + community—a group of developers, hackers, and enthusiasts who believe in building systems from first principles, + understanding our tools deeply, and sharing knowledge freely. +

+

+ Join us in celebrating the intersection of great music and great code! +

+
+
+
+ + diff --git a/template/about.ctml b/template/about.ctml new file mode 100644 index 0000000..162c3cf --- /dev/null +++ b/template/about.ctml @@ -0,0 +1,102 @@ + + + + About - Asteroid Radio + + + + + + + +
+
+

+ Asteroid + ABOUT ASTEROID RADIO + Asteroid +

+ +
+
+
+

🎵 Asteroid Music for Hackers

+

+ Asteroid Radio is a community-driven internet radio station born from the SystemCrafters community. + We celebrate the intersection of music, technology, and hacker culture—broadcasting for those who + appreciate both great code and great music. +

+

+ We met through a shared set of technical biases and a love for building systems from first principles. + Asteroid Radio embodies that ethos: music for hackers, built by hackers. +

+
+ +
+

🛠️ Built with Common Lisp

+

+ This entire platform is built using Common Lisp, demonstrating the power and elegance + of Lisp for modern web applications. We use: +

+
    +
  • Radiance - Web application framework
  • +
  • Clip - HTML5-compliant template engine
  • +
  • LASS - Lisp Augmented Style Sheets
  • +
  • ParenScript - Lisp-to-JavaScript compiler
  • +
  • Icecast - Streaming media server
  • +
  • Liquidsoap - Audio stream generation
  • +
+

+ By building in Common Lisp, we're doubling down on our technical values and creating features + for "our people"—those who appreciate the elegance of Lisp and the power of understanding your tools deeply. +

+
+ +
+

📖 Open Source & AGPL Licensed

+

+ Asteroid Radio is free and open source software, licensed under the + GNU Affero General Public License v3.0 (AGPL). +

+

+ The source code is available at: + https://github.com/Fade/asteroid +

+

+ We believe in transparency, collaboration, and the freedom to study, modify, and share the software we use. + The AGPL ensures that improvements to Asteroid Radio remain free and available to everyone. +

+
+ +
+

🎧 Features

+
    +
  • Live Streaming - Multiple quality options (AAC, MP3)
  • +
  • Persistent Player - Frameset mode for uninterrupted playback while browsing
  • +
  • Spectrum Analyzer - Real-time audio visualization with customizable themes
  • +
  • Track Library - Browse and search the music collection
  • +
  • User Profiles - Track your listening history
  • +
  • Admin Tools - Manage tracks, users, and playlists
  • +
+
+ +
+

🤝 Community

+

+ We're part of the SystemCrafters + community—a group of developers, hackers, and enthusiasts who believe in building systems from first principles, + understanding our tools deeply, and sharing knowledge freely. +

+

+ Join us in celebrating the intersection of great music and great code! +

+
+
+
+ + diff --git a/template/admin.ctml b/template/admin.ctml index 8c655db..c506dc9 100644 --- a/template/admin.ctml +++ b/template/admin.ctml @@ -12,11 +12,12 @@

🎛️ ADMIN DASHBOARD

diff --git a/template/audio-player-frame.ctml b/template/audio-player-frame.ctml index 144716b..2aa8c21 100644 --- a/template/audio-player-frame.ctml +++ b/template/audio-player-frame.ctml @@ -4,6 +4,7 @@ +
@@ -31,6 +32,25 @@ + + +
+ + + +
diff --git a/template/front-page-content.ctml b/template/front-page-content.ctml index b3ac5c9..9a21193 100644 --- a/template/front-page-content.ctml +++ b/template/front-page-content.ctml @@ -11,7 +11,6 @@ - @@ -97,41 +40,15 @@

The Station at the End of Time

- -
- -
- - -
-
- diff --git a/template/front-page.ctml b/template/front-page.ctml index b8cd620..8da1b61 100644 --- a/template/front-page.ctml +++ b/template/front-page.ctml @@ -51,8 +51,9 @@