Professional internet radio CMS built with Laravel 12. A complete solution for managing your online radio station with AzuraCast integration, modern admin panel, content management, PWA support, and full GDPR compliance.
π Website Β· π§ Contact Β· π» GitHub
- π΅ AzuraCast Integration - Real-time now playing, song history, listener count, station info
- π§ HTML5 Audio Player - Responsive player with volume control and play/pause
- β‘ Web Installer - Modern installation wizard with requirements check
- π¨ Theme System - WordPress-like theme management with upload, preview, activation
- π Page Management - Create and edit pages with TinyMCE rich text editor
- π₯ Team Management - Add team members with photos, roles, and social links
- π Schedule System - Display radio show schedules by day
- π° Articles/News System - Full blog functionality with categories and tags
- π€ DJ Profiles - Extended DJ profiles with bio, genre, equipment, social links
- π« Events/Gigs - Event management with dates, venues, tickets
- π Media Manager - Upload, organize images in folders (like WordPress)
- π·οΈ Categories & Tags - Organize content with taxonomy system
- βοΈ TinyMCE Editor - Rich text editing in all content fields
- βοΈ Settings Panel - Multi-tab settings (General, Contact, Social, SEO, Appearance, Streaming)
- πΌοΈ Hero Image Upload - Customize homepage hero background
- π¨ Branding Controls - Upload logos, favicon, set theme colors
- π Update Notifications - Badge in admin header when new version available
- π€ My Profile Page - DJs can manage their own profiles and photos
- π Dashboard - Overview of all content and statistics
- βοΈ Legal Pages - Privacy Policy, Terms of Service, Cookie Policy (GDPR compliant)
- πͺ Cookie Consent - Modern granular cookie banner with toggle switches
- π€ Data Controller Info - Administrator details in legal pages
- π Full SEO - Meta tags, Open Graph, Twitter Cards, friendly URLs
- π± PWA Support - Web app manifest and service worker
- οΏ½ Update System - GitHub-based update checking with changelog
- π Admin Panel - Role-based access (admin, editor, moderator)
- π Dashboard - Overview of pages, team, shows, and users
- PHP 8.2+ (tested on PHP 8.5)
- MySQL 8.0+ or MariaDB 10.6+
- Composer 2.5+
- Nginx or Apache with mod_rewrite
- SSL Certificate (recommended for production)
- AzuraCast server (for streaming features)
pdoandpdo_mysqlmbstringopenssltokenizerxmlcurlzip(for theme uploads)fileinfojsongdorimagick(for image processing)exif(for image metadata)
-
Upload files to your web server (public_html or wwwroot)
-
Create database in MySQL/MariaDB:
CREATE DATABASE novaradio CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-
Set permissions:
chmod -R 755 storage chmod -R 755 bootstrap/cache mkdir -p storage/framework/{views,cache,sessions,testing} mkdir -p storage/logs storage/app/public -
Install dependencies:
composer install --no-dev --optimize-autoloader
-
Run installer - Visit
https://your-domain.com/install -
Follow wizard:
- Enter database credentials
- Create admin account
- (Optional) Configure AzuraCast connection
# 1. Clone or upload files to server
cd /var/www/novaradio
# 2. Install dependencies
composer install --no-dev --optimize-autoloader
# 3. Create environment file
cp .env.example .env
# 4. Set permissions
chmod -R 755 storage bootstrap/cache
mkdir -p storage/framework/{views,cache,sessions,testing}
# 5. Generate app key
php artisan key:generate
# 6. Configure database in .env
# DB_CONNECTION=mysql
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=novaradio
# DB_USERNAME=root
# DB_PASSWORD=yourpassword
# 7. Run migrations and seeders
php artisan migrate --force
php artisan db:seed --force
# 8. Set APP_INSTALLED=true in .envNovaRadio/
βββ app/
β βββ Http/
β β βββ Controllers/
β β β βββ Admin/ # Admin panel controllers
β β β β βββ ArticleController.php
β β β β βββ CategoryController.php
β β β β βββ DjProfileController.php
β β β β βββ EventController.php
β β β β βββ MediaController.php
β β β β βββ SettingsController.php
β β β β βββ TagController.php
β β β β βββ TeamController.php
β β β β βββ ThemeController.php
β β β β βββ UpdateController.php
β β β βββ Api/ # API controllers
β β β βββ Install/ # Installer controller
β β β βββ ... # Frontend controllers
β β βββ Middleware/
β β βββ AdminMiddleware.php
β βββ Models/ # Eloquent models
β β βββ Article.php
β β βββ Category.php
β β βββ DjProfile.php
β β βββ Event.php
β β βββ Page.php
β β βββ Setting.php
β β βββ Tag.php
β β βββ TeamMember.php
β β βββ User.php
β βββ Providers/
β β βββ AppServiceProvider.php
β βββ Services/ # Business logic
β βββ AzuraCastService.php
β βββ SeoService.php
β βββ UpdateService.php
βββ bootstrap/
βββ config/
βββ database/
β βββ migrations/ # All database migrations
β βββ seeders/
β βββ DatabaseSeeder.php # Sample data
βββ public/ # Web root
β βββ images/ # Local images storage
β β βββ articles/
β β βββ events/
β β βββ hero/
β β βββ team/
β βββ js/tinymce/ # Self-hosted TinyMCE
β βββ pwa/ # PWA manifest and sw.js
β βββ themes/
β βββ default/ # Frontend theme
β βββ css/
β βββ js/
βββ resources/
β βββ views/
β βββ admin/ # Admin panel views
β βββ install/ # Installer views
β βββ themes/ # Frontend themes
βββ routes/
β βββ web.php # Web routes
β βββ console.php
βββ storage/ # Cache, logs, sessions
β βββ app/public/media # Media Manager uploads
βββ vendor/ # Composer dependencies
Add to your .env file:
AZURACAST_BASE_URL=https://your-azuracast.com
AZURACAST_API_KEY=your_api_key_here
AZURACAST_STATION_ID=1To get API key:
- Log in to AzuraCast admin panel
- Go to My Account β API Keys
- Generate new key
Add to your .env file:
GITHUB_REPO=novik133/NovaRadia
GITHUB_TOKEN=your_github_token (optional, for private repos)- CSRF Protection - All forms protected by default
- XSS Protection - Blade escaping enabled
- SQL Injection - Query builder and Eloquent ORM
- Password Hashing - Bcrypt with proper rounds
- Admin Middleware - Role-based access control
sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cachemkdir -p storage/framework/{views,cache,sessions,testing}
chmod -R 777 storage/framework/viewsphp artisan config:clear
php artisan cache:clear
php artisan view:clear# Clear composer cache
composer clear-cache
# Install without scripts first
composer install --no-scripts
# Then run scripts manually
php artisan package:discoverThe system includes a built-in update checker:
- Go to Admin Panel β Updates
- Click Check for Updates
- If update available, review changelog
- Click Install Update
Note: Updates are pulled from GitHub releases. Create a backup before updating.
NovaRadio Freeware License
Copyright (c) 2025-2026 Kamil 'Novik' Nowicki
Permissions:
- β Free to use for personal and commercial projects
- β Install on unlimited servers
- β Create multiple radio stations
Restrictions:
- β Modification of source code is NOT allowed
- β Redistribution is NOT allowed
- β Removal of copyright notices is NOT allowed
Premium Add-ons: The author reserves the right to introduce paid add-ons, themes, and extensions for NovaRadio.
For licensing inquiries: kamil@kamilnowicki.com
Kamil 'Novik' Nowicki
- π Website: kamilnowicki.com
- π§ Email: kamil@kamilnowicki.com
- π» GitHub: github.com/novik133
Built with:
- Laravel 12 - PHP Framework
- AzuraCast - Radio Management
- TinyMCE - Rich Text Editor (self-hosted)
- Font Awesome 6 - Icons
NovaRadio includes a complete media management system with role-based access:
| Feature | Who Can Access | Location |
|---|---|---|
| Hero Image | Admin only | Settings β Appearance |
| Logos/Favicon | Admin only | Settings β Appearance |
| DJ/Team Photos | Admin + Self | Team β Edit OR My Profile |
| Article Images | Authors + Admin | Articles β Browse Media |
| Media Library | All admins | Media Library menu |
| Theme Screenshots | Auto-generated | Theme directory |
public/images/
βββ hero/ # Homepage hero image (admin only)
βββ team/ # DJ/Team member photos
βββ articles/ # Article featured images
βββ events/ # Event/gig images
βββ default/ # Default theme assets
storage/app/public/
βββ media/ # Media Manager uploads (organized by date)
Made with β€οΈ in Poland