Carlos Batista
01

Perfil — Desenvolvimento ponta a ponta

Dados demais, memória de menos.

Carlos Batista cobre o ciclo inteiro de um produto — mobile, backend, frontend, CI/CD e o servidor onde tudo roda. E resolve o problema que derruba a maioria deles: volume de dado maior que a memória disponível.

Retrato de Carlos Batista
Passe o cursor — a tinta fechaAlfenas, MG

Nesta edição

Sumário — 02
IO trabalho04IIEntregas12IIIFicha técnica18IVPortfólio22VColuna28VICréditos34VIIContato40

I

Onde o gargalo aparece, é onde eu entro.

Quatro tipos de problema aparecem em quase todo projeto que eu pego. Os três primeiros têm a mesma raiz: dado demais passando por um lugar pequeno demais.

01

Volume grande, memória constante

Pipelines que leem, transformam e escrevem em fluxo. O consumo não cresce junto com o arquivo.

02

O primeiro byte antes do último cálculo

Relatório em stream: o usuário já está lendo enquanto o servidor ainda monta o resto.

03

Sistemas que não conversavam

GraphQL, FTP, filas e formatos legados costurados numa camada só, sem duplicar regra de negócio.

04

IA ligada ao que já existe

Modelo conectado ao produto de verdade: busca na base do cliente e tarefa executada, não resposta genérica.

II

Quatro coisas que saíram de produção

Otimização sem número atrás é opinião. Cada item desta lista mudou um gráfico: memória que parou de subir, tempo que parou de escalar com o volume, código que deixou de existir em duplicata. O resto do trabalho é o de sempre — ler o problema com calma antes de escrever a solução.

Ou o gráfico de memória caiu, ou não conta.

O hábito vem de antes: alguns anos em sala de aula ensinando computação. Explicar árvore B+ para uma turma de ensino médio e explicar arquitetura para um time são a mesma tarefa — pegar algo complexo e transformar numa narrativa que a outra pessoa acompanha.

01

Sistema de relatórios em NestJS

Processamento via stream no lugar de carregar tudo em memória. Recurso previsível, independente do tamanho do lote.

02

Camada única para GraphQL e FTP

CSV e JSONL entrando por caminhos diferentes e saindo pelo mesmo contrato. Duplicação eliminada nas duas pontas.

03

Cultura de stream no time

Padrões documentados e teste de stress no CI — o gargalo aparece antes do deploy, não depois.

04

Pool de instâncias quentes em Lambda

Cold start de três segundos virando milissegundos nas chamadas seguintes, com workers assíncronos em Go.

III

Ficha técnica

O que roda em produção hoje, por disciplina. Da interface ao servidor, e do modelo de linguagem ao de voz.

Frontend

React e Next.jsSSR

Aplicações modernas com atenção a performance e SEO.

TypeScriptEstrito

Tipagem forte para manutenção de longo prazo.

TailwindCSSTokens

Estilização responsiva com design system escalável.

Mobile

FlutterMultiplataforma

Um código para Android e iOS, com widget próprio quando o padrão não serve.

React NativeJS compartilhado

Reaproveita no aplicativo o que já existe em React na web.

PublicaçãoLojas

Build assinado, versionamento e envio para as lojas.

Backend

Node.js e NestJSStreams

APIs escaláveis com arquitetura limpa.

Laravel e PHPLegado

Sistemas de negócio e integrações complexas.

GoConcorrência

Workers assíncronos e processamento paralelo.

MicrosserviçosFilas

Arquitetura distribuída com mensageria e contratos claros.

Infraestrutura

DockerContainers

Do ambiente local ao deploy, mesmo comportamento.

CI/CDAutomação

Pipelines com teste de carga antes do release.

AWSLambda, S3

Serviços em nuvem dimensionados por uso real.

IA aplicada

LLM localSem nuvem

Modelos de texto rodando na máquina, sem mandar dado para fora.

Integração por APILLM

Modelo ligado ao produto com controle de custo e de contexto.

RAGBusca semântica

Resposta ancorada na base do cliente, não no que o modelo supõe.

AgentesExecução

Fluxos em que o modelo executa a tarefa e devolve resultado verificável.

Arquitetura de raciocínioEtapas

Organização do pensamento do modelo em passos verificáveis, em vez de uma resposta só.

