Answer
How the product sounds and animates today, and how Scoop's paper and breath sounds, voice and motion timings would sit over it if Param picks this direction.
Today
Sound in the live product
| Fact | Detail | Source |
|---|---|---|
| Cues | 29 designed cues rendered offline with earshot into public/sfx/<cue>.mp3 |
brew/tools/sfx/cues.json:1; memory brew-sounds |
| Levels | Set by loudness through a small speaker, from about minus 38 LUFS for the ratchet to minus 23 for live and win. Never peak normalised | brew/tools/sfx/cues.json:6; brew/tools/sfx/cues.json:23 |
| Default | On, unless the person switched Sounds off in the account menu | brew/public/app.js:1470; brew/public/app.js:2936 |
| Fallback | A small synth plays a cue whose file has not loaded | brew/public/app.js:1481; brew/public/app.js:1525 |
| Loading | Files load on the first tap or key, or 12 s after the page loads | brew/public/app.js:1522 |
| One tap, one sound | Each cue has a gap before it can repeat. Background cues give way to any cue just played | brew/public/app.js:1523 |
| Silent screens | Screens that change by themselves stay silent, only taps make sound | brew/public/app.js:1529; memory brew-sounds |
| Haptics | A light vibration with some cues on screens up to 760 px wide | brew/public/app.js:1526 |
| Copy | Any copy to the clipboard plays the tick | brew/public/app.js:1532 |
Where today's cues play
| Moment | Cue | Source |
|---|---|---|
| Heart, unheart | heart, unheart | brew/public/app.js:1548 |
| Ship, share to a person | live | brew/public/app.js:1536 |
| Copy a brief or hand off | tick | brew/public/app.js:1538 |
| Pick a tile or a product in onboarding | select | brew/public/app.js:1539; memory brew-sounds |
| AI makes or fixes something | bubble | brew/public/app.js:1540 |
| Switch versions | step | brew/public/app.js:1541 |
| Open a jam or a story | pop | brew/public/app.js:1542; brew/public/app.js:1545 |
| Decline, discard, remove a product | sweep | brew/public/app.js:1536; brew/public/app.js:1543 |
| Approve | approve | brew/public/app.js:1544 |
| Build my feed, share and send in chat | send | brew/public/app.js:1537; brew/public/app.js:1558 |
| A final or long job ready, a tool connected | ready, connected | brew/public/app.js:1507; brew/public/app.js:1510 |
| Drag a Deck column | ratchet | brew/public/app.js:1556 |
Motion in the live product
- Every button that waits on the server shows one loader, never flashing on fast answers. brew/public/loader.js:1; memory brew-loader
- The loader and stories stop animating under reduced motion. brew/public/feed-system.css:157
Scoop's sound and motion, in the audition files
| Part | Detail | Source |
|---|---|---|
| Sonic logo | Paws through crisp paper for one second, then two breathy notes rising, about 240 then 380 hertz. 1.9 seconds | brand-directions/raccoon/motion.html v0 |
| Heart cue | One crisp pencil tick, 0.6 s | brand-directions/raccoon/motion.html v0 |
| Ready cue | A notepad page flipping with a snap, 0.8 s | brand-directions/raccoon/motion.html v0 |
| Hand off cue | A folded note sliding across wood, a tap, 1.0 s | brand-directions/raccoon/motion.html v0 |
| Error cue | A soft stumble and fluttering papers, 1.2 s | brand-directions/raccoon/motion.html v0 |
| Caught up cue | A notepad closing, a content exhale, 1.2 s | brand-directions/raccoon/motion.html v0 |
| How made | ElevenLabs sound effects from sound only prompts, levelled to about minus 16 LUFS, recipe in snd/make.py |
brand-directions/raccoon/motion.html v0; brand-directions/raccoon/snd/sound-log.json |
| Voice | Rummage voice: thirties, low, a little husky, quick, conspiratorial, kept as option 2 of 3 | brand-directions/raccoon/snd/voice.json |
| Recorded lines | Tagline, paste, read, Monday drop, heart, hand off, caught up, error, tally, payoff | brand-directions/raccoon/snd/sound-log.json |
| Sound rules | Off by default, paper and breath only, one cue per action, the gasp means good news, cues under two seconds, logo under three | brand-directions/raccoon/motion.html v0 |
| Idle | Rigged sway and psst 3.6 s, tail flick 4.6 s, eye dart 6.2 s, blink 5.2 s | brand-directions/raccoon/character.html c7 |
| React | Squash 1.06 by 0.92, jump 9 percent of height, 550 ms, overshoot | brand-directions/raccoon/motion.html v1 |
| Celebrate | Two hops of 12 percent height with a 4 degree tilt, 1.4 s in all | brand-directions/raccoon/motion.html v1 |
| Wait | Scribble pose, sway 1.1 s. Bob for loads over 3 s, 2.6 s loop | brand-directions/raccoon/motion.html v1 |
| Product skin motion | Sway and hop keyframes inside a no preference reduced motion query | brand-directions/raccoon/kit-skin.js:32 |
The two systems level sound differently: today's cues by small speaker loudness, Scoop's files to about minus 16 LUFS. They have not been compared on the same device. memory brew-sounds; brand-directions/raccoon/motion.html v0
Tomorrow
Sound
- v1, New: Scoop's sonic logo plays on the stage, the home page, reels and the first read reveal, never on a routine tap.
- v1, Changes: five of today's cues are replaced by Scoop's: heart becomes the pencil tick, ready becomes the page flip, the hand off tick becomes the note slide, error becomes the soft stumble.
- v1, New: the caught up cue, a notepad closing, plays when the week's picks are all seen. Caught up does not exist in the product today.
- v1, Stays: the small interface cues such as step, select, toggle and sheet, re-rendered in the paper family so nothing sounds electronic.
- v1, Stays: one tap, one sound, silent screens, the synth fallback and the haptics rule.
- v1, Changes: sound is off on a first visit, with one toggle in Settings. Today it is on by default. Param decides, see Open.
- v1, New: the gasp never plays on an error or a limit.
- v1, New: no music bed in the product.
- v1, New: voice lines in the product only behind a setting that starts off, and only for the read and caught up. Never on the brief page, support, privacy or apologies.
- v1, Changes: every cue levelled again by small speaker loudness with today's build check, so Scoop's files and today's cues sit at one level.
Moment lines
| Moment | Line | Version |
|---|---|---|
| Paste | Pop your store link in. For your read, I only look at what's public. | v1, New |
| Read | Going through everything people say about you. Give me three or four minutes. | v1, New |
| Monday drop | Fresh week, fresh gossip. Five picks, and the second one is spicy. | v1, New |
| Heart | Ooh, you liked that one. Noted. I will dig up more like it. | v1, New |
| Hand off | Copied. Slip it to whoever ships it. My lips are sealed. | v1, New |
| Caught up | That is all the gossip for this week. Back Monday with more. | v1, New |
| Error | Oops. Tripped over my own tail. Give me a second and try that again. | v1, New |
Motion
| Product event | Slot and size | Motion | Cue | Version |
|---|---|---|---|---|
| Read starts | Reading your store, 120 to 180 px | Scribble pose, slow sway | Rummage, once | v1, New |
| Read done, the reveal | 160 px | React with the gasp | Ready, then the gasp | v1, New |
| Monday picks land | Today corner, 40 to 56 px | Peek in, one hop | Ready | v1, New |
| Heart | Today corner | React | Heart | v1, New |
| Brief copied or sent to our team | Celebration, 120 px | Celebrate | Hand off | v1, New |
| Error or cap | 96 px | Oops pose, no jump | Error | v1, New |
| Caught up | Celebration, 120 px | Sleepy pose, still | Caught up | v1, New |
- v1, New: motion is whole body only, poses are swapped, never cut apart, except the rig in
char.svg. - v1, New: one reaction at a time, a new one cancels the old. Nothing animates while the person types.
- v1, New: under reduced motion nothing animates and poses still swap.
- v1, Stays: the one loader on every wait.
- v2, New: a cue for a post that went out at its scheduled time, from the paper family, after a person said yes.
- v3, New: a cue for How it went, the newspaper unfolding, only when results land.
Reels
- v1, New: three timing templates, the reveal, the list and the wind down, captioned in Gloock, one Kalam aside per reel, voice on top, cues under the voice.
- v1, Stays: the brand's own six second videos from Make it never carry Scoop or its sounds.
How we do it
- Render or swap a product cue through the existing pipeline, never by hand:
cd /Users/param/Documents/ChatGPT/brew && tools/sfx/build.sh
- Level every cue by small speaker loudness. The build fails a cue that loses more than 6 dB through a small speaker.
- Test by recording every sound start in the browser and walking the real app: feed, story, studio, jam, onboarding, connect, errors.
- New Scoop sound effects come from ElevenLabs with prompts that describe sound only, no music and no words, logged in
raccoon/snd/sound-log.json. - New voice lines use the Rummage voice, one line per recording, under six seconds. Lean in on the second half, drop the pitch for anything about trust, keep errors quick and sheepish.
- Put every animation inside a no preference reduced motion query.
Numbers
| Metric | Definition | Where measured | Status |
|---|---|---|---|
| Cue count | Designed cue files in the product | public/sfx on brew origin/main, 29 today |
Exists |
| Level spread | Gap between the loudest and quietest cue through a small speaker | tools/sfx/build.sh output |
Proposed |
| Sound on rate | Share of people with sound on after their first week | Product analytics, not built | Proposed |
| Blind sound test | Share of founders who pick Scoop's ready cue as your week is ready, with no pictures | Founder test from book f-1, not run yet | Proposed |
Open
- Sound on or off by default? Today it is on. Scoop's rules say off. Proposal: off on a first visit, the sonic logo plays once on the reveal only after the person taps to hear it.
- Do voice lines ship in the product at all in v1? Proposal: no, voice stays in marketing and the stage until a setting exists.
- Which loudness rule wins, minus 16 LUFS or today's small speaker levels? Proposal: today's small speaker rule, since it was built to fix cues that did not play on phones.