Skip to content

Repository files navigation

RadioTEDU Jukebox Local

RadioTEDU Jukebox is a comprehensive school radio and interactive music selection system designed for campus environments. It empowers students to listen to live radio, access podcasts, and democratically choose music in common areas (like the cafeteria/restaurant) using a QR-code-based voting system.

RadioTEDU Jukebox Logo

🚀 Features

This project is a "Superapp" comprising multiple modules:

📱 Mobile App (iOS & Android)

The central hub for students & listeners.

  • Live Radio: Listen to the school radio stream with background playback and lock screen controls.
  • Podcasts: Browse and listen to school podcasts (fetched from WordPress/RSS).
  • Juicebox Controller: Scan a QR code in the cafeteria to join the active "Session".
  • Voting System: Add songs to the queue, Upvote your favorites, and Downvote tracks you want to skip.
  • Ranking: Earn points for good song selections and climb the user leaderboard.

🎵 Jukebox Kiosk

Running in Windows browser kiosk mode or on a cafeteria display.

  • Now Playing: Displays the current song and upcoming queue.
  • QR Code: Dynamic QR code for students to scan and join.
  • Smart Queue: Prioritizes songs based on votes, user rank, and wait time. abuse prevention included.

Local school-library playback

juke-local plays music from a separate school music PC rather than Spotify. Configure media-agent/.env with that PC's LOCAL_MUSIC_ROOT; configure the web backend with the corresponding media-agent secrets and PUBLIC_BASE_PATH=/juke-local. The controller's Tara action imports the music-PC catalogue. The kiosk, QR-phone clients, and controller use only https://radiotedu.com/juke-local; the web backend proxies the complete-song stream from the music PC without disclosing its IP or file paths.

Cover art is scanned with the local catalogue. Downloader filenames keep the YouTube video ID in square brackets, for example Artist - Song [videoid].mp3; the media agent converts that ID into an i.ytimg.com thumbnail URL and the backend stores it in songs.cover_url. New playlist downloads should run with yt-dlp --embed-thumbnail --write-thumbnail --convert-thumbnails jpg so MP3 files also carry embedded artwork.

Do not publish or share the local music directory. The music PC accepts only HMAC-signed, private-network requests from the web server; the public web server is the sole internet-facing component.

🖥️ Management & Web Controller

  • Web Dashboard: For managing the system, song catalog, and monitoring active sessions.

🏗️ Technical Architecture

The project is structured into several key components:

Component Path Technology Stack Description
Backend rtjukebox-main/backend Node.js, TypeScript, Express, PostgreSQL The core API handling auth, voting logic, queue management, and radio streams.
Mobile App rtjukebox-main/mobile React Native Cross-platform mobile application for end-users.
Kiosk Web rtjukebox-main/kiosk-web HTML/JS (Legacy/Simple) Simple web interface for the kiosk display (likely superseded by the mobile app's kiosk mode).
Web Controller rtjukebox-main/jukebox-web-controller React, Vite Web-based admin or control dashboard.

Directory Structure

📦 rtjukebox-main
 ┣ 📂 backend                 # Node.js API Server
 ┃ ┣ 📂 src
 ┃ ┃ ┣ 📂 routes              # API Endpoints (auth, jukebox, radio)
 ┃ ┃ ┗ 📂 services            # Business logic (Queue algorithm, Push notifications)
 ┃ ┗ 📜 package.json
 ┣ 📂 mobile                  # React Native User App
 ┃ ┣ 📂 src
 ┃ ┃ ┗ 📂 screens             # UI Screens (Jukebox, Radio, Profile)
 ┃ ┗ 📜 package.json
 ┣ 📂 kiosk-web               # Simple Kiosk Display (Web)
 ┣ 📂 jukebox-web-controller  # Admin/Controller Dashboard
 ┗ 📜 Kiosk App Setup & Build.md # Detailed setup documentation

🌍 Open Source Usage Policy

This project is open to everyone! You are free to use, modify, and deploy this system for your own school or community.

Requirement:

You must include a visible reference to "RadioTEDU" in your deployment. This project was originally developed for RadioTEDU, and we appreciate the credit.

For setup and deployment instructions, please refer to the internal documentation or contact the maintainers.

🤝 Contributing

  1. Fork the repository.
  2. Create a feature branch.
  3. Commit your changes.
  4. Push to the branch.
  5. Open a Pull Request.

📄 License

[License Information Here]


Generated based on codebase analysis of rtjukebox-main.

About

Campus jukebox platform with QR song requests, local media control, kiosk displays, and companion apps

Topics

Resources

Security policy

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages