Pular para o conteúdo
Gabriela CarnielEnglish
Todos os projetos

Aurora

Um estúdio de treino vocal para mulheres trans, na web e no iOS.

  • Expo
  • React Native
  • Swift
  • TanStack Start
  • Web Audio (AudioWorklet)
  • Fastify
  • Drizzle
  • PostgreSQL
  • Better Auth
  • OpenAI
GitHub(Repositório privado)Demo ao vivo(Demo ainda não disponível)

Visão geral

Pitch em tempo real, leitura guiada com feedback ao vivo, check-ins de voz comparados a uma linha de base e conversas faladas com IA para levar a voz treinada a situações do dia a dia. Um único motor de áudio em TypeScript, testado, roda no navegador e no iPhone.

Contexto

Para muitas mulheres trans, o treino vocal é parte importante da transição, e a maior parte dele acontece sozinha: um app de afinador, gravações e muita dúvida sobre se está funcionando.

Aurora é um estúdio de prática em português: mede o pitch ao vivo, guia sessões de leitura, compara check-ins com uma linha de base pessoal e permite ensaiar situações reais, como pedir um café ou atender uma ligação, numa conversa falada com IA.

O que construí

  • Um motor de captura de voz em TypeScript puro: energia, suavização de pitch, correção de saltos de oitava, contorno da sessão, tempo de voz e segmentação de trechos. O detector de pitch é injetado, então o pacote não tem dependências.
  • O navegador alimenta o motor por um AudioWorklet e o iPhone pelo gravador nativo. O app web é um PWA instalável com shell offline.
  • Extras de iOS em Swift: uma Live Activity na Dynamic Island que mostra o pitch e áudio em segundo plano com um pequeno módulo Expo.
  • Conversa falada: segurar para falar, transcrição preparada com o vocabulário da cena e resposta em streaming.
  • Privacidade por padrão: as gravações ficam no aparelho, o áudio só sai com consentimento explícito e a conta pode ser excluída no próprio app.

Decisões principais

  1. 01Toda a matemática de voz num pacote puro

    Web e mobile só fornecem os frames de áudio; todo o resto é compartilhado. Roda no CI sem microfone e concentra a maior parte dos testes.

  2. 02De curso para estúdio

    A primeira versão era uma trilha de aulas com XP. Depois de escrever design docs e pesquisar o mercado, mudei para ferramentas de prática que dá para usar todo dia, e cortei o que não servia a isso.

  3. 03Voz por turnos em vez de fala em tempo real

    Transcrição seguida de resposta em texto por streaming é mais barata e muito mais controlável do que um modelo de voz em tempo real.

  4. 04Expo com módulos nativos pontuais

    Fiz um protótipo em SwiftUI e depois mantive o Expo, escrevendo Swift só onde a plataforma exigia: a Live Activity e o áudio em segundo plano.

  5. 05Um rate limit que não dá para burlar

    A camada de autenticação reescreve o header de IP com o endereço que o servidor de fato resolveu, então forjar o X-Forwarded-For não zera o limite. Tem teste para isso.

O que foi difícil

Vozes reais são bagunçadas. Respiração, silêncio e o detector pulando uma oitava parecem dado. A maior parte do trabalho do motor é decidir em que não confiar, e os testes registram esses casos.

Projetar para um público sensível: sequências que podem ser pausadas sem culpa, gravações que ficam no aparelho por padrão e consentimento explícito antes de qualquer áudio sair dele.