SETUP · 02
The easy way in.
Two hands-off paths to a running stack. The interactive wizard asks a few questions and does the rest; the agent skill does the same from one sentence in your AI coding tool. Either one ends with the radio on the air.
PATH A · INTERACTIVE WIZARD
Answer a few questions, get a running stack.
A terminal wizard that writes the env files, brings up the right compose file, and renders the station jingles. Requires Node 20+ and Docker.
git clone https://github.com/perminder-klair/subwave.git
cd subwave
npm install
npm run setupIts first question is dev or production? Then it prompts for Navidrome and Ollama, runs scripts/setup.sh, boots the stack, and generates jingles.
- Dev — uses
docker-compose.yml, keeps state in./state, and optionally launchesnext devon:7700. - Production — uses
docker-compose.prod.ymlwith--build, Caddy on:4800, state in./state(or whereverSTATE_DIRpoints). Re-run with sudo if the state directory isn't writable.
Existing env values are kept unless you explicitly ask to reconfigure — so the wizard doubles as a way to bring an existing stack back up.
PATH B · AI CODING AGENT
One sentence in your coding agent.
The repo ships an agent skill that handles setup, deploy, and update — it pings Navidrome and Ollama, boots the stack, generates jingles, and verifies the stream is on-air. It works with Claude Code, Codex, Cursor, or anything else that reads AGENTS.md.
Clone the repo, open your agent in it, and say one of:
git clone https://github.com/perminder-klair/subwave.git
cd subwave
# then in your agent of choice, ask:
# "set up subwave"
# "deploy subwave"
# "pull and restart"On updates the same skill detects which services actually changed and rebuilds only those. Liquidsoap and the Controller COPY their source at build time, so a plain docker compose restart silently runs stale code — the skill won't make that mistake.