Guylherme•Neves
Voltar
Guylherme Neves

Analista e desenvolvedor de sistemas QA, automações eengenharia de prompt

Foto de Guylherme Neves

Trabalho com tecnologia desde 2018. Meu foco é qualidade de software, análise de sistemas, desenvolvimento e engenharia de IA: entender o processo antes de propor a solução, construir o que ele pede e provar que funciona com testes, não com opinião.

Sou certificado ISTQB CTFL v4.0 e curso Análise e Desenvolvimento de Sistemas. Trato teste como parte do projeto desde o primeiro dia, não como uma etapa no fim.

Ver
projetos
PythonPyWebViewJavaScriptReactNext.jsNode.jsHTML5C++PostgreSQLn8nEvolutionChatwootLLMAutomaçãoMCPLighthouse

Portfólio

meu playground

O que eu faço

Qualidade de software

Análise e modelagem de testes, testes funcionais e de aceitação, registro e reteste de defeitos.

ISTQB CTFL v4.0

Análise de sistemas

Requisitos, mapeamento de processos e documentação de fluxos.

ponte entre técnica, gestão e clientes

Desenvolvimento

Python, JavaScript, React, Node.js e PostgreSQL.

desktop e web

IA e automação

Fluxos no n8n, APIs de LLM e ferramentas MCP.

modelos agindo em sistemas reais

Engenharia de prompt

Personas, instruções de sistema e bases de conhecimento.

avaliada com cenários de teste
Entendo de UX e UI o bastante para sentir as dores de quem desenha e de quem desenvolve, sem pesar para nenhum lado.

Vamos construiralgo que funcione de verdade(e passe nos testes)

guylhermepinheiro.dev@gmail.com
LinkedIn GitHub

CEI Editora

Estudo de casoAnálise / Desenvolvimento / Testes

Novo site institucional e catálogo de materiais, do diagnóstico à versão em validação.

Meu papel
Análise, desenvolvimento e testes
Ferramentas
React, Vite, React Router, Node.js, Express, PostgreSQL e Python
Situação
MVP em validação interna
Código
Repositório privado, a pedido da empresa

O problema

O site antigo era uma página única em WordPress com Elementor. Antes de escrever qualquer linha, medi a página inicial publicada e listei o que atrapalhava quem chegava nela.

  • Sem menu. Não havia navegação. Para chegar a uma seção, só rolando a página inteira.
  • Peso sem retorno. Eram 26 scripts e 11 folhas de estilo para uma página só.
  • Acessibilidade. 11 das 13 imagens estavam sem texto alternativo, incluindo a logo, que também era link e por isso ficava sem nome para leitores de tela.
  • Busca e compartilhamento. Não tinha meta descrição. O resumo usado no compartilhamento juntava texto de botão com o menu e tinha erro de digitação.
  • Conteúdo duplicado no código. Os três blocos de valores foram montados duas vezes, uma versão para cada tamanho de tela, o que dobra o trabalho a cada ajuste. E a seção da Coleção Criativa não tinha título, o que quebrava a hierarquia.
  • Links ambíguos. Três links diferentes levavam o mesmo texto, "Conheça o nosso catálogo completo".
  • Contato. Telefone, e-mail e Instagram estavam escritos sem link. O WhatsApp do botão principal usava um número diferente do rodapé.
  • Catálogo. Não tinha busca, filtro nem como ver o material por dentro antes de pedir.
  • Institucional. Não tinha endereço, política de privacidade nem termos de uso.

Medido na página inicial publicada em 2 de novembro de 2026.

Topo do site antigo da CEI Editora
Seção do Projeto Rever no site antigo
Seção de catálogo no site antigo, sem busca
Rodapé do site antigo com contatos sem link
O site antigo, numa tela de 1440 px: página única, sem menu, catálogo só com links e contatos escritos sem link.

A solução

Reorganizei o site em páginas com função clara e transformei o catálogo numa vitrine, para que o material pudesse ser melhor apresentado.

  • Sete páginas com menu. Início com abas por projeto, Sobre, Soluções Educacionais, página de cada projeto, Parceiros, Fale conosco e página 404. Endereços antigos redirecionam para os novos.
  • Catálogo com 82 materiais. Livros, manuais, jogos e kits, com busca por título, ano, componente ou autor e filtro por projeto.
  • Prévia em formato de livro. Página virando, miniaturas, zoom, tela cheia e busca dentro do texto. O texto vem de OCR em português, gerado em lote por ferramentas em Python.
  • Prévias protegidas. As páginas só abrem pelo leitor do site, com acesso temporário, limite de uso e marca d'água gravada na imagem.
  • Mapa de atuação. Mapa do Brasil com a presença por estado, alimentado pelo banco.
  • Contato que chega. Formulário validado no servidor, com limite de envios, e todos os canais clicáveis.
  • Nenhum número sem prova. Indicadores ainda não confirmados aparecem como "dado em validação", e depoimentos só entram se autorizados.
Busca no catálogo
Prévia em formato de livro

Arquitetura

NavegadorReact com Vite. Partes pesadas, como a página Sobre e o leitor, carregam só quando abertas.
APINode.js com Express: projetos, prévias, parceiros, atuação e contato.
BancoPostgreSQL, com certificado verificado. Sem banco, roda com dados em memória.
PréviasFerramentas em Python transformam a amostra em PDF em páginas WebP com marca d'água, miniaturas e texto por OCR.

Usei um servidor próprio em vez de um site estático por dois motivos: as prévias precisam de controle de acesso, e o catálogo precisa mudar sem mexer no código. Atualizar o catálogo não apaga contatos nem depoimentos.

O MVP foi validado num ambiente de testes. Depois de finalizado, o objetivo foi migrar tudo para a VPS da CEI, configurado de forma organizada e mantido pela equipe de TI da empresa.

Como eu testei

Utilizei o Opus 5.5 para acelerar o fluxo, não para decidir por mim: ela me ajudava a montar os roteiros de verificação, e eu conferia cada resultado. O Lighthouse mostrava onde estava o custo de verdade, como imagens sem dimensão definida, contraste e JavaScript sem uso, e eu ia direto nesses pontos em vez de otimizar às cegas.

Cada fluxo crítico virou um caso de teste com resultado esperado: buscar no catálogo, abrir uma prévia, virar página, buscar dentro do livro, enviar o formulário e tentar abrir uma prévia por fora do leitor. Passei todos em larguras de celular pequeno a monitor largo, para manter a responsividade no maior número de aparelhos possível, antes de liberar para a validação interna.

Mapa de atuação por estado, alimentado pelo banco

Resultado

Página inicialAntesDepois
NavegaçãoSem menuMenu com submenus
Páginas17, mais uma por projeto
Scripts261, o resto sob demanda
Folhas de estilo111
Imagens sem texto alternativo11 de 130
Meta descriçãoNão tinhaTem
CatálogoLinks para outras páginas82 materiais com busca e prévia

Mesmo critério nas duas páginas iniciais, em 2 de novembro de 2026.

O que eu faria diferente

Na versão final, eu levaria as páginas institucionais para o Astro e deixaria o React só onde existe interação: catálogo, leitor de prévias e formulário. Quase todo o site é conteúdo que muda pouco, então o visitante receberia o HTML pronto em vez de esperar o JavaScript montar a página. Isso pesa mais no celular, que é onde boa parte do público acessa.

O servidor de prévias e o banco continuariam iguais. A troca mexe só na camada que o visitante vê, sem refazer o que já foi validado.

Reaver

Sistema internoPython / PyWebView

Relatórios de avaliação que dizem o que deu errado, por quê, como e quando.

Meu papel
Idealizei e liderei o desenvolvimento
Ferramentas
Python e PyWebView
Onde vive
Hoje integrado ao Hub Rever
Código
Privado

Contexto

As avaliações são aplicadas pelos municípios. Os alunos respondem em cartões-resposta com QR code, lidos pela câmera do celular e corrigidos pela plataforma.

O Reaver nasceu como complemento desse processo, para a etapa que vem depois da correção: entender o resultado.

As gravações desta página mostram o app de verdade, rodando com um município, escolas e alunos fictícios.

O problema

Os dados saíam soltos e confusos. Não apontavam direto o erro, o motivo, como nem quando.

Montar essa leitura à mão custava horas e, muitas vezes, dias de trabalho de outro setor, que dependia dela para seguir com o próprio processo.

Por que Python

Python cabe em quase tudo, aceita quase tudo, é fácil de ler e é ótimo para automação. O time já usava a linguagem, o que tirou atrito da adoção e da manutenção.

Para a interface, o PyWebView abre uma janela com HTML e CSS usando o navegador que o sistema já tem. O app fica leve, roda sem servidor e não carrega um navegador inteiro junto, como o Electron faria.

Como funciona

ColetaBusca os dados das aplicações direto da fonte.
OrganizaçãoConfere, cruza e limpa o que chegou.
AnáliseIdentifica o erro, o motivo, como e quando.
RelatórioGera o documento pronto para quem decide.

O desafio mais difícil foi o primeiro passo: buscar informações que normalmente só sairiam num arquivo exportado, como CSV ou JSON, e organizá-las sem esse arquivo.

Modo Fluência: as quatro planilhas da avaliação de fluência leitora entram de uma vez e viram um relatório por rede, ano e turma.

Como foi validado

Fiquei à frente do projeto. A equipe de QA, desenvolvimento e testes validou cada parte. Depois, o Reaver passou pela validação de quem realmente usa os dados dos relatórios no dia a dia.

Foram duas rodadas de correção até o produto final.

Resultado

5.000+relatórios gerados
900+ hde trabalho economizadas
112 dias úteisde trabalho que viraram minutos

Os números são medidos automaticamente pela própria ferramenta. A mudança foi além do tempo: alterou a logística de todo um processo interno de outro setor, para melhor.

Começou como um trabalho simples, feito para resolver um gargalo. Depois foi melhorado e virou um projeto integrado ao Hub Rever. O Reaver não parou por aí: o potencial dele foi notado a ponto de se tornar uma parte indispensável do Hub.

O que eu faria diferente

Nada. O escopo, a linguagem e a validação em duas etapas, primeiro com a equipe técnica e depois com quem usa, funcionaram como planejado.

Chatbot com IA

Automação com IAn8n / Supabase / Chatwoot
AS
Ana SouzaSuporte · WhatsApp
Simulação

Ninguém fica sem resposta, e quem precisa de uma pessoa chega até ela.

Meu papel
Mapeamento, construção e testes
Ferramentas
n8n, Evolution API, Chatwoot, Supabase e API de LLM
Canal
WhatsApp
Código
Privado

O problema

Mais de 20 atendimentos ao mesmo tempo, quase todos com as mesmas perguntas.

Tudo passava por um número compartilhado, com login em vários aparelhos. Conversas se perdiam, prioridades eram esquecidas e, o pior, a pessoa do outro lado ficava sem a solução do problema dela.

A central foi pensada para atacar exatamente isso: não deixar ninguém sem solução.

Como funciona

EntradaEvolution API conecta o WhatsApp e entrega cada mensagem.
Orquestraçãon8n cadastra o contato, entende a pergunta e decide o caminho.
MemóriaSupabase guarda o contexto e o passo de cada conversa, então o bot sabe onde a pessoa parou.
RespostaA IA consulta a base de respostas validada pela equipe.
EquipeChatwoot reúne tudo numa caixa única, com histórico e transferência.

Quando a pergunta foge da base ou o caso pede uma pessoa, o bot transfere a conversa com o contexto, e quem atende não precisa perguntar tudo de novo.

Fluxo do chatbot no n8n: webhook do Chatwoot, filtro de evento, contexto e estado no banco, motor do bot, resposta e atualização do contato
Um recorte do fluxo real no n8n, da mensagem que chega no Chatwoot até a resposta e a atualização do contato. É só uma parte de um dos 7 workflows que compõem o chatbot.

Decisões

Escolhi o n8n por ser prático, ágil e visual. Com a ajuda de um modelo de linguagem, dá para sair do desenho para um fluxo funcionando rápido, e qualquer pessoa do time entende o que cada etapa faz só de olhar.

A parte difícil

Nada quebrou. O difícil foi estruturar tudo de ponta a ponta. São muitas variáveis e muitos tipos de atendimento, e precisei mapear absolutamente todos antes de escrever a primeira resposta.

Como eu testei

Testei com quem atende todos os dias. Levantei de onde saem as informações, em que formato chegam e o que a equipe responde em cada situação. A partir disso, escrevi as respostas corretas e montei a base de onde o bot consulta.

Cada tipo de atendimento virou um caso de teste com pergunta e resposta esperada, incluindo os casos que o bot não deve responder e precisa transferir. A central só foi para o ar quando passou nos dois lados.

Resultado

<10%das conversas vão para uma pessoa
1 minde tempo médio de resposta
300+autoatendimentos por semana

Projeto Rever

Garantia de qualidadeQA / Tester / Dev

Plataforma de recomposição das aprendizagens, do diagnóstico à ação.

Tipo
Sistema integrado de ensino
Meu papel
QA, tester e desenvolvimento
Público
Redes municipais de ensino, do 1º ao 9º ano
Alcance
Mais de 25 redes municipais

O que é

Um sistema integrado de ensino voltado para a recomposição das aprendizagens, o desenvolvimento da fluência leitora e a melhoria dos resultados nas avaliações externas.

Cada pessoa da rede tem o seu perfil, com permissões próprias: secretaria de educação, gestão da escola, coordenação, professores e alunos.

A gravação no topo é a porta de entrada da plataforma, com um acesso simulado e credenciais fictícias. O que fica depois do login não pode ser mostrado.

