Skip to content

Redesign notification sounds: two warm sounds + single three-state control #923

@Astro-Han

Description

@Astro-Han

Background

The app ships 45 .aac sound effects inherited from OpenCode (packages/ui/src/assets/audio/). They don't fit PawWork's tone, and the surrounding behavior is tangled:

  • Three separate sound toggles (agent / permissions / errors) plus three separate system-notification toggles.
  • Sounds are played in two places — context/notification.tsx (turn-complete + error) and pages/layout/layout-sdk-event-effects.ts (permission) — and are never gated by whether the session is currently on screen.
  • Every event can fire twice: the app plays its own sound and the OS notification fires with its own sound.

Goal (confirmed design)

  1. When it sounds — "your turn" events (turn complete / question / permission) play one warm sound; a real error plays a second sound. Manual interrupts, reverts, and in-progress hiccups never sound.
  2. What it sounds — exactly two bundled sounds (notify.aac, error.aac), warm and soft. No per-sound picker.
  3. Relation to OS notifications — the app owns the sound; the OS notification is silenced (banner + click-to-focus only), so no double sound.
  4. Settings — one three-state control governing all of the above uniformly: Never / Only when unfocused (default) / Always. Error follows the same control: only "Never" silences it, otherwise it ignores the focus state.

Audio is decided: a soft cooking-bell ding for "your turn", a low restrained tap for "error" (sources + licenses recorded in the Phase 1 PR).

Delivery (phased)

  • Phase 1 — ship the sounds (first PR): delete the 45 OpenCode .aac, add notify.aac + error.aac, point existing defaults at them, collapse the picker options, drop the 45 i18n option labels. Low risk; ships the new sounds without touching behavior.
  • Phase 2 — behavior refactor (follow-up PR): single three-state setting, silence OS notifications, unify "only when unfocused" gating across sounds + banners, settings migration, settings UI rewrite, i18n cleanup, DESIGN.md sound spec. Detailed file-by-file plan in the first comment.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Medium priorityappApplication behavior and product flowsenhancementNew feature or requestplatformElectron shell, OS integration, packaging, updater, signing, paths, and permissionsuiDesign system and user interface

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions