O Baby Monitor Timmy começou com uma ideia simples: uma babá eletrônica que respeita a privacidade em casa. Sem gravações na nuvem, sem caminhos desnecessários para os dados saírem do quarto do bebê. O que muita gente não vê: eu desenvolvo o Timmy sozinho em Zurique, e GitHub Copilot é meu parceiro de programação, e muito rápido.
O fluxo de trabalho entre pessoa e IA
A divisão é clara: eu defino os recursos, estabeleço prioridades e tomo decisões de arquitetura. O Copilot ajuda na implementação: escrevendo código, adicionando testes, investigando bugs e preparando as etapas de lançamento.
Para mim, um sprint típico é mais ou menos assim:
- Descrição do recurso: Descrevo o que o recurso deve fazer, incluindo casos extremos e restrições.
- Implementação: O Copilot sugere código e segue as convenções já existentes no projeto.
- Testes: Testes automatizados de ponta a ponta rodam em dois emuladores e verificam a conexão real entre os dispositivos do bebê e dos pais.
- Distribuição: Quando os testes passam, as versões para Android e iOS são preparadas para as lojas e os canais de teste corretos.
Esse ciclo se repete para recursos e correções de bugs. Eu não escrevo cada linha sozinho, mas decido o que é desenvolvido, por que isso é desenvolvido e se uma sugestão faz sentido para o Timmy.
Do conceito ao WebRTC
A tarefa técnica central ficou clara desde o começo: áudio e vídeo em tempo real entre dois celulares. O WebRTC era a escolha óbvia, mas integrá-lo ao Flutter não é simples: candidatos ICE, negociação SDP, fallback com TURN e DataChannels precisam funcionar juntos na ordem certa.
O Copilot me ajudou a juntar essas partes passo a passo: configurar a conexão peer-to-peer, manter correta a ordem crítica (DataChannel antes da oferta, onTrack antes de setRemoteDescription) e colocar a sinalização no Firebase Firestore. Cada parte precisava funcionar em dois emuladores antes de eu seguir adiante.
Pareamento seguro com ECDH
Um dos recursos mais importantes foi o sistema de pareamento seguro. Dois dispositivos precisam estabelecer confiança mútua sem depender de um servidor central para confirmar a identidade um do outro. A solução: uma troca de chaves ECDH P-256 pelo Firebase, combinada com um número de verificação visual (SAS) que detecta ataques man-in-the-middle.
O Copilot ajudou a implementar a cadeia criptográfica: geração de chaves, troca de chaves públicas, derivação do segredo compartilhado, cálculo do SAS e criptografia AES-256-GCM para todos os dados de sinalização posteriores. Não envio a chave de pareamento ao backend; apenas seu hash SHA-256 é usado como identificador de documento no Firestore.
Auditoria de segurança: encontrando e corrigindo vulnerabilidades
Para mim, desenvolvimento com ajuda de IA não é só digitar mais rápido. Ele também ajuda a procurar bugs de forma sistemática. Em um sprint focado de auditoria de segurança, o Copilot analisou a base de código e encontrou seis problemas que eu precisava corrigir:
- Falta de validação de entrada nos dados de sinalização
- Possíveis condições de corrida no tratamento de candidatos ICE
- Dados de sessão antigos que não estavam sendo limpos corretamente
- Regras de segurança do Firestore permissivas demais
- Falta de análise sobre fixação de certificado (certificate pinning)
- Tratamento de erros insuficiente no fluxo de credenciais TURN
Os seis foram corrigidos no mesmo sprint. É aqui que o Copilot se destaca: ler muitos arquivos, comparar padrões e marcar pontos que preciso analisar mais de perto.
Sprints iterativos: como o app evoluiu
O Timmy cresceu por meio de sprints rápidos, mas com limites bem definidos. Alguns marcos:
- v1.8: Redesenho completo do pareamento — código de 4 caracteres + ECDH P-256 pelo Firebase substituíram a antiga abordagem de chave direta.
- v1.10: Sprint de reforço de segurança — auditoria das seis vulnerabilidades e ciclo de correção.
- v1.11: Modo escuro em todas as telas, além da página inicial e do blog que você está lendo agora.
- v1.12: Grande reformulação da tela dos pais, modo de visão noturna e detecção de movimento por análise dos quadros da câmera.
Todo sprint segue o mesmo padrão básico: descrever o objetivo, revisar sugestões, testar automaticamente e então enviar para os testadores.
Testes E2E entre dispositivos
Não dá para testar uma babá eletrônica direito em um único dispositivo. Preciso de um dispositivo para o bebê e outro para os pais. O projeto começou com dois emuladores Android rodando ao mesmo tempo e agora complementa esse ciclo com verificações no simulador local do iOS e em dispositivos reais. O script automatizado de teste para Android ainda:
- Instala o app nos dois emuladores
- Conduz o pareamento nos dois dispositivos
- Verifica se as conexões de áudio e vídeo foram estabelecidas
- Testa a função de pressionar para falar (push-to-talk), o controle da câmera e outros recursos
Como os dois emuladores compartilham o mesmo endereço IP (10.0.2.15), uma conexão direta peer-to-peer por STUN é impossível. Cada execução de teste precisa passar pelo relay TURN da Cloudflare. É chato, mas útil: o caminho de conexão mais complicado é testado todas as vezes.
O que aprendi
Desenvolver um app completo com uma IA como parceira de programação me ensinou algumas coisas:
- Arquitetura importa mais do que nunca. Convenções claras e uma base de código bem documentada ajudam a IA a sugerir código consistente. A ambiguidade fica cara rapidamente.
- Testar não é opcional. Código gerado por IA precisa do mesmo rigor de testes que código escrito por pessoas. Os testes E2E automatizados encontraram problemas que seriam fáceis de deixar passar manualmente.
- A pessoa continua no comando. Cada decisão de arquitetura, cada compromisso entre segurança e outros requisitos e cada limite do produto continua sendo minha responsabilidade. A IA acelera a implementação, mas não substitui o discernimento.
- Velocidade permite qualidade. Como os recursos são lançados em horas, não em dias, sobra mais tempo para iterar, polir e corrigir bugs. Ser rápido não significa automaticamente ser bom.
Olhando para frente
O Baby Monitor Timmy continua evoluindo. O lançamento para iOS está próximo; depois vêm recursos adicionais de sensores e o reforço contínuo da segurança. O fluxo de trabalho permanece parecido: eu defino a direção e os limites, e o Copilot ajuda a implementar e verificar com rapidez.
Os componentes relevantes para a segurança agora estão organizados com limites claros no repositório público baby-monitor-timmy-core. É lá também que estão documentadas as decisões de arquitetura sobre pareamento, sinalização e interfaces de backend.