Como age

AplicaçãoAvaliações montadas a partir de um banco de questões alinhado à BNCC e ao SAEB.
LeituraCartões-resposta com QR code, lidos pela câmera do celular e corrigidos automaticamente.
IntervençãoRelatórios por rede, escola, turma e aluno mostram quem precisa de apoio.
AcompanhamentoA evolução entre avaliações orienta os próximos passos.

Além das avaliações, a plataforma reúne o registro da fluência leitora, o livro digital em HTML com recursos de acessibilidade, jogos e vídeos.

O que resolve

Tira a decisão pedagógica do achismo. A secretaria enxerga a rede inteira, a escola compara turmas e o professor vê em quais habilidades cada aluno travou, a tempo de agir no mesmo ano letivo.

Meu papel

Faço parte da equipe que garante a qualidade das entregas. Nada passa para a fase seguinte sem a nossa validação: casos de teste, registro de defeitos, reteste e aprovação com quem vai usar.

No dia a dia, dou suporte às redes que usam a plataforma, com conferência de documentos, processamento de dados e análise de ocorrências. Foi dessa rotina que nasceu o Reaver.

Como eu trabalho a qualidade

Não posso mostrar telas internas, então mostro o formato do trabalho. Os exemplos abaixo são sanitizados, com dados de demonstração e números fictícios, mas seguem o tipo de teste que fazemos no dia a dia.

Caso de testeCT-042Passou

Leitura de cartão-resposta pela câmera do celular

Objetivo
Garantir que o cartão lido pela câmera é ligado ao aluno certo e que as marcações viram respostas.
Pré-condições
Aplicação aberta para a turma de demonstração, cartões impressos pela plataforma e câmera liberada no celular.
Passos
  1. Abrir a leitura de cartões no celular.
  2. Enquadrar um cartão preenchido na câmera.
  3. Aguardar a leitura automática.
  4. Abrir as respostas do aluno.
Esperado
Aluno identificado pelo QR, situação "processado" e respostas iguais às marcadas no cartão.
Técnica
Partição de equivalência: cartão legível, rasurado, de cabeça para baixo, sem QR e com pouca luz.
Relatório de defeitoDEF-117Corrigido e retestado

Leitura pela câmera não conclui em um modelo de celular de entrada

Severidade
Alta. A leitura é feita só pela câmera do celular, então quem tem esse aparelho fica sem como enviar os cartões.
Ambiente
Homologação, turma de demonstração. Celular de entrada (modelo fictício X-20), Android 11, câmera traseira de 8 MP.
Reproduzir
  1. Abrir a leitura de cartões no X-20.
  2. Enquadrar um cartão legível, com boa luz.
  3. Aguardar a leitura.
Esperado
Leitura em poucos segundos, como nos outros aparelhos, ou um aviso claro do que ajustar.
Obtido
A câmera não focava o QR code e a leitura ficava girando, sem mensagem. Em outros três modelos, o mesmo cartão era lido normalmente.
Evidência
Gravação da tela, modelo e versão do sistema do aparelho e o cartão de demonstração usado.
Leitura de cartões
Cartão de cabeça para baixoVire o cartão e enquadre de novo.
Rasura na questão 3Cartão separado para conferência manual.
Leitura concluídaAluno identificado pelo QR, 6 respostas.
Três cartões, três respostas da câmera. Um entra de cabeça para baixo, outro chega rasurado e o terceiro passa. Cada caminho tem um resultado esperado no caso de teste, inclusive os que o sistema deve recusar com uma mensagem clara.Simulação com cartões de demonstração.

A testar 3

Exportar relatório em PDFCadastro de alunos em loteFiltro por componente

Em teste 2

Relatório por turma (BNCC)Inserir fluência leitora

Defeito aberto 1

Ordem dos alunos no portfólio

Reteste 1

Leitura no celular X-20 (DEF-117)

Aprovado 4

Login por código de acessoLeitura de QR codeEvolução entre avaliaçõesBanco de questões

Quadro de acompanhamento de uma entrega, com nomes de funcionalidades genéricos e contagens de exemplo.

Capri

Projeto pessoalAtomS3 / Xiaozhi / MCP

Uma assistente de voz de mesa, com rosto, personalidade e mãos no meu computador.

Hardware
M5Stack AtomS3 e Atomic Echo Base, case impressa em 3D
Software
Firmware xiaozhi-esp32 personalizado, núcleo em Python com ferramentas MCP e app de controle para Windows
Dados
SQLite local e Neon
Custo
Zero, fora o aparelho

O que é

