Development

SoundStorm is built on two machines by two coding sessions that never see each other's memory, against one branch, with one real check per change. This section covers how that works, how things are tested, and the traps that cost real time.

At a glance

Server and web appGo and plain JavaScript, built and deployed on the Windows PC with Docker Compose
AndroidKotlin, built on the PC with Gradle, published as GitHub pre-releases
iPhone and Apple TVSwift, built on the Mac with Xcode, shipped through TestFlight
Branchesmain only
CIgofmt, vet, tests, an ACME rehearsal, compose and image checks, then a multi-arch image
Shared memoryCLAUDE.md, the working notes both machines read

Everyday commands

go test ./...                                  # or in a container, see Testing
docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d --build soundstorm
curl localhost:8099/healthz
docker compose logs -f soundstorm              # watch provisioning
docker compose down -v                         # reset everything, credentials included
cd android && ./gradlew assembleDebug           # the Android app
open ios/SoundStorm.xcodeproj                  # the iPhone and Apple TV apps

In this section

How it is developedTwo machines, one branch and the bug that taught it, the start and end of every session, releases. TestingTests in a container, throwaway stacks, browser checks, real media - and checks that cannot see the failure. GotchasJellyfin, Audiobookshelf, PowerShell, Docker Desktop, the CSP, service workers and phones.