Every state keeps a next move.
The builder is shown here in the states it actually reaches — empty, provider dropped, and unsaved — on the real surface, each pairing its condition with a clear recovery action. No dead ends, no silent failures.
Empty class
A new class invites the first track.
Draft
Spotify
connected
Untitled class
0 tracks
0:00 total
— avg BPM
0 cues
No tracks yet
Start with a track. Shape the room from there.
Search your library to find the first phrase, or import a playlist. The class shape appears as soon as the first track lands.
Provider disconnected
A dropped link never dead-ends.
SoundCloud
disconnected
Your music link dropped. Reconnect to keep building — your class
structure is still here.
03
The Marble Has a Beat
SoundCloud
unavailable
132BPM
04
Drop In
Spotify
138BPM
Unsaved changes
Edits are held, then confirmed.
Changes waiting to sync
On save, a small confident confirmation reads “Class shape saved.” — no banner, no interruption to the build.
Input error
A bad value says what to fix.
The error pairs an icon, an ember border, and a plain message — color never carries the failure alone.