Como um painel laboratorial inteiro passou a se ler — e a se ouvir — como uma partitura rítmica.
← voltar à peçaA leitura de um painel de exames é, quase sempre, uma tabela: dezenas de linhas, uma coluna de valores, outra de faixas de referência, e um jogo de vermelho e verde. Funciona, mas obriga o olho a percorrer linha por linha. O Compasso parte de uma pergunta diferente: e se o painel inteiro fosse uma peça de música que toca de uma vez? Aí "estar na faixa" vira estar na batida, e o marcador fora da faixa salta — porque toda síncope salta, tanto para o olho quanto para o ouvido.
Um pentagrama tem várias linhas (pautas), uma grade de compassos que divide o tempo, e notas que caem na batida ou fora dela. O Compasso mapeia esse vocabulário direto sobre o painel clínico:
O resultado não é uma versão bonita da tabela: é uma estrutura de leitura nova. Você não lê valor por valor — você escuta a forma do painel e o problema se anuncia sozinho, como um instrumento que entrou atrasado numa orquestra.
Nada é decorativo. O padrão rítmico de cada linha é construído a partir do próprio resultado: se o marcador está no compasso, ele bate nos tempos fortes, exatamente sobre a grade; se está fora, ele se desloca e gagueja — e o deslocamento é proporcional a quão fora ele está (a "severidade", medida em larguras da faixa de referência).
// no compasso → tempos fortes 1 e 3, na grade, dentro da faixa
push({ beat: base+0, yOff: 0, on:true });
push({ beat: base+2, yOff: 0, on:true });
// fora do compasso → deslocamento (síncope) + gaguejo
off = 0.30 + 0.34*sev; // atraso, em tempos
yOff = dir*(0.52 + 0.40*sev); // sobe se alto, desce se baixo
push({ beat: base+off, yOff:yOff, on:false }); // nota deslocada
push({ beat: base+off-0.46, yOff:yOff*.82, on:false, ghost:true }); // gaguejo
Cada nota fora da batida ainda desenha um anel pontilhado na grade (onde ela deveria ter caído) e um traço fino ligando os dois — a metáfora visual de "isto está fora do lugar" fica explícita, sem precisar de legenda.
Um painel só significa alguma coisa para alguém. Por isso a peça tem um modo consulta: a idade e o sexo (de um paciente fictício) reposicionam as faixas de referência mostradas. Isso não é enfeite — é o que torna a peça útil à beira do leito.
É o gesto que fecha o argumento clínico: "para a sua idade, este aqui saiu do compasso" — a faixa se move com o paciente, na frente dele, e a nota responde.
Dois recursos tornam isso operável à beira do leito. Os casos ilustrativos (fictícios) deixam o médico alternar entre painéis inteiros — de "quase tudo no compasso" (peça consonante, quase toda na batida) a "risco metabólico" (a maioria das linhas em síncope) — e a peça muda de música na frente do paciente. E o botão "percorrer os fora do compasso" conduz um percurso guiado: a peça destaca, um a um, cada marcador fora da batida, abrindo a leitura em linguagem simples — o roteiro de uma devolutiva.
Tudo é canvas 2D procedural — sem imagens, sem SVG externo, sem Three.js, sem WebGL, sem framework, sem build. A cada quadro o motor desenha:
O canvas escala com o devicePixelRatio para ficar nítido em telas retina, e o número
de compassos visíveis se adapta à largura (4 no desktop, 2 no celular), reconstruindo os padrões
rítmicos sem perder o alinhamento com os rótulos.
Nenhum arquivo de áudio: todo o som nasce de WebAudio, osciladores e envelopes, no navegador.
Um pad grave sustenta a tonalidade da peça. Cada linha é um "instrumento" afinado num grau da escala pentatônica — então, quando o painel está saudável, as notas no compasso desenham um acorde consonante. Um marcador fora dispara uma nota desafinada (subida em cents proporcional à severidade), um trítono de tensão e um tropeço de ruído filtrado. No tempo forte, um woodblock marca a regência. O som só começa depois do gesto do usuário e há um botão de mudo sempre visível.
prefers-reduced-motion, a batuta não faz a
varredura contínua; a peça é lida como um arpejo estático sob demanda, e as notas param de
tremer.aria-live descreve a partitura inteira para leitores de tela.Arquivos estáticos, deploy instantâneo:
# repositório público (MIT)
gh repo create pmf-labs/compasso --public --source . --push
# Cloudflare Pages — cópia limpa, sem .git
wrangler pages deploy ./stage --project-name compasso --branch main
Sem servidor, sem banco, sem chave de API. A peça é 100% cliente — o que você baixa é o que roda.
Peça #15 da Vitrine Fable · código aberto sob licença MIT · © 2026 Paulo Melo Franco (pmf-labs)