#+TITLE: Asteroid Radio - Project Development History #+AUTHOR: Asteroid Radio Development Team #+DATE: 2026-01-26 #+DESCRIPTION: Comprehensive history of the Asteroid Radio project from inception to present * Project Overview Asteroid Radio is a web-based internet radio station built with Common Lisp, featuring a hacker-themed terminal aesthetic. The project combines the Radiance web framework with Icecast/Liquidsoap streaming infrastructure to create a full-featured music streaming platform. ** Technology Stack - *Backend*: Common Lisp (SBCL), Radiance web framework - *Streaming*: Icecast2, Liquidsoap - *Database*: PostgreSQL (configured, ready for migration) - *Frontend*: HTML5, JavaScript, CLIP templating, LASS (CSS in Lisp) - *Infrastructure*: Docker, Docker Compose * Project Timeline ** Phase 1: Project Inception (August 2025) *** 2025-08-12: Initial Commit - *Author*: Brian O'Reilly (Fade) - Project founded and initial repository created - Basic project structure established - Core Radiance framework integration begun ** Phase 2: Foundation Building (September - Early October 2025) *** Core Features Established - Basic web server setup with Radiance - Initial music library scanning functionality - Database integration for track metadata - Basic authentication system - Front-end page structure *** Key Contributors Join - Glenn Thompson (glenneth) begins major contributions - Luis Pereira joins for UI/UX improvements - Collaborative development model established ** Phase 3: Template System & UI Overhaul (October 2025) *** 2025-10-04 to 2025-10-06: CLIP Template Migration - *Lead*: Luis Pereira, Glenn Thompson - Migrated from inline HTML to CLIP templating system - Established consistent site-wide styling - Implemented VT323 retro terminal font - Created reusable template components *** 2025-10-04 to 2025-10-07: User Management System - *Lead*: Glenn Thompson - User profile pages with edit functionality - Registration and authentication UI - Role-based access control (admin, DJ, listener) - User profile management interface *** 2025-10-05: Navigation Improvements - *Lead*: Luis Pereira - Unified navigation bar across all pages - Improved responsive design - Better mobile experience ** Phase 4: API Refactoring & Testing (October 8-10, 2025) *** 2025-10-08: Major API Overhaul - *Lead*: Glenn Thompson - Refactored all endpoints to use Radiance's define-api macro - Standardized JSON API responses - API-aware authentication (auto-detects API vs web requests) - Comprehensive automated test suite added *** 2025-10-08 to 2025-10-09: Frontend JavaScript Updates - Fixed all frontend code to work with new API endpoints - Improved error handling - Better async/await patterns *** 2025-10-10: Documentation Sprint - *Lead*: Glenn Thompson - Major documentation cleanup - Added comprehensive API documentation - Created testing guides - Updated all core documentation files ** Phase 5: Streaming Infrastructure (October 8-14, 2025) *** 2025-10-08: Liquidsoap DJ Controls - *Lead*: Glenn Thompson - Telnet integration with Liquidsoap - Real-time stream control - Skip track functionality - Queue management via telnet commands *** 2025-10-10: Dynamic Stream URL Support - *Lead*: Glenn Thompson - Stream base URL as template variable - Support for multiple deployment environments - Preparation for multi-network access *** 2025-10-14: Stream Queue System - *Lead*: Brian O'Reilly, Glenn Thompson - M3U playlist queue management - Admin UI for queue control - Add/remove tracks from stream queue - Real-time queue updates *** 2025-10-14: Audio Quality Improvements - ReplayGain volume normalization - Reduced buffering - Improved player UI - Better streaming performance ** Phase 6: Advanced Features (October 12-17, 2025) *** 2025-10-12: Role-Based Page Flow - *Lead*: Glenn Thompson - Intelligent page routing based on user role - Admin-specific workflows - DJ control interfaces - Enhanced user experience *** 2025-10-13: HTML Partial Hydration - *Lead*: Luis Pereira - Now-playing partial component - Server-side rendering with client updates - Reduced JavaScript complexity - Better performance *** 2025-10-15 to 2025-10-16: Configuration System - *Lead*: Brian O'Reilly - Dedicated configuration namespace exploration - Environment-based configuration - Improved deployment flexibility *** 2025-10-16: Comprehensive Documentation Update - *Lead*: Glenn Thompson - PROJECT-OVERVIEW updated with all features - Stream queue and ReplayGain documentation - Complete feature documentation *** 2025-10-17: Code Quality Improvements - *Lead*: Glenn Thompson - Code consistency refactoring - Bug fixes (track search query variable) - Maintainability improvements - Better code organization ** Phase 7: Player Evolution (October 19-25, 2025) *** 2025-10-19: Pop-Out Player - *Lead*: Glenn Thompson - Standalone pop-out player window - Independent audio playback - Queue management improvements - Multi-window support *** 2025-10-19: Persistent Audio Player (Frameset) - *Lead*: Glenn Thompson - Frameset-based persistent player - Audio continues during navigation - Bottom-frame player bar - Seamless listening experience *** 2025-10-21: Hybrid Player System - *Lead*: Glenn Thompson - Combined frameset and pop-out options - User preference storage (localStorage) - Flexible playback modes - Enhanced user choice *** 2025-10-24: Dynamic Stream URL Detection - *Lead*: Glenn Thompson - Automatic host detection from HTTP headers - Multi-environment support (localhost, Tailscale, LAN) - Fixed remote access issues - No configuration needed for different networks *** 2025-10-25: Typography Consistency Fix - *Lead*: Glenn Thompson - Replaced Courier New with VT323 in persistent player - Consistent font usage site-wide - Addressed styling feedback - Improved visual coherence ** Phase 8: Docker Deployment & Documentation (October 26 - November 1, 2025) *** 2025-10-19: User Initialization Retry Logic - *Lead*: Luis Pereira (easilok) - Fixed user initialization retry mechanism - Improved reliability on startup - Better error handling *** 2025-10-26: Custom Environment Variables for Streams - *Lead*: Luis Pereira (easilok) - Added MUSIC_LIBRARY environment variable - Added QUEUE_PLAYLIST environment variable - Flexible path configuration for Docker deployments *** 2025-10-26: Docker Setup for Asteroid Application - *Lead*: Luis Pereira (easilok) - Created Dockerfile.asteroid for app containerization - Added docker-compose.asteroid.yml - Radiance configuration for containerized deployment - Complete Docker-based deployment solution *** 2025-10-26: Docker Deployment Documentation - *Lead*: Luis Pereira (easilok) - Comprehensive Docker deployment guide in INSTALLATION.org - Separate sections for stream services and application - Environment variable documentation - Build and deployment instructions *** 2025-10-26: Comprehensive Documentation Update - *Lead*: Glenn Thompson - Created PROJECT-HISTORY.org with complete timeline - Updated all documentation dates to 2025-10-26 - Added current features across all docs - Updated repository URLs to GitHub - Documentation version 3.0 *** 2025-10-28: Documentation Refinements - *Lead*: Glenn Thompson - Fixed music directory location (asteroid/music/ not docker/music/) - Removed redundant Python/JavaScript examples from API docs - Added package manager notes for cross-distribution compatibility - Clarified symlink support for music directories *** 2025-11-01: Documentation Merge and Cleanup - *Lead*: Glenn Thompson - Merged upstream Docker deployment documentation - Removed obsolete session notes - Synchronized with upstream/main - Prepared comprehensive documentation PR ** Phase 9: Production Launch & Feature Expansion (November - December 2025) *** Early November: Template & Deployment Stabilization - *Lead*: Glenn Thompson, Brian O'Reilly - Changed template extension to match CLIP documentation (.ctml) - Updated all template paths in calling code - Refactored for Lispy improvements (templates, strings, error handling) - Deployment and post-deployment fixes - Fixed redirection when navigating between frameset views - Stream quality persistence in local storage - Security: Removed hardcoded admin credentials from login page - Stream service containers locked to localhost access *** Mid-November: Password Management & Data Model Refactoring - *Lead*: Glenn Thompson, Luis Pereira - Password management and listener count fixes - Database schema bug fixes from upstream merge - User database methods moved to data-model - Admin button visibility restricted to admin accounts - Profile password change fixes - Playlist creation fixes on frontend *** Late November: Recently Played & MusicBrainz Integration - *Lead*: Glenn Thompson - Recently played tracks feature with MusicBrainz integration - Favicon and asteroid.png graphics added to front page - User activate/deactivate routes - User role update routes - Track name clickable with external link icon - Audio player color matched to app panels - Blinking live cursor added *** Late November: Spectrum Analyzer & Parenscript Conversion - *Lead*: Glenn Thompson - Real-time spectrum analyzer using Web Audio API - Parenscript (Lisp-to-JavaScript) implementation - Spectrum analyzer theming and visualization styles - Monotone theme and dynamic border color - HTML entity decoding fixes in now playing titles - JavaScript converted to Parenscript with stream fixes *** Early December: PostgreSQL Integration & Database Work - *Lead*: Brian O'Reilly, Glenn Thompson - PostgreSQL interface integration (i-postmodern) - Users table case sensitivity fixes - Database credentials sourced from environment - M3U files moved to dedicated playlists directory - Database creation script corrections - User dump/restore to CSV functionality *** Mid-December: Player Improvements & Listener Statistics - *Lead*: Glenn Thompson / Cascade - Wedged player fix with reconnect button and volume preservation - Status page for frameset mode with navigation fixes - Listener statistics feature with geo stats collection - City-level tracking in geo stats - Expandable city breakdown in admin view - Liquidsoap/Icecast controls added - Library scan fixes *** Mid-December: Shuffle Mount & Channel Selector - *Lead*: Glenn Thompson - Shuffle stream mount with separate recently-played tracking - Channel/quality selector separation - Dynamic playlist phase names - Dynamic channel name updates - Playlist crossfade transitions - New playlists in support of variety *** Late December: Playlist Scheduler & User Features - *Lead*: Glenn Thompson - Automatic playlist scheduler with cl-cron - Admin UI for playlist scheduler with server time display - Database persistence for playlist schedule - Track favorites feature with star button - Listening history tracking - Listening activity chart on profile page - Avatar upload functionality - Track requests and profile enhancements *** Late December: Custom Playlists & Rate Limiting - *Lead*: Glenn Thompson, Luis Pereira - Custom user playlists with submission and admin review - YP directory listings for internet-radio.com and xiph.org - Rate limiting macros for define-page and define-api - Bigger rate limits for now-playing API routes - Favorites sync between front page and frame player via postMessage - Listening history refactored to data-model - Timestamp normalization for PostgreSQL compatibility *** December 31: Version 1.0 & Operations - *Lead*: Brian O'Reilly - Declared "Version 1.0" milestone - TODO.org updated to reflect production launch - Operations procedures instituted - Repository cleanup of interstitial files * Development Statistics ** Contributors (by commit count) 1. Glenn Thompson (glenneth/Glenneth) - 354 commits 2. Brian O'Reilly (Fade) - 148 commits 3. Luis Pereira (easilok) - 109 commits ** Total Commits: 614 commits ** Pull Requests Merged: 88 1. Glenn Thompson (glenneth1) - 59 PRs 2. Luis Pereira (easilok) - 26 PRs 3. Brian O'Reilly (fade) - 3 PRs ** Active Development Period - Start: August 12, 2025 - Current: January 26, 2026 - Duration: ~5.5 months of active development * Major Features Implemented ** Core Functionality - Music library scanning and metadata extraction - PostgreSQL database integration (configured, ready for migration) - Track search and filtering - Playlist management - Stream queue control - Live streaming via Icecast/Liquidsoap ** User Management - User registration and authentication - Role-based access control (Admin, DJ, Listener) - User profiles with edit functionality - Session management - Role-based page flow ** Streaming Features - Multiple quality options (AAC 96k, MP3 128k, MP3 64k) - ReplayGain volume normalization - Live now-playing information - Icecast integration - Liquidsoap DJ controls - Stream queue management ** Player Options - Inline web player - Pop-out player window - Persistent frameset player - Hybrid player system - Quality selector - Auto-reconnect on errors ** API & Integration - RESTful JSON API - API-aware authentication - Comprehensive test suite - Telnet integration with Liquidsoap - Real-time status updates ** UI/UX - Retro terminal aesthetic (VT323 font) - Responsive design - CLIP templating system - LASS CSS preprocessing - Consistent navigation - HTML partial hydration ** Infrastructure - Docker containerization (streams and application) - Docker Compose orchestration - Dockerfile for Asteroid application - Environment variable configuration - PostgreSQL database (configured) - Multi-environment support - Dynamic URL detection * Technical Milestones ** Architecture Evolution 1. *Initial*: Monolithic HTML generation 2. *Template Migration*: CLIP templating system 3. *API Standardization*: Radiance define-api macros 4. *Component Architecture*: HTML partials and hydration 5. *Multi-Mode Player*: Hybrid player system ** Code Quality Improvements - Comprehensive test suite - API refactoring for consistency - Code organization and maintainability - Documentation standards - Consistent error handling ** Performance Optimizations - ReplayGain normalization - Reduced buffering - Efficient database queries - Parallel music scanning - Client-side caching ** Phase 10: Documentation Overhaul (January 2026) *** 2026-01-26: Comprehensive Documentation Update - *Lead*: Glenn Thompson / Cascade - Major documentation alignment with current codebase - Standardized all API endpoint references to `/api/asteroid/` base path - Updated UI route documentation to reflect root `/` mounting - Corrected template file extensions from `.chtml` to `.ctml` - Fixed Docker music library paths (`music/library/` standardization) - Updated stream queue file location to `playlists/stream-queue.m3u` - Expanded API-ENDPOINTS.org with playlist management, stream control, and admin APIs - Updated all metadata dates to 2026-01-26 - Bumped documentation version to 3.1 - Author metadata standardization (Glenn → Glenn Thompson where applicable) * Current State (January 2026) ** Production Ready Features - Full music streaming platform - User management system - Admin control panel - DJ controls - Multiple player modes - Complete Docker deployment (streams + application) - Multi-environment support with dynamic URLs - Comprehensive documentation ** Active Development Areas - PostgreSQL migration (configured, ready for data migration) - JavaScript code cleanup and refactoring - Additional UI improvements - Performance optimization - Feature expansion based on user feedback ** Recent Achievements (January 2026) - Complete documentation overhaul aligning docs with codebase - API endpoint standardization (`/api/asteroid/` base path) - Docker deployment fully documented - Documentation version 3.1 released - All metadata updated and consistent ** Known Issues & Future Work - PostgreSQL migration (configured, pending data migration) - Continued UI/UX refinement - Additional streaming features (per design.org) - Enhanced playlist functionality - Live chat and song requests - Mobile app considerations - Scalability improvements * Project Philosophy ** Design Principles - *Hacker Aesthetic*: Terminal-inspired retro design - *User Choice*: Multiple player modes and options - *Simplicity*: Clean, focused interface - *Performance*: Fast, responsive experience - *Flexibility*: Multi-environment support ** Development Approach - Collaborative development - Iterative improvements - Comprehensive testing - Documentation-first - User feedback driven * Acknowledgments ** Core Team - *Brian O'Reilly (Fade)*: Project founder, architecture, streaming infrastructure - *Glenn Thompson (glenneth)*: Major features, API, player systems, documentation - *Luis Pereira*: UI/UX, templating, frontend improvements ** Technologies - Radiance web framework - Icecast streaming server - Liquidsoap audio processing - PostgreSQL database - Common Lisp ecosystem * Conclusion Asteroid Radio has evolved from a simple concept into a full-featured internet radio platform over 5+ months of active development. The project demonstrates the power of Common Lisp for web development and the collaborative nature of open-source development. With complete Docker deployment, comprehensive documentation, and a growing feature set, Asteroid Radio is ready for production use while continuing to evolve with regular improvements, bug fixes, and new features based on user needs and technical requirements. ** Project Links - Repository: https://github.com/fade/asteroid - Contributors: https://github.com/fade/asteroid/graphs/contributors - IRC: #asteroid.music on irc.libera.chat --- *Last Updated: 2026-01-26*