Uma deskbot feita com AtomS3 e Echo Base, inspirada na Capri, o constructo do universo de Cyberpunk. Virou minha parceira de trabalho, desenvolvimento, estudos, lembretes e conversa.

Ela tem 21 expressões no rosto, a boca acompanha o som da fala e a tela apaga sozinha quando ela fica em silêncio.

Por que existe

Sem copiar e colar, sem anexar arquivo. Só: "Capri, me ajuda com isso."

Eu queria um assistente que me ajudasse só pela fala. E a Capri porque eu curto o universo de Cyberpunk: o que seria melhor que uma IA que "não é uma IA", de personalidade forte?

Restrições

  • Custo zero. Nada de API paga, assinatura ou servidor alugado.
  • Privacidade, até onde dá. Pastas sensíveis bloqueadas, nada pessoal no repositório e credenciais cifradas para o meu usuário do Windows.
  • Pedidos compostos. "Abre o YouTube, coloca o volume no 10 e em tela cheia" precisa virar três ações, na ordem certa.
  • Sem LLM rodando no PC. Nenhum modelo pesado residente. As ferramentas só rodam quando são chamadas.
  • Consciência de mundo e espaço. Entender o contexto: a janela ativa, o documento aberto, o que está na tela e o que foi copiado.

Como resolvi

AparelhoCapta a voz, mostra o rosto e reage ao toque duplo.
Servidor XiaozhiFala, persona e escolha da ferramenta, sem custo.
Núcleo no PCPonte MCP por WebSocket e servidor de ferramentas em Python.
AçõesJanelas, arquivos, terminal, lembretes e memória.

O núcleo expõe as ações do PC como ferramentas MCP, e a IA decide quando usá-las. Um índice de nomes em SQLite, atualizado por eventos do Windows, deixa a busca de arquivos instantânea. Um supervisor mantém tudo de pé e reinicia sem duplicar processos.

A segurança veio junto: permissões por pasta, confirmação local para ações de alto impacto e operações reversíveis com cópia. Texto lido de uma página, da tela, de um documento ou do que foi copiado nunca vira ordem.

O app no PC

Para não depender de terminal no dia a dia, criei o Project Capricorn, um app para Windows que mostra o estado da Capri, liga, para e reinicia, ajusta as mensagens espontâneas, acompanha o aparelho pela USB e lista tudo o que ela fez.

A estética é minha do começo ao fim: o logo, a paleta neon em verde e magenta, a interface e a abertura com falha de sinal, pensadas para parecer uma peça do mesmo universo da Capri.

A abertura: só o logo, vazado sobre a área de trabalho, sem moldura nem fundo. A falha de sinal dura 3,6 s, o logo colapsa numa linha e o painel aparece. Um clique pula.
  • Leve de verdade. Na bandeja, ocupa de 25 a 40 MB de RAM. A janela só existe enquanto está aberta e, ao fechar, devolve a memória.
  • Modelo 3D só com CSS. Os 11 aparelhos da lista de compatibilidade viram modelos que giram pela placa de vídeo e param quando a janela perde o foco.
  • Ícone pensado para cada tamanho. Em 16, 20 e 24 px o chip foi redesenhado pixel a pixel, porque a arte reduzida virava borrão na bandeja. O ícone fica cinza quando a Capri cai.
  • Atualização sem console. O app consulta o GitHub, lista o que mudou, atualiza escondido e reabre na versão nova. O mesmo caminho volta para a versão anterior.
  • Nada vem da internet. Fontes e imagens vão junto com o app.
O app de controle da Capri para Windows, com dados de demonstração: painel, o modelo 3D do aparelho, o console ao vivo pela USB, registros e configurações.

O que quebrou

Cada nome muda conforme a ocasião. A mesma janela, o mesmo botão ou a mesma pasta aparecem com nomes diferentes em situações diferentes, e a Capri precisa achar o alvo certo em todas elas. A solução foi buscar por equivalência, sem depender de acento, caixa ou do texto exato, e cobrir cada variação nos testes.

Como eu testei

145cenários no laboratório
21só de pedidos compostos
448testes automatizados no núcleo

Montei um laboratório em que um modelo faz o papel do cérebro do Xiaozhi, com a mesma persona e as mesmas ferramentas. Cada ferramenta é simulada, o resultado volta para o modelo e os pedidos compostos seguem até o fim. No final, as chamadas são comparadas com o esperado e cada área recebe uma nota. As frases dos cenários são inventadas, então nada pessoal entra no teste.

Também separo os níveis de evidência, porque eles não são a mesma coisa: entregue, instalado, testado no PC e testado por voz no aparelho. Uma mudança só conta como pronta no último.