Extensão Firefox (Manifest V3) que junta um timer Pomodoro configurável com o Brain.fm. No trabalho toca Focus → Deep Work; no descanso, Relax → Unwind. A troca é automática: você não precisa clicar no site a cada fase.
Não há API pública oficial do Brain.fm. A extensão reusa a aba em que você já está logado (incluindo login com Google), lê a sessão no navegador e fala só com my.brain.fm e api.brain.fm.
Popup da extensão (renderizado a partir do HTML/CSS reais).
| Fase do Pomodoro | No Brain.fm |
|---|---|
| Trabalho | Focus → Deep Work |
| Descanso (curto ou longo) | Relax → Unwind |
O Pomodoro nativo do Brain.fm não troca Focus ↔ Relax sozinho. Esta extensão existe para isso: o relógio fica no popup; a música segue a fase.
- Tempos configuráveis: trabalho, descanso, descanso longo e quantos ciclos até o longo (padrão 30 / 5 / 15 min, 4 ciclos)
- Iniciar, Pausar, Pular fase e Reset
- No fim de cada fase: notificação do Firefox e troca Deep Work ↔ Unwind
- Alerta de voz opcional (arquivos MP3 na extensão — não usa
speechSynthesis, que pausava o áudio do Brain.fm) - Play/pause no player da aba, no mesmo
<audio>sempre que possível, para o Firefox não bloquear autoplay - Status honesto no popup: só diz “tocando” se o chip do site, o botão pause e o relógio do áudio baterem
- Sem analytics, sem telemetria, sem dados enviados ao autor (
data_collection_permissions: none)
- Firefox 142 ou mais recente (desktop; Android também declarado no manifesto)
- Conta Brain.fm logada em https://my.brain.fm/
- Um play manual no player do site na sessão (política de autoplay do Firefox). Depois disso, o Pomodoro controla sozinho
O Firefox só mantém extensões assinadas pela Mozilla. O load temporário some ao fechar o navegador.
-
Gere o pacote:
./build.sh
Isso cria
dist/pomodoro-brainfm.zip. -
Entre em addons.mozilla.org/developers e abra Submit a New Add-on.
-
Em How to Distribute this Extension, escolha On your own (não lista na loja; só você usa o arquivo assinado).
-
Envie o ZIP. Textos prontos para o formulário estão em AMO_SUBMISSION.md.
-
Baixe o
.xpiassinado. -
No Firefox:
about:addons→ ⚙️ → Install Add-on From File… → escolha o.xpi. -
Abra
https://my.brain.fm/logado e clique no ícone da extensão.
Para atualizar: aumente "version" em manifest.json, rode ./build.sh, envie a nova versão no mesmo add-on da AMO e instale o .xpi novo por cima.
Some ao fechar o Firefox:
about:debugging#/runtime/this-firefox- Load Temporary Add-on… → selecione
manifest.json - F5 na aba do Brain.fm depois de recarregar a extensão (senão o content script fica morto)
- Dê play uma vez no player e use o popup
- Deixe
my.brain.fmaberto e logado. - No popup, ajuste os minutos e Salvar tempos se quiser sair do padrão.
- Iniciar — começa o trabalho e pede Deep Work no Brain.fm.
- No fim do trabalho: notifica, (opcional) toca o alerta de voz e muda para Unwind.
- No fim do descanso: volta para Deep Work.
- Pausar para o timer e o áudio. Pular troca a fase na hora. Reset volta ao trabalho, no tempo cheio.
Marque Alerta de voz nas trocas se quiser o aviso falado em cada mudança de fase.
- O content script na aba
my.brain.fmlê o token da sessão (localStoragepersist:auth). - O background resolve os IDs das atividades Deep Work e Unwind na API (
api.brain.fm) e guarda em cache. - Na troca de fase tenta, nesta ordem:
- clicar o chip do site (
Deep Work ▾/Unwind ▾) e o item do menu (incluindo portal); - navegação SPA para
/player/{activityId}; - criar sessão na API e trocar
audio.srcno mesmo elemento<audio>(mantém o unlock de autoplay); - recarregar a URL do player só se o modo ainda não mudou (último recurso; pode exigir play manual de novo).
- clicar o chip do site (
- Play e pause preferem o elemento de áudio; o botão da UI do site entra para o React ficar alinhado (chip + pause).
O status no popup só fica verde “tocando” quando o modo no site, o botão pause e o áudio de fato avançando coincidem. Se algo falhar, a mensagem descreve o problema em vez de fingir sucesso.
manifest.json # MV3, id pomodoro-brainfm@personal, Firefox 142+
background.js # timer (alarms), fases, notificações, orquestra Brain.fm
content/brainfm.js # sessão, API, chip/menu, play/pause
popup/ # HTML / CSS / JS do popup
icons/ # 48, 96, 128
sounds/ # work_to_break.mp3, break_to_work.mp3
docs/popup.png # captura da interface
build.sh # gera dist/pomodoro-brainfm.zip
AMO_SUBMISSION.md # textos para assinatura não listada na AMO
Permissões: alarms, notifications, scripting, storage, tabs.
Hosts: https://my.brain.fm/*, https://api.brain.fm/*.
- Só Firefox (não é extensão Chrome/Edge)
- Precisa da aba do Brain.fm logada; não substitui o app nem faz login por você
- O primeiro play da sessão ainda depende de um gesto seu (autoplay)
- Recarregar a página do player pode perder esse unlock
.xpinão assinado não instala de forma permanente no Firefox normal- Conta ligada ao Google funciona porque a sessão já está no navegador; não há OAuth próprio
Copyright (C) 2026 Melker Halberd Pereira Alves
Este programa é software livre: você pode redistribuí-lo e/ou modificá-lo sob os termos da GNU General Public License versão 3 (ou, por opção, qualquer versão posterior), publicada pela Free Software Foundation.
Este programa é distribuído na esperança de que seja útil, mas SEM NENHUMA GARANTIA; sem mesmo a garantia implícita de COMERCIABILIDADE ou ADEQUAÇÃO A UM DETERMINADO FIM. Veja a GNU GPL no arquivo LICENSE para mais detalhes.
A extensão não coleta dados para o desenvolvedor: só usa a sessão Brain.fm que você já abriu, para tocar Deep Work e Unwind no ritmo do Pomodoro.
