e7094014b7be4985d0afa037e9b3b86b8fc9f083
2
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
860f02b2c1 |
feat(channels): rename channels, and quieter defaults for sound and streams
CI / Build & test (Node 20) (push) Canceled after 0s
CI / Build & test (Node 24) (push) Canceled after 0s
CI / Build & test (push) Canceled after 0s
CodeQL / Analyze (javascript-typescript) (push) Canceled after 0s
Security / Secret scan (gitleaks) (push) Canceled after 0s
Security / Dependency scan (OSV-Scanner) (push) Canceled after 0s
Security / IaC/config scan (Trivy) (push) Canceled after 0s
Security / License compliance scan (Trivy) (push) Canceled after 0s
OpenSSF Scorecard / Scorecard analysis (push) Canceled after 0s
Four owner requests in one pass. Rename: the PATCH /api/channels/:id route already accepted a name and a topic, and the API client already exposed it — the only thing missing was a way to reach it. The channel settings Overview tab now edits both, gated on MANAGE_CHANNELS like the server is, with Save/Discard appearing only when the form is dirty. The server's lowercase-and-hyphenate rule moved to @backspace/shared so the field can show what a name will actually become instead of letting it change shape on save; one copy of the rule, used by both sides. Stream volume: someone else's screen share now starts at 50 instead of 100 (DEFAULT_STREAM_VOLUME). The publisher boosts system audio before sending, so the old default arrived far too loud for a viewer who never touched the slider. Only the default moves — the slider still covers the full range and a value the user set is still persisted. Sound effects: SFX_BASE_VOLUME 0.8 -> 0.4, halving every cue. The .ogg files were left alone; they already peak below full scale, so the harshness was level, not recorded distortion. Every SFX playback path goes through getSfxVolume(), so this is the single knob. Translations: channel settings (including the override editor's permission labels), the friends page end to end — tabs, lists, requests, the add tab and discovery cards — the invite modal including its per-invite failure reasons, and the group-DM member actions. Failure reasons are carried as translation keys rather than finished text, so results already on screen re-label when the language changes. Verified: web build (tsc + vite), server typecheck, 490 web tests, 804 server tests. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
3deed92dd9 |
feat(sounds): replace call and stream effects
CI / Build & test (Node 20) (push) Canceled after 0s
CI / Build & test (Node 24) (push) Canceled after 0s
CI / Build & test (push) Canceled after 0s
CodeQL / Analyze (javascript-typescript) (push) Canceled after 0s
Security / Secret scan (gitleaks) (push) Canceled after 0s
Security / Dependency scan (OSV-Scanner) (push) Canceled after 0s
Security / IaC/config scan (Trivy) (push) Canceled after 0s
Security / License compliance scan (Trivy) (push) Canceled after 0s
OpenSSF Scorecard / Scorecard analysis (push) Canceled after 0s
The originals were all 1.14s — long enough to be intrusive for events that fire whenever anyone joins, leaves, or watches a stream. Synthesised rather than sourced: no third-party file, so no licensing question in a public repository. The parameters are measured, not guessed — envelope, spectral peaks and decay taken from two reference sounds the instance owner supplied. The timbre is fundamental plus octave at near-equal strength (1.00 / 0.85 / 0.10 / 0.02) decaying to 1/e in 0.19s, with no reverb. Call join rises C4→G4, leave falls D4→G3, matching the references' intervals and their 100ms spacing. The stream pair reuses those resolution notes as single tones at ~55% the volume: they fire far more often during a broadcast, so they have to sit under the call sounds rather than beside them. Stream start is the one event that happens once per broadcast, so it can be a chord — with a low thump and a short air layer that both die inside 150ms, adding weight without length. Stream end mirrors it descending, quieter, and without the air, since brightness reads as arrival. Generators and the measured parameters are kept in tools/sfx so these can be retuned without redoing the analysis. Total size drops from 150KB to 41KB. |