VOL. I  ·  NO. 
SUB/WAVE
ON AIR

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 · STANDALONE CLI

One curl, two Enters, on the air.

Drops a subwave binary on your host (no Node required), then chains straight into init and start. By the time the installer finishes, Docker is up and the controller is reporting on-air — setup is the only step left and it covers configuration, not lifecycle.

TWO COMMANDS

curl -fsSL https://cli.getsubwave.com | sh
subwave setup

The installer prompts Run subwave init now? — say yes and init asks where to install (default ~/subwave), deployment shape (prod / prod-byo), and admin credentials. It ends with Bring the stack up now? — say yes again and subwave start runs silently against the env init just picked. After that, setup prompts for Navidrome + LLM + DJ persona and renders jingles. Then subwave start / stop / logs / doctor run the station from anywhere on your shell.

DEV

  • docker-compose.dev.yml
  • state in ./state
  • optionally launches next dev on :7700

PRODUCTION

  • docker-compose.yml with --build
  • Caddy on :7700
  • state in ./state (or STATE_DIR) — re-run with sudo if it isn't writable
SAFE TO RE-RUN

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"
WHY USE THE SKILL

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.

ONCE IT'S ON THE AIR

Run the station from the CLI.

The setup wizard is one screen of the operator console. Run npm start from the repo any time to open it — a menu to check the stack, run a diagnostic sweep, tail logs, restart a service, or open the terminal player.

npm start
LISTEN FROM THE TERMINAL

The console's play option launches the TUI player — now-playing, the timeline, the live booth feed, and track requests, right in your terminal. It needs mpv or ffplay for audio, and runs as a read-only dashboard without them.