FetchBuzzScoopOchoSeeti
Snapshots

Fetch squeaks, ruffs and bounces, then stays quiet until asked

Being built
  • Sonic logo: two toy squeaks, a ruff, and a ball bouncing twice.
  • Five short cues and seven voice lines sit on the 29 cues the product already plays.
  • Sound starts off, and no sad dog sounds, ever. No sound for a missed week.
  • One cue per moment, never stacked. Celebrations are a hop, never confetti.
  • Fetch's files are not yet levelled by the product's small speaker rule.
29cues the product already plays
Your call

Sound off by default, with Fetch's cues replacing today's heart, ready and error?

Brand · 4.12 · Fetch

Sound and motion, Fetch

DraftLast checked 2026-10-26Owner Param

Answer

Fetch sounds like a dog toy and a yard: a squeak, a ruff and two ball bounces as the sonic logo, five short cues and seven voice lines, mapped onto the 29 cues the product already plays, with sound off until you turn it on.

Today

Sound in the live product

Part What it does Source
Cues 29 designed cues rendered offline with earshot from cues.json into public/sfx brew/tools/sfx/cues.json; memory brew-sounds
Levels Set by loudness through a small speaker, from minus 23 for live, win and ready down to minus 38 for ratchet. Never peak normalised brew/tools/sfx/cues.json; memory brew-sounds
Engine CUES and sound in app.js. A synth version of every cue plays if its file has not loaded brew/public/app.js:1481, 1517-1524
Loading Files load after the first tap or key, or 12 s after load brew/public/app.js:1521
Default On, unless the person switched Sounds off in the account menu brew/public/app.js:1470, 2936-2939
One tap, one sound Background cues give way to a cue just played. Screens that change by themselves stay silent brew/public/app.js:1523-1530
Haptics A light vibration with some cues on screens 760 px or narrower brew/public/app.js:1524
Copy Every clipboard copy plays tick brew/public/app.js:1532
Heart heart, and unheart when undone brew/public/app.js:1548
Share and ship live on ship and share, send on pick and share, tick on copy and hand off brew/public/app.js:1536-1545
Error Two soft boops brew/tools/sfx/cues.json
Waiting One loader on every wait over 140 ms, shown at least 380 ms brew/public/loader.js:7; memory brew-loader

Fetch's sound, in the direction files

Sound What it is Length Plays when File Source
Sonic logo Two rubber toy squeaks, one happy ruff, a tennis ball bouncing twice on wood 2.2 s Start of every reel and the home page, nothing else dog/snd/logo.mp3 brand-directions/dog/motion.html v0
Heart One bright toy squeak 0.7 s You heart a pick dog/snd/cue-heart.mp3 brand-directions/dog/motion.html v0
Ready A ball bouncing twice, a tag jingle 1.3 s The read finishes dog/snd/cue-ready.mp3 brand-directions/dog/motion.html v0
Hand off A card dropped on wood, two tail thumps 1.1 s A brief is copied, or our team gets it dog/snd/cue-handoff.mp3 brand-directions/dog/motion.html v0
Error One small puzzled boof 1.0 s Something did not work dog/snd/cue-error.mp3 brand-directions/dog/motion.html v0
Caught up A tag jingle settling into quiet 1.6 s The week is done dog/snd/cue-caught.mp3 brand-directions/dog/motion.html v0
  • All six sounds were made with ElevenLabs sound effects from written prompts on 25 October brand-directions/dog/snd/sound-log.json
  • The book says every file is levelled to about minus 16 loudness units. We have not measured it against the product's small speaker rule brand-directions/book/content/f.js f-5.cues

Fetch's voice

Moment Line File Source
Paste Ooh. Is that your store? Throw it. I'll be right back with this week's ideas. dog/snd/line-paste.mp3 brand-directions/dog/snd/sound-log.json
Reading Sniffing round your store, your reviews, your ads, and what the AI answers say about you. About three to four minutes. Good smells so far. dog/snd/line-read.mp3 brand-directions/dog/snd/sound-log.json
The drop Monday. Five picks, dropped right at your feet, most with a first draft. Also my ball. Ignore the ball. dog/snd/line-drop.mp3 brand-directions/dog/snd/sound-log.json
Heart You liked that one? Say no more. I'll fetch more like it. dog/snd/line-heart.mp3 brand-directions/dog/snd/sound-log.json
Hand it off Drop it. Brief copied, link ready. You pass it on, and I go fetch the next one. dog/snd/line-handoff.mp3 brand-directions/dog/snd/sound-log.json
Caught up That's the week. Every pick seen. I'm keeping the ball now. See you Monday. dog/snd/line-caught.mp3 brand-directions/dog/snd/sound-log.json
Error Oops. Lost the scent on that one. Your work is safe. Throw it again? dog/snd/line-error.mp3 brand-directions/dog/snd/sound-log.json
Tagline This week's ideas, fetched. dog/snd/line-tagline.mp3 brand-directions/dog/snd/sound-log.json
  • The voice is an adult in their late twenties, bright and bouncy, kept from three options and saved as Fetch voice brand-directions/dog/snd/voice.json

