Marco Mooren 29423288ca feat: add multi-user support for favorites management and room clock synchronization
- Implemented a new API endpoint for retrieving and managing user favorites in /api/users.
- Added functionality for admins to edit the shared "main" user's favorites.
- Created a one-shot DB smoke test script for verifying multi-user kiosk migrations.
- Introduced a RoomClock class for synchronizing server time across clients using WebSocket.
2026-05-13 13:53:12 +02:00

Online Radio Explorer

Touchscreen kiosk + admin for exploring and playing internet radio in the office.

Quick start

cp .env.example .env
npm install
npm run dev

First boot creates the SQLite DB at DB_PATH, runs the seed, and provisions the bootstrap admin from ADMIN_BOOTSTRAP_USER / ADMIN_BOOTSTRAP_PASSWORD.

Production

npm run build
npm start

The built kiosk is served from /, admin from /admin/, API from /api.

Electron (desktop / Pi)

The Master view also runs as a standalone Electron app. The Express + WebSocket server boots inside the Electron main process; controllers/panels on other devices on the LAN connect to it normally.

npm install            # postinstall rebuilds better-sqlite3 for Electron's ABI
npm run electron       # builds web assets and launches Electron

Packaging (Windows installer + Linux AppImage for Pi targets):

npm run dist:win       # NSIS installer
npm run dist:linux     # AppImage for x64 / arm64 / armv7l

In packaged builds, the DB and image cache live under app.getPath('userData') (%APPDATA%/Online Radio Explorer on Windows, ~/.config/Online Radio Explorer on Linux). In npm run electron dev mode the existing repo data/ directory is reused.

Layout

  • server/ — Express, SQLite, WebSocket hub, source adapters, stream resolver.
  • web/ — Vanilla JS kiosk (web/) and admin (web/admin/) bundled by Vite.
  • data/seed/stations.json — curated starter pack.
  • deploy/ — systemd unit + Pi setup notes.
Description
No description provided
Readme 216 MiB
Languages
JavaScript 83.9%
CSS 15.3%
HTML 0.8%