Três blocos de construção, um objetivo
Nos bastidores, o Timmy foi criado de um jeito bem prático: Flutter para o app, WebRTC para áudio e vídeo em tempo real e Firebase para a coordenação. Eu não queria criar uma plataforma enorme que manda tudo pela nuvem. Cada parte deve saber o mínimo possível e ainda assim funcionar de forma confiável com as outras.
WebRTC: conexão direta, criptografada por padrão
O WebRTC (Web Real-Time Communication) transmite áudio e vídeo entre os dispositivos do bebê e dos pais. No melhor cenário, os dados fluem diretamente entre os dois dispositivos, ponto a ponto, sem um servidor de mídia no meio.
Toda conexão WebRTC usa DTLS-SRTP por padrão. Se alguém capturar pacotes da rede, não conseguirá ouvir nem assistir ao conteúdo. Essa criptografia faz parte do protocolo e não pode simplesmente ser desativada no WebRTC.
Esse era o ponto importante para mim: a mídia do quarto do bebê não deve ficar no meu servidor. Ela permanece entre os seus dispositivos.
Sinalização pelo Firebase Firestore
Antes de o WebRTC começar, os dispositivos precisam se encontrar e negociar como vão se conectar. Essa parte se chama sinalização. Para isso, o Timmy usa o Firebase Firestore, banco de dados em nuvem do Google.
Apenas dados técnicos de conexão são trocados:
- Ofertas e respostas SDP: Descrevem as capacidades dos dispositivos (codecs compatíveis, resoluções etc.).
- Candidatos ICE: Possíveis caminhos de rede pelos quais os dispositivos podem se comunicar.
O áudio e o vídeo não chegam ao Firebase. O Firestore transporta apenas os dados técnicos de conexão. O Timmy também criptografa essa camada de sinalização, para que o Firestore não vire um ponto de encontro em texto não criptografado para SDP e ICE.
Servidores TURN: quando o caminho direto não funciona
Algumas redes bloqueiam conexões diretas, como firewalls rigorosos ou certas operadoras móveis. Nesse caso, o WebRTC precisa de um servidor de retransmissão TURN (Traversal Using Relays around NAT).
O Timmy tenta primeiro o servidor TURN local e usa a Cloudflare como alternativa quando o servidor de retransmissão local não está disponível ou está sobrecarregado. Esse servidor encaminha pacotes criptografados. Ele não recebe as chaves do áudio nem do vídeo; a criptografia do WebRTC continua intacta.
As credenciais TURN vêm de uma Firebase Cloud Function e valem apenas por 24 horas. Para mim, credenciais permanentes em um app de babá eletrônica seriam arriscadas demais.
Nearby Connections: os dispositivos se encontram automaticamente
Para evitar etapas de configuração complicadas entre o dispositivo do bebê e o dos pais, o Timmy usa Nearby Connections. O Google oferece essa camada de descoberta por Bluetooth e Wi‑Fi.
O pareamento automático no Timmy funciona sem digitar códigos manualmente: os dispositivos se descobrem e encontram o mesmo ponto de encontro para a troca de chaves. Se isso falhar, há um código de 4 caracteres que você pode digitar. O código de pareamento nunca sai do dispositivo; o Firestore vê apenas um hash criptográfico (SHA-256) como identificador do documento.
Autenticação anônima
O Timmy usa a autenticação anônima do Firebase. Na primeira vez que o app é iniciado, cada dispositivo recebe um ID temporário e anônimo. Não há conta, endereço de e-mail nem senha. O ID serve apenas para aplicar as regras do Firestore: somente dispositivos autenticados podem ler ou gravar dados da sessão.
A arquitetura: quem envia, quem recebe
O Timmy tem dois modos:
- Modo Bebê (transmissor): O dispositivo capta o áudio pelo microfone e o envia ao dispositivo dos pais pelo WebRTC. Opcionalmente, a câmera pode ser ativada; nesse caso, o vídeo também é enviado diretamente.
- Modo dos Pais (receptor): O dispositivo recebe áudio e vídeo, mostra a transmissão da câmera e oferece o recurso de pressionar para falar, usado para enviar mensagens de voz curtas ao dispositivo do bebê.
Controles como pressionar para falar e ligar ou desligar a câmera usam um DataChannel, outro canal WebRTC que envia pequenas mensagens criptografadas diretamente entre os dispositivos.
Por que Flutter?
Flutter é o framework do Google para apps em várias plataformas. Para o Timmy, isso significa que posso escrever boa parte da lógica uma vez e usá-la no Android e no iOS. O Timmy está disponível para Android, e a versão para iOS está perto do lançamento. Menos código duplicado significa menos pontos onde bugs podem aparecer.
Resumo
A regra técnica é simples: o Timmy deve lidar apenas com os dados de que realmente precisa. O WebRTC protege a mídia, o Firebase coordena o estabelecimento da conexão, o TURN vê apenas pacotes criptografados e o Nearby Connections simplifica o pareamento.
Uma boa tecnologia passa quase despercebida no dia a dia. Ela funciona sem transformar o quarto do bebê em um projeto de nuvem.