Memória de longo prazoPesquisa

Modelo experimental próprio, em desenvolvimento.

Voz e áudio

Execução localSem API

Modelos rodando na própria máquina: sem custo por token e sem dado saindo.

Perfis de vozTimbre próprio

Criação e ajuste de vozes para uma marca ou um personagem.

Narração longa1h+

Histórias inteiras geradas sem a voz derivar ou perder consistência.

Emoção na falaMarcação

Texto anotado para controlar entonação, pausa e intensidade.

Tradução vocalVoz preservada

Fala traduzida mantendo o timbre de quem falou.

Análise de áudioDiarização

Separação de vozes, transcrição e leitura de faixas complexas.

0+Anos de experiência
0+Projetos entregues
0+Tecnologias em produção
0kLinhas de código

IV

O que está no ar

01AtaZapPlataforma que converte conversas de WhatsApp e capturas de páginas web em minutas de atas notariais, com fluxo de custódia, transcrição de áudios e geração de DOCX no modelo do cartório.NestJS · React · Tailwind · Docker
02FaqAIFAQ automatizado que responde na hora, 24 horas por dia, com voz ajustada à marca e integração em poucas linhas.Next.js · NestJS · Docker
03Dívida PúblicaDashboard de calculo da dívida pública atualizada.Clickhouse · Html · CSS · JS · Nestjs · Redis
04EduPillPirulas de conhecimento sobre software em tempo ocioso.
05PiareAnalise de perfil de voz e criação de passo a passo de atividades para melhorar a comunicação para diversas áreas.Whisper · Serviços de geração de Voz · Geração de PDF complexos · Redis · Flutter · Python · Nestjs · Tailwind
06Novos**Estou fazendo parseamento de alguns projetos logo terão mais***

V

Registro do que deu trabalho

Textos sobre problemas que eu resolvi na marra — arquitetura, performance e, cada vez mais, IA aplicada.

Textos sobre problemas que eu resolvi na marra — arquitetura, performance e, cada vez mais, IA aplicada.

