Carl Henriksson

Firmware, systems, web. Same problems, different layers.


RumbleVoice is a small browser app for developing a powerful voice while reducing social anxiety related to public speaking. A bell marks a repeating interval, and the user follows it with breath and sound.

The entire application is delivered as a single request. Audio, image, fonts, and all logic are embedded directly into the document. 608 KB, complete. Once it loads, the network is no longer part of the contract.

That constraint shapes everything downstream. There is no asset pipeline to reason about, no CDN to depend on, no fetch that can fail later. The tool works the same on a plane, in a basement, or in a conference room with bad WiFi.

Playback runs through the Web Audio API. Each bell is scheduled precisely, shaped in real time, and torn down after it plays. Timing is calculated against a stable clock rather than elapsed time, so the cycle holds even if the tab sleeps or the system hiccups. The visual layer follows: simple transforms, no continuous redraw, tightly coupled to the audio.

The bell itself is not a metronome tick. Pitch and duration adapt to the interval length. Each strike varies slightly in time, tone, and brightness — enough to reduce phasing and repetition fatigue, not so much that it loses character. Tuned behavior, not randomness.

A small service worker handles the rest. Its only job is to cache and serve that document. After the first visit, even the initial request becomes local.

The whole thing is closer to a small instrument than a website.

RumbleVoice.com