[grade=B] feat: add Vintage Stereo radio app template

Adds a new DashCaddy app template that ships a glass-front vintage console
stereo UI tuning curated real internet-radio streams through a beautiful
analog control surface.

Adds src/docker/app-templates.js:vintage-radio with:
- Wooden end caps with Power / Mode / Mute knobs and a brushed-metal face
  visible behind a smoked-glass overlay
- Slide-rule tuning rail with red cursor + flag and click/drag/touch/keyboard
- Twin glowing VU meters with smooth needle animation
- Vertical volume slider, prev/next preset buttons, signal LED
- MODE knob filters visible stations by genre (ALL/AMBIENT/ROCK/MIXED);
  dial respects the active filter without resetting it
- 18 curated real streams (SomaFM, KEXP, Radio Paradise, etc.) live-verified
- Persistent visible MODE label and dynamic aria-label
- Narrow-screen zoom-based responsive scaling at 760/600/480px

Bundles dashcaddy-api/static-sites/vintage-radio/:
- web/index.html, web/radio.css, web/radio.js, web/stations.json
- install.sh (copies assets to /opt/vintage-radio/web, DASHCADDY_ROOT override)
- install-installer.sh (installs install.sh into /usr/local/bin)

Verification:
- 20/20 app-templates test suite passes
- Headless Chromium: 18 stations render, dial+filter+power all functional
  with zero page errors
- 18/18 stream URLs return HTTP 200 from this host
- Codex grade B (urn:ump:ekaap5xpggifl76tia3dddq5iv5bi23rlvevbn22mux62yfkiexa)
This commit is contained in:
Hermes Agent
2026-08-13 14:29:10 -07:00
parent ec96060b2e
commit 87054e55d9
7 changed files with 1431 additions and 0 deletions
+41
View File
@@ -1764,6 +1764,47 @@ const APP_TEMPLATES = {
]
},
"vintage-radio": {
name: "Vintage Stereo",
description: "Glass-front console stereo that tunes curated real internet stations (SomaFM, KEXP, Radio Paradise, and more) through a beautiful analog UI",
icon: "📻",
category: "Media",
popularity: 72,
difficulty: "Easy",
docker: {
image: "nginx:alpine",
ports: ["{{PORT}}:80"],
volumes: [
"/opt/vintage-radio/web:/usr/share/nginx/html:ro"
],
environment: {}
},
subdomain: "radio",
defaultPort: 8090,
healthCheck: "/",
subpathSupport: 'none',
preInstall: {
description: "Materialize the bundled static assets into /opt/vintage-radio/web before starting the container.",
script: "vintage-radio-install.sh"
},
features: [
"Glass-front console stereo UI with wooden end caps and brushed-metal faceplate",
"Tunable analog slide-rule dial with click-stop detents and red cursor flag",
"Twin glowing VU meters with smooth needle animation while powered",
"Power / Mode / Mute knobs, vertical volume slider, signal-strength LED",
"MODE knob filters stations by genre (ALL / AMBIENT / ROCK / MIXED)",
"18 curated real internet-radio streams (SomaFM, KEXP, Radio Paradise, Space Station Soma, Mission Control, and more)"
],
setupInstructions: [
"Run `bash /usr/local/bin/vintage-radio-install.sh` once before starting the container — copies the bundled web assets (index.html, radio.css, radio.js, stations.json) from the DashCaddy repo (dashcaddy-api/static-sites/vintage-radio/web) into /opt/vintage-radio/web",
"Open radio.sami (or your configured subdomain)",
"Press the PWR knob, drag the dial or click a station card",
"Cycle the MODE knob to filter by genre (ALL / AMBIENT / ROCK / MIXED)",
"To add stations, edit /opt/vintage-radio/web/stations.json on the host and restart the container"
],
tags: ["radio", "music", "streaming", "audio", "vintage", "retro", "media"]
},
"airsonic": {
name: "Airsonic Advanced",
description: "Free web-based media streamer",