Ver todas as publicações
Publicação mais recenteMonorepo com npm workspaces e Turbo: o que ninguém te conta sobre React 19, hoisting e shared packagesSemana passada precisei resolver um problema que parecia simples: fazer um frontend Next.js consumir tipos TypeScript de um pacote shared, que também era usado pelo backend pipeline. Os dois viviam no mesmo repositório. Deveria ser trivial. Não foi. O que aprendi nesse processo sobre npm workspaces, Turborepo e os edge cases de monorepos com versões conflitantes de React é o que quero compartilhar aqui. Não como tutorial passo-a-passo, mas como registro do que realmente acontece quando você 8 de jun. de 20264 minmonorepo · typescript · nextjs · devops7 de jun. de 2026Como Dar Aula Me Ensinou a Construir Dashboards MelhoresVocê já parou pra pensar que um bom professor e um bom engenheiro de dados fazem essencialmente a mesma coisa? Os dois pegam algo absurdamente complexo e transformam numa narrativa que faz sentido pra quem está do outro lado. Passei alguns anos em sala de aula antes de migrar completamente pra tecnologia, e essa conexão entre ensino e dados só ficou mais clara com o tempo. Quando eu preparava uma aula sobre estruturas de dados, meu trabalho não era mostrar a implementação de uma árvore B+ — erdados · educação · engenharia de dados · product thinking  ·  5 min31 de mai. de 2026Lambda Warm Instances: Pool de Instâncias e Processamento Assíncrono em GoA primeira invocação de uma Lambda leva 3 segundos. A segunda também. A terceira também. São 3 segundos de cold start toda vez porque cada invocação pode subir um container do zero. Em um fluxo com 20 chamadas encadeadas, são 60 segundos só de overhead de inicialização. A ideia do pool é manter instâncias prontas para reutilização: a primeira chamada paga o cold start, as próximas reutilizam a instância aquecida e respondem em milissegundos. Combinado com processamento assíncrono via workers, o go · concurrency · performance · programming  ·  5 min30 de mai. de 2026WebSocket para Monitorar IA em Tempo RealQuando uma IA está "pensando", o que exatamente está acontecendo? Na maioria dos chatbots, você manda uma mensagem e espera. Talvez veja um "digitando..." genérico. Mas e se você pudesse ver em tempo real cada etapa: a classificação de intenção, a extração de triplas, a busca web, a criação de mundos, as inferências simbólicas? Isso transforma debugging de "por que respondeu errado?" em "ah, a extração falhou nesse passo específico". Implementei comunicação via WebSocket onde o backend emite epython · websocket · realtime  ·  4 min27 de mai. de 2026Feedback Loop em Orquestradores de Agentes: Aprendizado sem Machine LearningToda vez que o orquestrador seleciona um agente e o resultado é bom, essa informação se perde. Na próxima requisição similar, ele toma a mesma decisão do zero, sem considerar que já acertou antes. E quando erra, erra de novo pelo mesmo motivo. O sistema não aprende. A solução é registrar cada decisão com seu resultado (sucesso ou falha, rating do usuário), acumular padrões ao longo do tempo, e usar esse histórico para melhorar decisões futuras. Não é machine learning pesado. É um sistema de feedai · learning · metrics · programming  ·  5 min26 de mai. de 2026Projetando Sistemas que Assumem o Atacante é uma IASeu rate limiting foi projetado para humanos. 100 requests por minuto por IP. Faz sentido quando o atacante é uma pessoa com um terminal aberto, testando manualmente. Não faz sentido quando o atacante é um agente distribuído em 500 IPs rotativos, cada um fazendo 2 requests por minuto, totalizando 1.000 requests por minuto que seu rate limiting nem percebe. Seu CAPTCHA foi projetado para humanos. Modelos multimodais resolvem a maioria deles. Seu WAF detecta assinaturas de ferramentas conhecidas —  ·  8 min24 de mai. de 2026O If de Par e Ímpar Disfarçado de ArquiteturaVocê conhece aquele exercício de programação iniciante: dado um número, diga se é par ou ímpar. A solução ingênua que todo mundo ri: if (n == 0) print("par") if (n == 1) print("ímpar") if (n == 2) print("par") if (n == 3) print("ímpar") if (n == 4) print("par") ... Ninguém faria isso. É óbvio que a solução é n % 2 == 0. Uma regra genérica que resolve todos os casos sem enumerar cada um. Qualquer dev olha esse código e diz: "isso é absurdo, você está codificando cada caso individual quando e  ·  9 min21 de mai. de 2026Benchmarkando um Motor de Raciocínio: Métricas que ImportamComo saber se um motor de raciocínio está funcionando? Não é como testar um CRUD onde você verifica se o dado foi salvo e retornado corretamente. Aqui você precisa medir coisas como: o sistema extraiu os fatos certos? Consolidou informações de múltiplas fontes? Criou conexões criativas? Reduziu incerteza com novas evidências? São capacidades qualitativas que precisam ser quantificadas de forma objetiva. Criei um benchmark com 5 cenários que testam capacidades diferentes do motor. O score totalpython · ai · testing  ·  5 min

Receba os textos por email

Sem spam, sem newsletter semanal obrigatória. Só quando sai coisa nova sobre desenvolvimento e arquitetura.

VI

Antes do código, a sala de aula

Licenciatura em Computação, artigos publicados e alguns anos ensinando. É daí que vem o hábito de explicar sistema difícil em linguagem que o time inteiro acompanha.

Publicações

A busca pela interdisciplinaridade em um ensino de matemática correlato à informática

Revista Educação em Foco2021

Relato de experiência no programa Residência Pedagógica

Educação em Foco2022

IFPLAY: plataforma de conteúdos didáticos para o desenvolvimento web

Jornada Científica do IFSULDEMINAS2021

Formação

Pós GraduaçãoArquitetura de SoluçõesAnhanguera · 2025-2026
GraduaçãoLicenciatura em ComputaçãoIFSULDEMINAS Machado · 2018–2022
TécnicoTécnico em InformáticaIFSULDEMINAS Muzambinho · 2016–2017
DocênciaParticipante do programa PIBID e residência pedagógicaUtilização de Metodologias Ativas · 200+ alunos
HackathonCocatrelCafeicultura · 72h · 2019
HackathonIFMUZProgramação e inovação · 24h · 2019

VII

Me conte onde está travando.

Relatório demorando, integração quebrando, pipeline que não aguenta o volume. Descreva o cenário e eu respondo com um caminho.

Resposta em até dois dias úteis