1O problema
Muitos profissionais já entendem bastante inglês — leem artigos, assistem a palestras, acompanham a área no idioma todos os dias. O que trava não é a gramática: é produzir as palavras certas na hora certa, numa reunião, num e-mail ou numa candidatura. O vocabulário de que precisam é específico do trabalho deles, e cursos de inglês genéricos raramente cobrem isso.
Há uma segunda armadilha: consumir conteúdo em inglês parece estudar, mas não basta. Ler muito constrói reconhecimento, não a capacidade de usar as palavras você mesmo. Queríamos um app que transforme esse consumo diário num repertório de verdade, utilizável — palavras que você consegue de fato produzir, não só reconhecer.
2A stack
A de um produto é o conjunto de peças de software que o sustentam. Vamos percorrer a do IdLingo e, mais importante, por que escolhemos cada peça — as decisões importam mais do que os nomes.
O app inteiro é escrito em : a tela, a lógica dos bastidores e até a descrição da infraestrutura na nuvem usam a mesma linguagem. Por quê? Porque uma linguagem só no projeto inteiro faz as peças compartilharem definições e pegarem os erros umas das outras antes de qualquer coisa rodar. TypeScript é, em termos simples, uma versão mais rígida do JavaScript que avisa dos erros com antecedência em vez de deixá-los estourar ao vivo.
Ele roda sobre um esquema na nuvem: não há servidores ligados dia e noite, o código roda sob demanda e a capacidade encolhe para quase nada quando está ocioso, então o custo acompanha o uso real. Isso vem com uma armadilha, porém — e o diagrama abaixo mostra a solução que escolhemos.
O código serverless pode subir muitas cópias de si mesmo ao mesmo tempo, e cada cópia querendo sua própria conexão pode esgotar o limite que o banco permite. O divide um conjunto pequeno de conexões entre todas essas cópias, para o banco nunca ser sobrecarregado.
Para o armazenamento escolhemos um (Aurora Serverless v2, rodando PostgreSQL) em vez de um de chave-valor. Um banco relacional é um conjunto de tabelas que se referenciam — imagine as abas de uma planilha, ligadas por IDs. Escolhemos ele porque nossos dados são uma teia de relações (as pessoas se ligam às palavras que sabem, as palavras aos materiais de onde vieram, e a uma trilha de eventos de aprendizado). O produto ainda está em validação, então perguntas novas sobre os dados aparecem toda semana; num banco relacional essas consultas — agrupar, ranquear, achar o que está na hora de revisar — são triviais, enquanto um de chave-valor nos obrigaria a conhecer todos os padrões de acesso de antemão e tornaria as mudanças dolorosas. O Aurora Serverless v2 mantém a vantagem de custo do serverless, encolhendo quando ninguém está praticando.
Sobre essa base, mais duas peças completam a experiência: uma camada de IA que gera exemplos e avalia a prática, e um serviço de voz que lê qualquer palavra em voz alta com , sem precisar gravar uma voz humana para cada termo. Escolher blocos de nuvem já consolidados nos deixou gastar o esforço no que de fato é novo: a lógica de aprendizado.
3Como a IA foi usada
A IA trabalha nos bastidores, não como um chatbot com quem você conversa. Quando você registra um link que leu ou assistiu, a lê esse conteúdo e extrai o vocabulário que importa — palavras soltas e também as combinações de palavras que soam naturais juntas. Seu repertório se atualiza a partir do que você de fato consumiu.
Durante a prática, a IA gera frases de exemplo sob demanda e avalia quando você tenta usar uma palavra numa frase sua — o passo mais difícil e mais valioso. E, importante: o app continua totalmente usável sem IA: as rodadas com IA são uma camada extra por cima, nunca um muro na frente da prática básica.
De onde vem a IA? Por padrão, do , usando uma credencial da plataforma — então a IA fica simplesmente disponível, sem configuração do usuário. Quem quiser mais controle pode conectar a própria chave () de um provedor como OpenAI, Anthropic ou Google. O gate de uma feature com IA é só "a IA está disponível?", não um saldo de créditos — o antigo modelo de créditos foi aposentado.
4Principais decisões
Aprender a partir do que você já consome. Em vez de entregar uma lista fixa de palavras, o app parte dos artigos, vídeos e podcasts que a pessoa já acompanha. O raciocínio: vocabulário fixa quando é relevante para a sua vida real. Conteúdo que você mesmo escolheu já é significativo — a gente só transforma isso em estudo deliberado.
Recuperar antes de reconhecer. Seria mais fácil fazer um app de flashcards em que você só vira a carta e diz "essa eu sabia". Escolhemos o caminho mais difícil e organizamos o app inteiro em torno da recuperação ativa e da repetição espaçada, trazendo cada palavra de volta pouco antes de você esquecer. É menos confortável, e é o que de fato funciona.
Medir o conhecimento em graus, não em sim/não. "Aprendido" não é um interruptor — você pode reconhecer uma palavra hoje e falhar em produzi-la na semana seguinte. Por isso medimos cada palavra por grau, e o diagrama mais abaixo mostra os sete estados que usamos.
IA disponível por padrão, com a opção de usar a própria chave. A IA já vem ligada por padrão, então qualquer pessoa usa o app sem configuração. Para quem quer controle, existe a opção de . E a gamificação premia o aprendizado, não o volume: você ganha pontos por praticar e recuperar, nunca por consumir conteúdo de forma passiva.
5Sendo mais técnico…
Esta seção é para quem quer olhar por baixo do capô. Nada aqui é necessário para entender o produto — mas são estas as decisões que tornaram a lógica de aprendizado confiável.
O modelo de dados, em termos simples. Poucas tabelas carregam o produto inteiro. Uma guarda as pessoas; uma guarda o perfil de cada pessoa; uma guarda o catálogo de palavras e expressões; uma liga uma pessoa a uma palavra e registra o quão bem ela a conhece — passando por sete estados de conhecimento (veja o diagrama). Uma última tabela mantém um registro de eventos de aprendizado: cada evidência de prática, na ordem em que aconteceu. A tabela de estado responde "o quão bem essa pessoa conhece essa palavra agora?"; a de eventos é a trilha de "como chegamos aqui?".
Desconhecida — ainda não há evidência de que a pessoa encontrou a palavra.
Exposta — a pessoa já encontrou a palavra.
Reconhecida — reconhece a forma ou o significado quando a vê.
Evocada — recupera a palavra com pouca ou nenhuma ajuda.
Produzida — produz a palavra numa tarefa controlada.
Usada — usa de forma apropriada em comunicação real.
Estável — consistente ao longo do tempo, após prática espaçada.
Por que tabelas custom e chaves estrangeiras. As relações são impostas de propósito: existe exatamente um estado por par pessoa-e-palavra, então uma palavra não pode acidentalmente ter dois estados em conflito. A ligação entre tabelas é uma — uma coluna de uma tabela que aponta para uma linha de outra, que é justamente o que torna o banco "relacional". A tabela de eventos de aprendizado é só-acrescentar: nunca editamos o passado, acrescentamos um evento novo, e essa nova evidência é o que atualiza o estado atual.
Idempotência, para nada contar duas vezes. significa tornar uma operação segura para repetir: rode uma ou cinco vezes, o resultado é o mesmo. É o que nos protege quando a entrega a mesma tarefa duas vezes — o diagrama logo acima mostra onde ela encaixa.
Polling e um pipeline assíncrono. é quando o app pergunta repetidamente "já ficou pronto?". Usamos isso na prática de fala: você faz upload do seu áudio e depois o app faz polling pelo resultado da avaliação em vez de travar enquanto ele é calculado. A mesma ideia de "trabalhar de lado" move o pipeline de materiais — mostrado no diagrama abaixo.
Uma entrega cada tarefa "pelo menos uma vez" — às vezes a mesma tarefa chega duas vezes. Para o reprocessamento ser seguro, cada evento de aprendizado carrega uma chave de , para uma entrega repetida não contar a mesma prática duas vezes.
Todas essas peças conversam entre si por — a forma padronizada de dois sistemas trocarem pedidos e respostas.
6Aprendizados
A IA é a parte fácil; a ciência do aprendizado é a parte difícil. Fazer o modelo escrever uma frase ou extrair palavras é rápido. Decidir quando uma palavra deve voltar, o que conta como progresso e como manter a prática honesta deu muito mais trabalho do que qualquer prompt. O produto é a pedagogia, não a IA.
Nunca deixe a IA travar o básico. Aprendemos a desenhar cada recurso de IA como uma camada opcional por cima de uma prática que já funciona sozinha. Se a IA ficar indisponível por qualquer motivo, a pessoa continua aprendendo. Tratar a IA como um reforço, não como uma dependência, deixou o app inteiro mais robusto.
E um princípio que levamos desde o primeiro dia: a gamificação serve ao aprendizado, nunca o contrário. É tentador recompensar cada toque para inflar números, mas isso ensina a pessoa a farmar pontos, não a aprender. Respeitamos a privacidade e a LGPD e mantemos as recompensas atreladas ao comportamento de aprendizado real.