SETUP · 05
Updates & help.
Pulling a new version, rebuilding only what changed, and what to check when the stream goes quiet. Liquidsoap and the Controller COPY source at build time, so docker compose restart does not pick up code changes — you need up -d --build.
KEEPING IT UP TO DATE
Rebuild only what changed.
| If this changed | Rebuild |
|---|---|
controller/src/** | controller |
liquidsoap/radio.liq | liquidsoap |
web/** | web (prod) · hot-reload (dev) |
docker/Caddyfile | just restart caddy (mounted) |
docker/docker-compose*.yml | up -d (compose decides) |
| README / TODO / docs | nothing |
Typical manual deploy:
git pull --ff-only
# rebuild only what changed (example: controller + web)
docker compose -f docker/docker-compose.prod.yml up -d --build controller web
# then verify
./scripts/health-check.shThe subwave-deploy skill at .claude/skills/subwave-deploy/ automates the whole "pull, detect what changed, rebuild only the affected services, verify health" loop. Open a Claude Code session in the repo and say "deploy subwave" or "pull and restart".
WHEN THINGS GO WRONG
Logs are the source of truth.
- Controller logs —
docker compose -f docker/docker-compose.prod.yml logs -f controller - Liquidsoap logs —
docker compose -f docker/docker-compose.prod.yml logs -f liquidsoap - Built-in diagnostics — open /admin/debug for a live snapshot of every state file, recent LLM calls, Icecast status, and the most recent 100 lines of Liquidsoap.
- Source code — github.com/perminder-klair/subwave ↗ — file an issue, or read the CLAUDE.md for architecture notes.
RUNNING THE STATION
Now shape the DJ.
Installation is the start. Tuning the personas, scheduling shows, choosing the LLM provider, and managing jingles all happen in the admin console — that's covered in the manual's Admin & Settings page.