Pitch QuickQuiz para revisar programação com desafios curtos
Criei o QuickQuiz, um projeto para revisar conhecimentos de programação por meio de quizzes curtos. Você escolhe um tópico e uma dificuldade, responde às questões e consulta o resultado. A ideia é encontrar aqueles assuntos que pareciam dominados, mas ainda merecem uma revisão.
Hoje já existem tópicos como Git, JavaScript, Go, PHP e C#, com conteúdo em português e inglês. Dá para jogar pelo navegador, sem cadastro.
A motivação veio do meu próprio estudo: queria transformar assuntos que estou aprendendo em exercícios de memorização. O projeto também virou uma oportunidade de praticar arquitetura, operação e adoção de IA em uma aplicação real.
Como estou começando a compartilhar o QQ, queria contar um problema que apareceu no caminho e a mudança que fiz para resolvê-lo.
Quando o editor começou a ficar lento
O projeto tem uma SPA em Vue/Quasar, uma API em Go e um gerenciador de conteúdo em Symfony. No gerenciador, organizo temas, tópicos, questões, alternativas e traduções.
O conteúdo era mantido em arquivos JSON no S3. A API carregava esses arquivos em memória ao iniciar e usava essa cópia para atender os jogadores.
Já o gerenciador precisava listar questões, calcular quantidades, validar conteúdo e permitir edições. Para montar algumas páginas, ele listava objetos no S3 e lia arquivos repetidamente dentro da mesma requisição. Conforme o catálogo cresceu, navegar no editor ficou demorado.
Uma tela aparentemente simples acabava dependendo de várias operações remotas. Esse foi o ponto em que a forma de persistir e consultar o conteúdo precisou mudar.
Separar edição de publicação
Migrei a edição de temas, tópicos, questões e alternativas para PostgreSQL. As páginas do gerenciador passaram a consultar o banco, inclusive para filtros e contagens, sem precisar ler objetos no S3 durante a navegação normal.
Mantive os JSONs como formato de publicação consumido pela API. O fluxo ficou assim:
Gerenciador -> PostgreSQL -> publicação dos JSONs -> S3
|
v
API carrega ao iniciar
|
v
SPA do jogador
Isso permitiu melhorar a experiência de edição preservando o contrato que a API e as SPAs já utilizavam. A API dos jogadores continua consultando o catálogo em memória. O PostgreSQL fica responsável pelo conteúdo que está sendo gerenciado.
Na migração, também comparei o conteúdo importado com os arquivos originais e validei a publicação dos JSONs. A melhora na navegação do gerenciador foi perceptível assim que a mudança entrou em produção.
O cuidado que essa separação exige
Gravar no banco e publicar no S3 são etapas distintas. Por isso, o gerenciador registra a revisão do conteúdo e o resultado da publicação. Se a publicação falhar, essa situação precisa ficar visível e permitir uma nova tentativa.
Existe ainda uma limitação operacional: a API carrega o catálogo na inicialização. Para novas questões aparecerem no jogo, hoje preciso recarregar o serviço depois da publicação. O estado das partidas fica no Redis, o que permite preservar as sessões ativas durante esse reinício.
O principal aprendizado foi olhar separadamente para as consultas do editor e para a leitura feita durante o jogo. O mesmo conteúdo tinha necessidades diferentes em cada parte da aplicação, e essa diferença passou a orientar a persistência.
Onde entra a inteligência artificial
O QQ também faz parte do meu estudo sobre adoção de IA em aplicações. Estou explorando seu uso em dois momentos.
No gerenciador, a IA ajuda a criar enunciados e alternativas. Posso revisar e editar as sugestões antes de salvá-las e publicá-las. Esse conteúdo passa a integrar o banco de questões utilizado nas partidas, permitindo reaproveitar a mesma geração em várias rodadas.
Ao final do quiz, o jogador pode solicitar uma explicação para uma questão que errou. A correção já foi determinada pelo gabarito; a IA recebe a questão e suas alternativas para explicar a resposta correta e os conceitos envolvidos. As explicações ficam em cache e podem ser reutilizadas enquanto forem compatíveis com o conteúdo da questão.
Essa separação tem sido uma forma de estudar onde a geração antecipada é suficiente e onde uma chamada sob demanda acrescenta valor, considerando custo, tempo de resposta e qualidade do conteúdo.
Para experimentar
O QuickQuiz está disponível em dev.quickquiz.com.br. Git ou JavaScript são dois tópicos para começar.
Gostaria de ouvir principalmente se as perguntas estão claras e se o nível de dificuldade corresponde à sua expectativa. Se alguma questão parecer ambígua ou incorreta, pode comentar o tópico, a dificuldade e o enunciado para eu localizar e revisar.
Também tenho interesse em saber como vocês lidam com a separação entre edição e publicação de conteúdo e em quais etapas têm encontrado valor no uso de IA.