carlos@cesaints: ~/projects/exam-radar.md — zsh

Comando: cat projects/exam-radar.md

projects/exam-radar.md · 1,8 KB

Inteligência de concursos com a conta à mostra

Ferramenta própria, de uso interno, para decidir para qual concurso vale produzir material: ordena concursos por um score em cinco parcelas, extrai o padrão de cada banca a partir de provas anteriores e estima o que tem chance de cair, sempre com a conta escrita ao lado do número. Roda numa máquina só, com o banco num arquivo. É um protótipo funcional, sem resultado de negócio a mostrar.

abrir demonstraçãosimulação do sistema com dados fictícios · 5 telas

Papel
Autor da ferramenta, do produto aos testes
Período
ago/2026 – hoje
O que eu fiz

Eu: Produto, arquitetura, modelo de dados, a fórmula do score, o motor de incidência e a mistura dele com a estimativa do modelo, o portão de aprovação humana, as telas, os testes e o CI.

Projeto privado, descrito sem identificar cliente, produto ou empresa.

Diagrama

Do texto colado à estimativa com a conta à mostra

As entradas são texto colado de editais e provas e um manifesto de pesquisa validado por contrato. O app Next.js roda só em localhost, sem login, com SQLite num arquivo. Nele, um motor de incidência só com aritmética, um score com parcelas explicáveis e um roteador de provedores por tarefa; o roteador chama provedores gratuitos, um modelo local e o pago, este com teto. A estimativa junta a proposta do modelo e a conferência da aritmética e escreve a conta ao lado do número, e o material gerado só vira insumo depois de passar pelo portão humano.

Contexto

Antes de escrever uma única aula, é preciso decidir para qual concurso vale produzir e o que estudar primeiro dentro dele. Essa decisão costuma sair de intuição e de listas de temas quentes sem fonte. Esta ferramenta prepara essa decisão para a plataforma de estudos, de um jeito que dá para conferir.

O que eu construí

  • Radar de oportunidade. Importa uma pesquisa revisada, com fontes oficiais, datas, confiança e elegibilidade, e ordena os concursos por um score de 0 a 100 em cinco parcelas, cada uma com o máximo ao lado.
  • Acervo e padrão da banca. Provas anteriores coladas como texto viram questões classificadas por matéria e tópico. Sobre elas, um motor só com aritmética calcula frequência e tendência e monta o padrão de cada banca: como ela constrói a questão, as armadilhas que repete e o que mais cobra.
  • O que tem chance de cair. Com o edital colado, o modelo de linguagem propõe tópicos e probabilidades. O portão do edital zera o que não está no texto, a base histórica corrige a estimativa e a justificativa escreve a conta, citando as questões usadas como evidência.
  • Custo à vista. Provedores prontos, chamadas, falhas, tokens, latência e gasto do dia aparecem numa tela, com o teto do provedor pago.
  • Portão humano. O material gerado nasce para revisar e só vira insumo depois de uma aprovação com confirmação.

Status

Protótipo funcional de uso interno, rodando numa máquina. Não há resultado de negócio nem medida de acerto das previsões: a ferramenta mostra de onde vem cada número e não promete o que vai cair.

O que eu faria diferente

Escreveria o autoteste das fórmulas antes das telas. Foi ele que mostrou parcelas que não fechavam o total, e um script de preparo que nunca criava o banco passou seis dias sem que ninguém percebesse.

Restrições

  • Orçamento zero no uso diário, com provedores gratuitos, um modelo local e o pago atrás de um teto.
  • Uma pessoa e uma máquina, sem servidor para manter.
  • Nenhum número sem explicação. Toda estimativa mostra de onde veio.
  • Entrada por texto colado de editais e provas, sem raspar sites.
  • Nada gerado vira material do produto sem uma pessoa aprovar.

Decisões

Um arquivo SQLite, sem login e só na máquina local

Contexto
A ferramenta serve a uma pessoa, que decide o que produzir. Um servidor com contas e banco gerenciado seria custo e superfície de ataque sem ninguém para atender.
Escolha
SQLite num arquivo, aplicação acessível só pelo endereço local e sem login, por decisão registrada.
Ganhos
  • Nada fica exposto na rede, e o backup é copiar um arquivo.
  • Nenhuma infraestrutura para operar.
Custos
  • Abrir para outra pessoa exigiria autenticação e outro banco.