Fetch's motion

State Motion Timing Source
Idle Bob 4 px, tilt 1 degree, tail wags minus 10 to 8 degrees Bob 2.8 s ease in out, tail 0.45 s alternate brand-directions/dog/system.md s1
React One head tilt and back, ears follow by 60 ms 280 ms in, 400 ms hold, 280 ms out brand-directions/dog/character.html c7
Celebrate One hop up 14 px with a stretch, a squash on landing 1 s, once in the product brand-directions/dog/kit-skin.js motion
Wait The sniff, a small nose dip while the read runs 1.4 s loop in the kit brand-directions/dog/kit-skin.js motion
Error Three small beats of head shake, then still 2.4 s, once brand-directions/dog/kit-skin.js motion
Caught up Breathing, 2.5 percent rise and fall 4 s brand-directions/dog/motion.html v1
Reduced motion Every animation sits inside a prefers reduced motion check Always brand-directions/dog/kit-skin.js motion

Tomorrow

Item Version Tag
Sound starts off. It plays only after a person turns it on in Settings, and never on a page opened from a brief link v1 Changes
The 29 product cues stay as the base layer for taps, sheets and switches v1 Stays
Fetch's heart squeak replaces today's heart cue v1 Changes
Fetch's ready cue plays when the read finishes, in place of today's ready ding v1 Changes
Fetch's hand off cue plays when a brief is copied, in place of tick for that one copy v1 Changes
Fetch's puzzled boof replaces today's error boops v1 Changes
Caught up gets its first sound, the tag jingle, with the caught up screen v1 New
The sonic logo plays only on reels and the home page, never in the product v1 New
One cue per moment, never stacked, never looped. The later moment wins v1 Stays
No growls, whimpers, yelps or any sad dog sound. No sound for a missed week v1 New
The voice reads only the seven lines and the tagline, in onboarding once, the stage and marketing. Never numbers v1 New
Fetch's cues are levelled by the same small speaker loudness rule as the product cues before they ship v1 Changes
Motion: one motion at a time, then rest. Nothing moves while you tap, type, scroll or read. Celebrations are a hop, never confetti v1 New
A sound for work carried to a channel after your yes v2 New
A sound for a result coming back, never for a loss v3 New

Reel timing

Reel Beats Source
6 s post 0 to 1 sonic logo and head tilt, 1 to 4 one line and one pose, 4 to 6 wordmark slot and tagline brand-directions/dog/motion.html v2
15 s tip 0 to 2 hook with Fetch distracted, 2 to 10 the sample finding with one source chip, 10 to 13 the drop and hand off cue, 13 to 15 ask for a read brand-directions/dog/motion.html v2
30 s story 0 to 2 sonic logo, 2 to 8 throw it, 8 to 16 sniffing round and ready, 16 to 24 the drop with the ball, 24 to 30 tagline and voice brand-directions/dog/motion.html v2

Cut on the two ball bounces. One voice line per reel at most.

How we do it

  1. Add a Fetch cue as a file in brew public/sfx and a name in CUES, keeping the synth fallback.
  2. Level it by small speaker loudness, never by peak. The build fails a cue that loses more than 6 dB that way.
cd /Users/param/Documents/ChatGPT/brew
tools/sfx/build.sh heart ready error
  1. Test by tapping through the real app: feed, heart, read, Make it, hand off, errors. Confirm one tap gives one sound.
  2. Put every animation inside the reduced motion check and check the screen still reads with motion off.
  3. The kit skin holds the product keyframes. stage.js holds the bigger stage animation.

Numbers

Metric Definition Where measured Status
Sound on rate Share of signed in people who turn sound on Settings switch event Proposed
Small speaker loss dB lost per cue through the 350 Hz to 9 kHz band tools/sfx build Exists for product cues, proposed for Fetch's
Blind sound test Share of founders who pick the ready cue as your week is ready, with no picture Founder sessions Proposed

Open

  1. Should sound stay on by default as it is today, or start off as the Fetch books say? Proposal: off by default, on with one switch in Settings.
  2. Do Fetch's cues replace today's heart, ready and error cues, or play beside them? Proposal: replace, so one tap is still one sound.
  3. Is the voice used in the product at all? Proposal: only the paste line during onboarding, once, and never again in the product.
Sources
  • brew origin/main a559de6: tools/sfx/cues.json, tools/sfx/build.sh, public/sfx/*.mp3, public/app.js:1468-1560, public/app.js:2936-2939, public/loader.js:1-10
  • memory brew-sounds, brew-loader
  • brand-directions/dog/motion.html v0 to v2
  • brand-directions/dog/brand.html b5
  • brand-directions/dog/character.html c7
  • brand-directions/dog/system.md s1, s7
  • brand-directions/dog/snd/sound-log.json, voice.json
  • brand-directions/dog/kit-skin.js motion
  • brand-directions/book/content/f.js f-5.sonic-logo, f-5.cues, f-5.moments, f-5.motion

Source file content/brand/sound-and-motion.dog.md · For agents: Markdown · JSON