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 app | Go and plain JavaScript, built and deployed on the Windows PC with Docker Compose |
|---|---|
| Android | Kotlin, built on the PC with Gradle, published as GitHub pre-releases |
| iPhone and Apple TV | Swift, built on the Mac with Xcode, shipped through TestFlight |
| Branches | main only |
| CI | gofmt, vet, tests, an ACME rehearsal, compose and image checks, then a multi-arch image |
| Shared memory | CLAUDE.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.