# Online Radio Explorer Touchscreen kiosk + admin for exploring and playing internet radio in the office. ## Quick start ```powershell cp .env.example .env npm install npm run dev ``` - Kiosk: http://localhost:5173/ - Admin: http://localhost:5173/admin/ - API: http://localhost:4173/api 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 ```powershell 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. ```powershell 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): ```powershell 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.