Chrome extension

Build the extension.

The source is public and buildable now. Chrome Web Store distribution, account-backed timer sync, saved profiles, and hosted audio are not released yet.

Manifest V3·MIT · React 18 · Plasmo
#lofi-codersoverlay preview
32:14
focus · cycle 2
Ambient
35
Music
25
Page
85
renders on any tab
The vibe, visualized

Three layers. One sphere. Drag the faders.

A custom WebGL shader paints each fader as a color band on the orb. This page previews the three mixer controls in the source; it does not prove public audio delivery.

the mix · live
3 layers
Drag the faders

This is the extension, visualized. Every fader drives a shader uniform. The same three layers power your actual session — ambient, music, voice — in each listener's ears, never broadcast.

What is in source

Four inspectable parts.

Mixer

Local faders.

Web Audio controls for ambient, music, and page levels. The public audio files are not live yet.
Rhythm

Timer engine.

The timer runs locally. A build can add Supabase Realtime settings; the public extension has no release receipt for cross-device sync.
Recap

Optional recap.

After the disclosure and opt-in, the source can request a short Claude recap. Saving it to a profile is not wired.
Anywhere

Content script.

The current source matches HTTP and HTTPS pages. A store-reviewed build is not published.
Privacy — the short version

Never reads page content. Ever.

Audio mixing stays in Web Audio. The current extension stores its own settings locally. A recap request leaves the browser only after the disclosure and opt-in. Hosted timer sync and profile saving are not wired in the public build.

Open source so you can verify — read the source.

Keyboard

Shortcuts on any page.

  • J·Show / hide overlay
  • K·Start / pause pomodoro
  • M·Mute all layers
Fork it

MIT, Plasmo, zero lock-in.

The mixer, timer, recap prompt, and card renderer live as workspace packages in the public repo. They are not published to npm yet.

clone + dev
git clone https://github.com/frankxai/vibeclubs
cd vibeclubs
pnpm install
pnpm dev:extension
embed the mixer
import { createMixer } from '@vibeclubs/vibe-mix'
const mixer = createMixer({
  ambientBaseUrl: yourAudioBaseUrl,
})
await mixer.loadAmbient('lofi')
mixer.setLevel('ambient', 0.4)