DevLingo
Aprenda a programar · 404 questões · 8 trilhas
Jogar no navegadorgrátis, sem instalar nada Baixar para Android
140.85 00:00 procurando o estúdio…
Tr∅nikAtDevLingo · guia
Tr∅nikAt · online
404
questões
8
trilhas
407
testes
95,6%
cobertura · set/2026

As trilhas

PythonExibir valores, contas, decidir, strings e listas
JavaScriptVariáveis, comparação, funções e arrays no navegador
JavaA classe, o main, tipos primitivos e igualdade
FrameworksReact, Vue, Svelte, Next, Nuxt e Astro — e qual é mais fácil
BackendCliente e servidor, HTTP, REST, bancos e autenticação
Qualidade de SoftwarePrincípios, níveis, ciclo do bug e técnicas de teste
SeleniumLocalizadores, esperas, Page Object e teste instável
Agentes de IAO laço, ferramentas, MCP, orquestração e os limites

Por que ele existe

O DevLingo é um app para aprender programação no formato do Duolingo, pensado desde a primeira linha para quem fala português do Brasil. Dá para jogar no Android e no navegador, e o progresso acompanha você de um para o outro.

Nenhuma resposta de escrita exige caractere acentuado. Em teclados de celular, ç e ã exigem toque longo, e a avaliação deve medir o conhecimento de programação, não a destreza no teclado.

Uma resposta incorreta não encerra a questão. Na múltipla escolha, a alternativa escolhida é eliminada e o aluno tenta novamente. Nas questões de escrita, a dica é aberta a partir do segundo erro. Ao final, a explicação completa é sempre exibida.

Quem construiu

O DevLingo foi desenvolvido por Gustavo Anderson, que atua no limiar entre a qualidade de software e a aplicação de inteligência artificial no desenvolvimento de soluções inteligentes.

O projeto mantém em produção um servidor MCP (Model Context Protocol) no endereço mcp.devlingo.app.br, protegido por autenticação do Cloudflare Access. Ele expõe as regras de qualidade do banco de questões do DevLingo, as mesmas aplicadas no pipeline de CI, como seis ferramentas que um agente de IA consulta antes de propor uma lição nova.

6 ferramentas, todas somente leitura validar_licaoimpressao_digitalconferir_teclado topicos_da_trilhacriterios_de_revisaomaterial_para_revisao

Nenhuma ferramenta grava. Mesmo com a credencial comprometida, o servidor não permite alterar o conteúdo, e dois testes no CI reprovam se surgir uma ferramenta com nome de escrita.

Defeitos encontrados e corrigidos

Alguns dos defeitos identificados ao longo do desenvolvimento, com a causa, a correção aplicada e a evidência de que ela funciona. Cada correção ganhou um teste automatizado, verificado removendo a correção de propósito para confirmar que o teste reprova.

O processo, gravado Reprodução do defeito site mais largo que o celular com o código anterior à correção (commit 525cdca), num Chrome com tela de 390 px. O arrasto é um toque simulado, e as medidas que aparecem na tela são calculadas durante a gravação.
  1. arrastar a página para o lado
  2. medir a tela contra a página
  3. destacar o elemento culpado
  4. repetir o gesto na versão corrigida
Resposta errada aceita como certa
Problema
A correção removia todos os espaços, e consttotal=0 era aceito como const total = 0;.
Correção
Passaram a ser ignorados apenas os espaços junto a pontuação e operadores. O espaço entre palavras é exigido.
Evidência
35 casos num arquivo lido pelas implementações em Python e em Dart. O CI reprova se as duas divergirem.
Posição perdida ao consultar a aula
Problema
Quem abria a aula na questão 7 voltava para a 5. A tela de exercício era recriada com o índice de abertura da lição.
Correção
Posição, texto digitado e estado da questão foram movidos para o componente que sobrevive à troca de tela.
Evidência
Teste de widget com enunciados distintos por questão, que reprova se a tela voltar para a questão errada.
Histórico de respostas corrompido
Problema
Responder de novo uma questão já concluída gravava uma partida inexistente e zerava o contador de tentativas.
Correção
A sessão da questão passou a ser preservada inteira entre as telas, e não campo a campo.
Evidência
O teste mede as tentativas gravadas. Sem a correção, registrava 1 onde deviam ser 2.
Gráfico de estatísticas invisível
Problema
Num Xiaomi 15T Pro, a barra de desempenho não aparecia. Um ColoredBox sem filho recebia altura zero dentro de um Row.
Correção
crossAxisAlignment: stretch no Row.
Evidência
A captura de tela, medida com Pillow, tinha 105.300 pixels da cor do fundo onde deviam estar três faixas. O teste mede a altura renderizada e reprova com 0,0 sem a correção.
Site mais largo que o celular
Problema
Numa tela de 390 px, esta página media 565 px e podia ser arrastada para o lado. Uma sombra decorativa se estendia além das bordas.
Correção
A sombra passou a ser ancorada nas bordas da tela.
Evidência
Inspeção automatizada no Chrome via DevTools Protocol, comparando a largura da página com a da tela. Antes 565, depois 390.
Limite de uso que não limitava
Problema
O limitador nativo da Cloudflare, configurado para 10 perguntas por minuto ao mascote, deixava passar cerca de 87.
Correção
Substituído por um contador em Durable Object, com contagem exata por IP.
Evidência
Teste de carga disparado de outra máquina. A 11ª pergunta recebeu HTTP 429, e o laço sequencial passou exatamente 10 por minuto.

Como a qualidade é garantida

Cada envio de código para o GitHub dispara o GitHub Actions, que roda duas esteiras em paralelo. Se uma única checagem falha, a execução fica vermelha e aponta o teste que caiu, com o erro.

São 407 testes automatizados no app, de dois tipos.

Testes de lógica Conferem as regras sem desenhar tela nenhuma. Como a resposta digitada é normalizada, quando uma alternativa é eliminada, se a atualização do banco preserva o progresso, se a sincronização entre aparelhos não duplica partida.
Testes de tela Montam cada tela num ambiente simulado e conferem o que aparece e o que acontece ao tocar. Botões, mensagens, cores, e até a altura de uma barra que um dia foi desenhada com zero pixels.
Validador de conteúdo Cada questão passa por regras que nasceram de defeitos reais. Gabarito concentrado numa letra, a mesma resposta cobrada duas vezes, aula que não prepara o que a lição cobra.
Contrato entre linguagens A regra que corrige a resposta existe em Python e em Dart. Um arquivo com 35 casos é lido pelos dois lados, e se eles discordarem, o CI reprova.

Toda regra foi provada reprovando de propósito, porque um portão que só sabe aprovar não protege nada. A cobertura é de 95,6% das linhas em 28 dos 33 arquivos do app, medida em 16/09/2026. A divisão entre lógica e tela é de 25/09/2026.

Tr∅nikAt · gato branco bípede ciberneticamente modificado, com visor verde.
Código sob licença MIT · conteúdo sob CC BY-NC-ND 4.0 · o mascote e o nome são reservados.
github.com/gustavoanderson/DevLingo