Cut a NEW Android build of the SUB/WAVE app (the Expo project in app/) in the cloud with EAS and ship it — to the live Google Play Store, or as a direct install link for testers. Use this skill whenever the user wants to "release the android app", "ship the android app", "push a new Play Store build", "build a new…
Get the SUB/WAVE mobile app (the Expo project in app/) onto a physical Android phone and confirm it runs. Use this skill whenever the user wants to install, reinstall, sideload, run, or load the app on a connected Android device or "their pixel" — by any phrasing. Covers both modes: (1) dev/live — run over USB/cable…
Cut a NEW iOS build of the SUB/WAVE app (the Expo project in app/) and ship it via EAS — to TestFlight, and on to the live App Store. The app is LIVE in production on the App Store, so a release is build+submit (one command) then a manual "promote to production" step in App Store Connect. Use this skill whenever the…
Ship a JS/TS-only change to the already-installed SUB/WAVE app (the Expo project in app/) over-the-air via EAS Update — no new TestFlight/Play build, no store round-trip. Use this skill whenever the user wants to "send an OTA update", "push this over the air", "ship these changes without a new build", "eas update"…
Start or stop the SUB/WAVE radio stack (a personal internet radio station) in dev or production mode — no builds, no rebuilds, no config rendering. Use this skill any time the user wants to "start subwave", "stop subwave", "bring up the radio", "shut down the radio", "boot subwave in dev/prod", "turn subwave on/off"…
Set up, deploy, or update SUB/WAVE (a personal internet radio station). On a fresh checkout, runs scripts/setup.sh, prompts for Navidrome + Ollama credentials, brings the stack up, and generates jingles. On an already-running stack, pulls the latest, rebuilds only the Docker services whose code actually changed…
Draft a Discord release announcement for SUB/WAVE from a release PR, tag, or version number. Use this skill whenever the user wants to "write a Discord announcement / post", "announce the release on Discord", "draft a release announcement", "tell the Discord about vX.Y.Z", "post the release to the community", or hands…
Benchmark and compare LLM models for SUB/WAVE's on-air calls — track picks, segments, listener requests, DJ scripts, banter, and programme beats — in both candidate-pool and agent modes, using controller/scripts/llm-bench (the matrix harness) or the legacy picker-only controller/scripts/picker-test.mjs. Use this skill…
Analyse the SUB/WAVE radio station's unified event log (state/logs/events-.jsonl) and give the operator a diagnostic report on how the station is behaving — Navidrome/ Subsonic API call patterns, the DJ picker's behaviour and music-library coverage, and runtime health anomalies. Use this skill whenever the user wants…
Write a news post for the SUB/WAVE "Dispatches" page, a short human-friendly tutorial about a feature, fix, or release. Use this skill whenever the user wants to "write a news post / dispatch / news article", "announce a feature on the news page", "add a changelog entry to the site", "post an update about ", "write…
Open a release pull request from develop to main for SUB/WAVE, and keep develop from drifting behind main. Summarises the commits queued on develop, groups them by conventional-commit type, opens the PR via gh, and — once the release lands — back-merges main → develop so the release-please version bump and CHANGELOG…
Stage a SUB/WAVE git worktree so the dev stack can run from it, then start it. A git worktree only checks out tracked files — the dev stack also needs gitignored files (controller/.env, web/.env.local, docker/.env, web/nodemodules, and a state/ directory) that this skill copies or scaffolds from the main working tree.…
Drive a controller/admin-UI change end-to-end from a worktree without touching the live station — isolated controller on a spare port + temp STATEDIR, worktree Next dev server, Playwright against /admin.
TypeScript Execute (tsx): Node.js enhanced with esbuild to run TypeScript & ESM files. Runs locally from the tsx npm package. Needs 1 environment variable to run.
Instructions for perminder-klair/subwave, covering claude.md, what this is, where the detail lives, common commands and --- dev (mac smoke test, requires git clone) --.
If the album on air is hitting a round-number anniversary this year, note it like a presenter spotting a date in the prep notes — one short sentence on the date itself. Trust the year you're given; don't pad it with claims about what the album "meant" or how it charted. Never gushing, never "classic".
One oddly-specific moment of interest — ideally a real "on this day" beat from the tool (any year), dropped in like you just remembered it. If the tool has nothing, offer a light, true observation tied to the date or season rather than a hard "fact" you can't vouch for — and if you'd be guessing, skip it. Never say…
If the on-air artist has a track in the library that's gone cold (not played in a while), tease it like there's more worth digging out of the crate — one sentence, in passing, without promising when it'll play. Never name the track unless the tool surfaced exactly one, and don't characterise how it sounds.
Glance at one fresh headline and drop it into a single sentence in your own words — a casual, half-distracted aside between songs, never an anchor or newsreader voice, never the headline read verbatim, no editorialising, no "in other news". Steer to the lighter, cultural, or human-interest item; if everything on the…
One concrete, verifiable detail about the exact track on air — who produced it, a sample it's built on, the B-side, where it charted, the story behind it — worked into a single conversational line. Use only what the search tool actually surfaces; if it returns nothing solid, say nothing. Never guess, never "I think"…
A quick, in-character read on the weather right now — one or two sentences that fold the conditions into the moment, never a forecast or a temperature readout. Only air it when the weather has genuinely turned; don't narrate "still grey out". Never open with "here's your weather" or "weather check".
Work one genuine, recent thing the on-air artist is up to — a new release, a tour, something in the press this week — into a single conversational line. Use only what the search returned; if it surfaced nothing solid or nothing new, say nothing. No "I read online", no URLs, no list, no embellishing beyond the facts.