1

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.

Carregando publicação patrocinada...