ugabuga

ugabuga logo

O ugabuga é um treinador de digitação para terminal feito em Go, criado para trazer a experiência e a fluidez do Monkeytype direto para a linha de comando. A ideia foi ter uma ferramenta leve e prática para treinar digitação sem precisar abrir o navegador.

O aplicativo conta com uma interface interativa no terminal (TUI), oferecendo diferentes modos de treino, histórico de tentativas e métricas em tempo real.

Recursos:

  • Modos de Prática: Treinos por contagem de palavras (10, 25, 50 ou 100 palavras) ou por tempo (15s, 30s, 60s ou 120s), com visualização do texto em rolagem contínua de 3 linhas.
  • Mecânicas de Digitação: Suporte a space-skipping (ao errar uma palavra, pressionar espaço pula direto para a próxima) e reinício rápido do teste com a tecla Tab.
  • Desafio Diário: Teste diário de 25 palavras gerado a partir da data atual (o mesmo teste para todo mundo no mesmo dia), com contador de dias consecutivos (daily streak).
  • Estatísticas e Gráfico ASCII: Registro local das sessões em JSON (~/.config/ugabuga/history.json), exibindo recordes de WPM, precisão média e um gráfico em ASCII com o histórico dos últimos testes.
  • Suporte Bilíngue: Interface disponível em Português e Inglês, com tradução dinâmica de menus, estatísticas e dicas de digitação.
  • Temas e Dicas: Temas de cores selecionáveis (Carbon, Dracula, Nord e Sakura) e um carrossel interativo com dicas ergonômicas e técnicas de digitação (posição das mãos no Home Row, memória muscular, etc.).

Desafios Técnicos:

  • Desenvolvimento de TUI com Bubble Tea: Uso do framework Bubble Tea e da biblioteca Lip Gloss (da Charm) seguindo a Elm Architecture, mantendo estado, eventos do teclado e ciclo de renderização bem separados.
  • Métricas e Concorrência: Controle de timers assíncronos para testes por tempo e cálculo contínuo de WPM líquido, bruto e porcentagem de acurácia a cada tecla pressionada.
  • Renderização e Compatibilidade de Terminal: Criação de componentes visuais em texto (como o gráfico de desempenho e as quebras de linha dinâmicas) com boa legibilidade em diferentes tamanhos de janela e emuladores de terminal.