
Sounds On The Web
Review UI code for sound-effect UX and accessibility so every audio cue has visual parity, user controls, and appropriate weight.
Overview
Sounds on the Web is an agent skill most often used in Ship (also Build frontend) that audits UI code for audio feedback accessibility and UX, emitting file:line findings.
Install
npx skills add https://github.com/raphaelsalaja/skill --skill sounds-on-the-webWhat is this skill?
- Four rule categories with priority order: accessibility, appropriateness, implementation, weight matching
- Outputs findings in file:line format for direct fixes in the repo
- Accessibility rules: visual equivalent for every cue, explicit sound toggle in settings
- Covers appropriateness, implementation patterns, and weight-matching for UI sounds
- MIT-licensed audit workflow—read files or prompt for paths, then check all rules
- 4 prioritized rule categories: accessibility, appropriateness, implementation, weight matching
- Findings reported in file:line format
- Skill version 2.0.0 per metadata
Adoption & trust: 1 installs on skills.sh; 18 GitHub stars; 3/3 security scanners passed (skills.sh audits); trending (+100% hot-view momentum).
What problem does it solve?
You added UI sounds but are unsure if cues are accessible, optional for users, or matched to interaction weight.
Who is it for?
Indie frontend devs reviewing React or similar components that call playSound or Web Audio before a release.
Skip if: Composing sound libraries, mixing mastering, or backend-only APIs with no client audio code to inspect.
When should I use this skill?
Reviewing sound implementation, checking audio UX decisions, or auditing accessibility of UI audio feedback in code.
What do I get? / Deliverables
You receive prioritized file:line audit results across four rule categories so you can fix audio UX before users ship with silent failures or a11y gaps.
- Prioritized file:line findings per rule prefix (a11y-, appropriate-, impl-, weight-)
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
Audio UX review is a code-quality gate before release; canonical shelf is Ship → review alongside other pre-ship audits. Checker-style pass over components matches the review subphase for frontend polish and a11y before launch.
Where it fits
Run before release on checkout and toast components that play success sounds.
Audit a new settings panel to ensure users can disable UI sounds.
Verify game-like UI sounds in a hybrid app store build still expose visual state for store review accessibility expectations.
How it compares
A focused UI sound checklist reviewer—not a general lighthouse audit or DAW workflow.
Common Questions / FAQ
Who is sounds-on-the-web for?
Solo builders and small teams shipping web or hybrid apps who implement optional UI sounds and need a systematic code review pass.
When should I use sounds-on-the-web?
Use when reviewing sound implementation in Ship review, auditing accessibility of audio cues, or checking UX decisions during Build frontend polish.
Is sounds-on-the-web safe to install?
It is a read-only review skill over your codebase; confirm repo trust and review the Security Audits panel on this page before running agents on production code.
SKILL.md
READMESKILL.md - Sounds On The Web
# Sounds on the Web Review UI code for audio feedback best practices and accessibility. ## How It Works 1. Read the specified files (or prompt user for files/pattern) 2. Check against all rules below 3. Output findings in `file:line` format ## Rule Categories | Priority | Category | Prefix | |----------|----------|--------| | 1 | Accessibility | `a11y-` | | 2 | Appropriateness | `appropriate-` | | 3 | Implementation | `impl-` | | 4 | Weight Matching | `weight-` | ## Rules ### Accessibility Rules #### `a11y-visual-equivalent` Every audio cue must have a visual equivalent; sound never replaces visual feedback. **Fail:** ```tsx function SubmitButton({ onClick }) { const handleClick = () => { playSound("success"); onClick(); // No visual confirmation }; } ``` **Pass:** ```tsx function SubmitButton({ onClick }) { const [status, setStatus] = useState("idle"); const handleClick = () => { playSound("success"); setStatus("success"); // Visual feedback too onClick(); }; return <button data-status={status}>Submit</button>; } ``` #### `a11y-toggle-setting` Provide explicit toggle to disable sounds in settings. **Fail:** ```tsx // No way to disable sounds function App() { return <SoundProvider>{children}</SoundProvider>; } ``` **Pass:** ```tsx function App() { const { soundEnabled } = usePreferences(); return ( <SoundProvider enabled={soundEnabled}> {children} </SoundProvider> ); } ``` #### `a11y-reduced-motion-check` Respect prefers-reduced-motion as proxy for sound sensitivity. **Fail:** ```tsx function playSound(name: string) { audio.play(); // Plays regardless of preferences } ``` **Pass:** ```tsx function playSound(name: string) { const prefersReducedMotion = window.matchMedia( "(prefers-reduced-motion: reduce)" ).matches; if (prefersReducedMotion) return; audio.play(); } ``` #### `a11y-volume-control` Allow volume adjustment independent of system volume. **Fail:** ```tsx function playSound() { audio.volume = 1; // Always full volume audio.play(); } ``` **Pass:** ```tsx function playSound() { const { volume } = usePreferences(); audio.volume = volume; // User-controlled audio.play(); } ``` ### Appropriateness Rules #### `appropriate-no-high-frequency` Do not add sound to high-frequency interactions (typing, keyboard navigation). **Fail:** ```tsx function Input({ onChange }) { const handleChange = (e) => { playSound("keystroke"); // Annoying on every keystroke onChange(e); }; } ``` **Pass:** ```tsx function Input({ onChange }) { // No sound on typing - visual feedback only return <input onChange={onChange} />; } ``` #### `appropriate-confirmations-only` Sound is appropriate for confirmations: payments, uploads, form submissions. **Pass:** ```tsx async function handlePayment() { await processPayment(); playSound("success"); // Appropriate - significant action showConfirmation(); } ``` #### `appropriate-errors-warnings` Sound is appropriate for errors and warnings that can't be overlooked. **Pass:** ```tsx function handleError(error: Error) { playSound("error"); // Appropriate - needs attention showErrorToast(error.message); } ``` #### `appropriate-no-decorative` Do not add sound to decorative moments with no informational value. **Fail:** ```tsx function Card({ onHover }) { return ( <div onMouseEnter={() => playSound("hover")}> {/* Decorative, no value */} {children} </div> ); } ``` #### `appropriate-no-punishing` Sound should inform, not punish; avoid harsh sounds for user mistakes. **Fail:** ```tsx function ValidationError() { playSound("loud-buz