What the product plays and how it moves today, and the sound and motion Ocho brings tomorrow: a sonic logo of a suction cup letting go, five wet and bubbly cues mapped onto today's moments, a rare voice, and one body that bobs, squashes and hops in fixed slots, all off for reduced motion.
Today
What the product plays
29 designed cues rendered offline with earshot from tools/sfx/cues.json into public/sfx, one mp3 each. brew/tools/sfx/cues.json:1-32; memory brew-sounds
Each cue is levelled by loudness through a small speaker, from minus 38 for ratchet to minus 23 for live and win, never peak normalised. brew/tools/sfx/cues.json:2,6,23,24; memory brew-sounds
A synthesised version of every cue stays as the fallback when a file is missing. brew/public/app.js:1481-1513,1524
Sound is on unless someone turns it off with the Sounds switch in the account menu, saved per brand in the browser. brew/public/app.js:1470,2939
The files load on the first tap or key, or 12 seconds after the page loads. brew/public/app.js:1522
One tap is one sound. Background cues give way to any cue played in the last 150 ms, and screens that change by themselves stay silent. brew/public/app.js:1523-1524,1528-1529; memory brew-sounds
Repeats get a small pitch drift so they never sound stamped. brew/public/app.js:1525
Phones up to 760 pixels wide get a light vibration with some cues. brew/public/app.js:1526
Nothing plays while the tab is hidden. brew/public/app.js:1524
When the main cues play
Cue
Moment today
heart, unheart
Heart a card, and undo it
brew/public/app.js:1548
tick
Anything copied to the clipboard, including a brief
brew/public/app.js:1532
send
Sharing, a jam pick, the store link form
brew/public/app.js:1536-1537,1558
live
Shipping from the jam, share targets
brew/public/app.js:1536
ready
A creative or a long job is ready
brew/public/app.js:4684,4974
error
A make that failed
brew/public/app.js:4684,4995
win
Onboarding finished
brew/public/app.js:889
approve
An approval, and turning sound back on
brew/public/app.js:1544,2939
boop
Tapping an agent face, which squishes
brew/public/app.js:1551
Motion today
Every tap that waits on the server shows one loader on the button, after 140 ms and for at least 380 ms. brew/public/loader.js:1-8; memory brew-loader
No character moves in the product. brand-directions/BRIEF.md section 3.8
Ocho's sound, as made
File
Name
Moment
Length
What you hear
snd/logo.mp3
Sonic logo
End cards, the stage, first open
1.8 s
A suction cup lets go of glass, a soft round pop, a few bubbles. An arm coming free
brand-directions/octopus/motion.html v0; brand-directions/octopus/snd/sound-log.json logo
snd/cue-heart.mp3
Stick it
Heart, More like this
0.8 s
A squishy suction pop and one bright rising bubble
brand-directions/octopus/motion.html v0
snd/cue-ready.mp3
Arms full
Read finished, Monday drop
1.2 s
Three wet blips rising in pitch
brand-directions/octopus/motion.html v0
snd/cue-handoff.mp3
Free an arm
Brief copied
1.2 s
A paper slide, then a soft suction release
brand-directions/octopus/motion.html v0
snd/cue-error.mp3
Knot
Error, read cap
1.0 s
A comic rubbery squeak and a small blub. Never an alarm
brand-directions/octopus/motion.html v0
snd/cue-caught.mp3
Arms free
Caught up
1.8 s
A slow calm stream of bubbles ending in one low blip
brand-directions/octopus/motion.html v0
All made in ElevenLabs as sound effects, no music beds, no words, levelled to about minus 16 LUFS. brand-directions/octopus/motion.html v0; brand-directions/octopus/brand.html b5
The voice, Ocho voice, was designed in ElevenLabs: an adult in its thirties, bright and quick, slightly too fast, warm, a little breathless, mid pitch, never shrill. Option one of three was kept, the quickest read. brand-directions/octopus/snd/voice.json; brand-directions/octopus/character.html c6
Eight voice files exist: the tagline and seven moment lines, paste, read, drop, heart, handoff, caught and error. brand-directions/octopus/system.md s4; brand-directions/octopus/snd listing
The heart line was recorded again without a fixed number of new ideas, and the read line again to say about three to four minutes. brand-directions/octopus/snd/sound-log.json line-heart 02:57:51, line-read 09:05:52; brand-directions/book/content/f.js:1024
Ocho's motion, as made
State
Motion
Loops
Idle
Bob 5 pixels, lean 1.2 degrees, 3.2 s, pivot low on the body
Squash to 107 by 91, spring back in 280 ms, overshoot 1.06
No
brand-directions/octopus/character.html c7
Celebrate
Celebration pose, hop 12 pixels, 950 ms
Once
brand-directions/octopus/kit-skin.js motion
Wait
Reading pose, sway 2.5 degrees, 1.2 s
Until done
brand-directions/octopus/kit-skin.js motion
Free an arm
Hand off pose drifts toward the person taking the brief, 3 s
Once
brand-directions/octopus/motion.html v1
Knot
Knot pose wobbles twice, 2.4 s
Once
brand-directions/octopus/kit-skin.js motion
Frantic
0.32 s jitter, 3 degrees
Marketing and the stage only
brand-directions/octopus/character.html c7
Every animation sits behind the reduced motion check, which holds Ocho still and swaps poses only. brand-directions/octopus/kit-skin.js motion; brand-directions/octopus/character.html c7
Tomorrow
Sound
v1 Changes: sound starts off, and plays only after someone turns it on in Settings. Today it starts on. brand-directions/octopus/brand.html b5
v1 Stays: the 29 crisp cues for ordinary taps, the loudness levelling, the synth fallback and one tap one sound.
v1 Changes: five moments take Ocho's cues instead of today's: heart takes Stick it, a finished read takes Arms full, a copied brief takes Free an arm, an error or the read cap takes Knot, caught up takes Arms free.
v1 New: Ocho's cues are levelled to the same small speaker loudness as today's set before they ship, since the books level them to about minus 16 LUFS on a different rule.
v1 New: no sound on a page opened from a brief link, ever.
v1 Stays: no sound for loss. There is no sound for a missed week.
v1 New: the voice plays only in marketing, the stage and onboarding once. The product speaks in text, and the voice never reads numbers.
v2 New: a cue for a post that goes out after a yes, made by the new cue checklist below, never an alarm.
v3 New: a cue for How it went, if a moment needs one. Reuse first.
Motion
v1 New: Ocho moves only in its slots, one action at a time, and never travels between slots to point at a button.
v1 New, by slot:
Today corner, 40 to 56 pixels: fades in, idles, a tap reacts.
Reading your store, 120 to 180: rises 12 units over 400 ms, then waits.
The reveal, 160: squash in over 280 ms.
Empty states, 96: a slower 4 s sway.
Celebrations, 120: pops in over 300 ms and leaves after 2.5 s or any tap.
Errors and cap, 96: knot once, stays until the way out is tapped.
Brief page, 32: still.
v1 Stays: today's button loader stays for every server wait.
v4 Stays: frantic motion never enters the product.
How we do it
Add a cue only for a new moment, and reuse an old cue first.
Describe sound only, wet, rubbery, bubbly or paper, with no music and no voice, under two seconds, the sonic logo under three.
Never an alarm, a buzzer or a loss sound. Test on a phone speaker at half volume.
For the product, add the cue to cues.json and render it with the team's build, then check it loses no more than 6 dB through a small speaker:
cd /Users/param/Documents/ChatGPT/brew && tools/sfx/build.sh
New voice lines use Ocho voice, stay under eight seconds, read aloud first, and level to the same loudness as the rest.
Log every generated file in brand-directions/octopus/snd/sound-log.json.
Every animation goes inside the reduced motion media query.
Numbers
Metric
Definition
Where measured
Status
Cue loudness spread
Gap between the quietest and loudest cue through a small speaker
The earshot build check in tools/sfx
Today minus 38 to minus 23 for the 29 cues
Sound on rate
Share of active brands with sound switched on
The Sounds switch state
Proposed, not tracked
Blind sound match
Founders who pick Arms full as your week is ready with no picture
The blind sound test
Proposed, not run
Open
Should sound start off, as Ocho's books say, or stay on as the product does today? Proposal: start off, and offer it once after the first heart.
Do Ocho's five cues replace today's heart, ready, tick, error and win, or play alongside them? Proposal: replace them on those five moments only and keep the crisp set for everything else.
Should the voice ever play inside the product? Proposal: once, on the first read, then text only.