O modelo propõe, a aritmética confere

Contexto
Perguntar a um modelo de linguagem o que vai cair devolve números confiantes sem nenhuma evidência por trás.
Escolha
Um motor de incidência só com aritmética (peso por recência com meia-vida de quatro anos, tendência por regressão linear e encolhimento para o meio quando a amostra é pequena). A probabilidade final mistura a estimativa do modelo com essa base, e o peso do histórico cresce com o acervo, até 60% com seis provas ou mais. Tópico que não está no edital é zerado.
Ganhos
  • Cada número pode ser refeito à mão a partir da justificativa escrita.
  • Amostra pequena puxa a estimativa para o meio, e não para 99%.
Custos
  • As previsões ficam menos confiantes e só valem alguma coisa com acervo de provas.

Score explicável, separado da confiança nas fontes

Contexto
Um único número de oportunidade escondia como tinha sido montado, e um dado ausente derrubava a nota sem aviso.
Escolha
Cinco parcelas com o máximo ao lado (público, dinheiro, urgência, busca e espaço), piso declarado para dado ausente, e confiança das fontes e elegibilidade mostradas à parte. A tela diz que nenhum número ali é probabilidade de venda.
Ganhos
  • Dá para discordar de uma parcela sem jogar fora o resto.
  • O autoteste confere que as parcelas somam o total.
Custos
  • Os pesos continuam sendo um julgamento meu, só que agora visível.

Roteador de provedores com teto de gasto

Contexto
Provedores gratuitos batem limite, caem e devolvem JSON malformado, e o pago não pode virar uma conta surpresa.
Escolha
Uma fila por tarefa com cinco provedores. Limite, erro de servidor e timeout passam ao próximo; erro de credencial não. O pago só entra com teto diário maior que zero, e toda tentativa fica registrada com tokens, custo e latência.
Ganhos
  • O uso diário custa zero, e o custo aparece na própria tela.
  • A queda de um provedor não para o trabalho.
Custos
  • A qualidade da resposta varia com o provedor que respondeu.

Stack e por quê

Next.js 15 e React 19
Onze telas renderizadas no servidor, sem uma API separada para manter.
TypeScript
Tipos do banco até a tela nas fórmulas que mudam número.
Prisma com SQLite
Banco num arquivo, com migrações e 13 modelos.
zod
Contrato do manifesto de pesquisa importado.
Tailwind CSS
Tema escuro com contraste conferido nos rótulos e no botão principal.
GitHub Actions
Auditoria de dependências, checks de lógica, typecheck e build a cada push.

Resultados

  • 11 telas em 8 módulos, 13 modelos de dados e cerca de 6,2 mil linhas de TypeScript.

    repositório privado auditadoContagem no repositório(Auditoria do repositório privado, set/2026)
  • CI com auditoria de dependências, banco exclusivo, checks de lógica, typecheck e build, com actions fixadas por SHA.

    repositório privado auditadoWorkflow do repositório(Auditoria do repositório privado, set/2026)
  • 140 asserções sobre a lógica pura, sem chave de API e sem internet. O autoteste pegou seis defeitos que mudavam número na tela, entre eles parcelas do score que não somavam o total em 22,9% dos casos.

    declaradoRegistro de testes do projeto

Ângulo de segurança

Superfície de ataque

  • Texto colado de editais e provas, que segue para o modelo de linguagem.
  • Manifesto de pesquisa importado, com links de fontes.
  • Chaves dos provedores guardadas na máquina.

Controles implementados

  • Aplicação só no endereço local e banco num arquivo, sem nada exposto na rede.
  • Manifesto validado por contrato versionado, com limite de tamanho e de candidatos e só links oficiais em HTTPS.
  • Importação gravada numa transação única, que repetida não cria nem altera nada.
  • A importação não chama modelo nem abre os links que recebe.
  • Provedor pago só com teto diário, e cada chamada registrada com o custo.
  • Material gerado nasce não aprovado e só vira insumo depois de uma aprovação com confirmação.

O que eu testaria hoje

  • Instrução maliciosa escondida no texto colado de um edital ou de uma prova.
  • A aplicação subindo em todas as interfaces por engano e ficando alcançável pela rede local.
  • Chamadas concorrentes estourando o teto diário do provedor pago.

Evidências

  • repositório privado auditadoRepositório privado auditado(Auditoria do repositório privado, set/2026)