Portfólio profissionalProfessional portfolio
Rev. 2026.10.07

Arquiteto de sistemas · Desenvolvedor sêniorSystems architect · Senior software developer

RamonRuan

Ramon Ruan Xavier Chaves · Fortaleza, CEFortaleza, Brazil

12+ anos em software de produção para saúde, pagamentos, ERP e varejo.

12+ years of production software for healthcare, payments, ERP and retail.

Trabalho na costura entre o legado e o moderno. Bases Delphi com uma década de regra de negócio, pagamentos com dinheiro real e prontuários com consequência real, modernizados sem parar a operação que roda em cima deles. Hoje levo a mesma disciplina para a engenharia com agentes de IA: contexto, ferramentas e verificação.

I work at the seam between legacy and modern. Delphi codebases carrying a decade of business rules, payment flows moving real money and patient records with real consequences, modernized without stopping the business running on top of them. Today I bring the same discipline to engineering with AI agents: context, tools and verification.

LinkedIn GitHub

ExperiênciaExperience

Sistemas críticos em que a falha tem custo real: clínicas que deixam de receber, lojas que param de vender, dados de pacientes.

Critical systems where failure has a real cost: clinics that don't get paid, stores that stop selling, patient data.

  1. AtualCurrent2020–hoje2020–present

    Desenvolvedor Sênior e Arquiteto de SistemasSenior Software Developer and Systems Architect

    XLDent · empresa da Valsoft Corporationa Valsoft Corporation company

    Gestão de clínicas odontológicas. Remoto, com times no Canadá e nos Estados Unidos.

    Dental practice management software. Remote, with teams in Canada and the United States.

    • Desenhei a arquitetura da plataforma XLDent e respondo pelas decisões técnicas e pelo release do produto Delphi principal, com mais de 400 clientes.
    • Designed the architecture of the XLDent platform and own the technical decisions and release process of the core Delphi product, with 400+ customers.
    • Desenhei uma plataforma de túnel reverso que dá acesso a servidores das clínicas sem abrir portas de entrada, e o substituto em Java de um servidor legado de arquivos de cobrança, construído em torno de entrega única. Os dois estão em Design Systems.
    • Designed a reverse-tunnel platform that reaches clinic servers without opening inbound ports, and the Java replacement for a legacy billing-file server, built around single delivery. Both are under Design Systems.
    • Conduzo a modernização de sistemas legados para a AWS: containerização com Docker, migração de bancos e re-arquitetura de componentes selecionados em torno de serviços gerenciados.
    • Leading the modernization of legacy systems onto AWS: containerizing with Docker, migrating databases and re-architecting selected components around managed services.
    • Liderei a decomposição de uma plataforma monolítica de saúde do Reino Unido em microsserviços Java e Spring Boot.
    • Led the decomposition of a monolithic UK healthcare platform into Java and Spring Boot microservices.
    • Projetei o microsserviço de transferência de claims do DMA, que processa cobranças e paga as clínicas, com dados de pagamento e informação sensível de pacientes.
    • Designed the claims transfer microservice for DMA, which processes claims and pays clinics, handling payment data and sensitive patient information.
    • Conduzi a migração emergencial do processamento de pagamentos após um ciberataque, com a operação restabelecida em 72 horas.
    • Led the emergency migration of payment processing after a cyberattack, restoring operations within 72 hours.
    • Fiz o hardening da comunicação RTC para TLS 1.3 mantendo compatibilidade com as instalações antigas, e construí o sistema de licenciamento e ativação.
    • Hardened RTC communication to TLS 1.3 while keeping older installations compatible, and built the licensing and activation system.
    • Arquitetei a comunicação em tempo real multi-cliente e multi-loja sobre Apache Kafka, com Datadog para observabilidade.
    • Architected real-time multi-client, multi-store messaging over Apache Kafka, with Datadog for observability.
    • Construí o ferramental de agentes de IA para a base Delphi legada, descrito em IA aplicada.
    • Built AI agent tooling for the legacy Delphi codebase, described under Applied AI.

    Delphi · Java · Spring Boot · AWS · Docker · Apache Kafka · Datadog · MySQL

  2. 2017–2020

    Desenvolvedor de SoftwareSoftware Developer

    Grupo Casa Magalhães · Fortaleza, CEFortaleza, Brazil

    Time do ERP Milênio, usado em operações de varejo em todo o Brasil.

    Milênio ERP team, used across retail operations in Brazil.

    • Resolvi em 15 dias uma migração de banco que o time tentava havia dois anos.
    • Solved in 15 days a database migration the team had been attempting for two years.
    • Respondi pelas integrações de terceiros do produto, entre elas Guardião e Necta CRM, e melhorei a escalabilidade com otimização de fluxos e design modular.
    • Owned the product's third-party integrations, including Guardião and Necta CRM, and improved scalability through workflow optimization and modular design.
    • Introduzi testes unitários e funcionais e construí módulos centrais com padrões de criação (Factory Method, Abstract Factory, Singleton).
    • Introduced unit and functional testing and built core modules with creational patterns (Factory Method, Abstract Factory, Singleton).
    • Promovido a pleno com um ano e meio de casa.
    • Promoted to mid-level developer after a year and a half.

    Delphi · SQL Server · Orientação a objetos · Testes automatizadosObject-oriented design · Automated testing

  3. 2014–2017

    Desenvolvedor de Software, Delphi e PHPSoftware Developer, Delphi and PHP

    Anibaltec Máquinas e Peças · Mossoró, RNMossoró, Brazil

    ERP e equipamentos fiscais. Responsável de ponta a ponta: especificação, desenvolvimento, teste e release.

    ERP and fiscal equipment. Owned systems end to end: specification, development, testing and release.

    • AutoCheck: detecta e repara tabelas MySQL corrompidas, escolhendo a estratégia de reparo pelo tipo de falha.
    • AutoCheck: detects and repairs corrupted MySQL tables, choosing the repair strategy by failure type.
    • Integração com a plataforma de conciliação SiTef, com relatórios entregues automaticamente por e-mail e FTP.
    • Integration with the SiTef reconciliation platform, with reports delivered automatically by email and FTP.
    • Sysbol: geração e controle de boletos, implantado em três empresas.
    • Sysbol: generation and control of bank slips (boletos), deployed across three companies.

    Delphi · PHP · MySQL

  4. 2013–2014

    Desenvolvedor ASP.NET C#ASP.NET C# Developer

    Intuitive Soluções em Tecnologia da Informação

    Manutenção de sistemas ASP.NET MVC 2 em produção. Antes disso, suporte de TI desde 2006, durante a formação técnica.

    Maintained production ASP.NET MVC 2 systems. Before that, IT support from 2006 while completing technical training.

IA aplicada à engenhariaAI applied to engineering

Trato agentes de código como sistemas de engenharia: contexto, ferramentas e verificação. O que meço é o tamanho da tarefa que o agente conclui com confiança.

I treat coding agents as engineering systems: context, tools and verification. What I measure is the size of the task an agent completes reliably.

Fronteiras determinísticasDeterministic boundaries

Não torno o modelo determinístico. Torno determinísticas as fronteiras dele: escopo declarado, ferramentas tipadas, testes e build como verificação.

I don't make the model deterministic. I make its boundaries deterministic: declared scope, typed tools, tests and the build as verification.

O modelo nunca aprovaThe model never approves

Aprovação vem de uma checagem que sai com erro ou de uma pessoa. Quem revisa nunca é quem implementou, e o adversário é outro modelo.

Approval comes from a check that exits with an error, or from a person. The reviewer is never the implementer, and the adversary is a different model.

Melhore a spec, não o modeloFix the spec, not the model

Quando um executor barato falha, a correção é uma especificação melhor. A falha volta para quem escreveu a spec, sem trocar por um modelo mais caro.

When an inexpensive executor fails, the fix is a better specification. The failure goes back to whoever wrote the spec, without switching to a pricier model.

PúblicoPublic link verificávelverifiable link PrivadoPrivate projeto pessoal, sem linkpersonal project, no link InternoInternal ferramenta de empresacompany tool ConfidencialConfidential descrito sem nomesdescribed without names Em construçãoIn progress estado declaradodeclared state

Harness de agentes para Delphi legadoAgent harness for legacy Delphi

Uso próprioOwn workflow

XLDent · base Delphi de grande porteXLDent · large Delphi codebase

Agentes genéricos editavam arquivos, mas não conheciam o domínio, as convenções nem o build. Codifiquei o domínio em skills para Claude Code e Codex, gerei documentação técnica como contexto recuperável e liguei o build automatizado como verificação determinística. O resultado é um ciclo repetível em que agentes concluem tarefas reais numa base que o ferramental padrão não lê.

Generic agents could edit files but knew neither the domain, the conventions nor the build. I encoded the domain as skills for Claude Code and Codex, generated technical documentation as retrievable context, and wired the automated build in as deterministic verification. The result is a repeatable loop in which agents complete real tasks on a codebase standard tooling cannot read.

  • skills de domínio
  • domain skills
  • documentação como contexto
  • docs as context
  • build como verificação
  • build as verification

keel

PrivadoPrivateEm construçãoIn progress

Projeto pessoal sobre harnesses para trabalho com agentesPersonal project on harnesses for agent work

A ideia: transformar uma boa sessão de trabalho com agentes em procedimento. Cada fase do desenvolvimento deixa um artefato que uma checagem determinística confere, a especificação passa por revisão adversarial de outro modelo antes de virar código, e o modelo nunca aprova nada. Foi daqui que saíram as ideias do fluxo de desenvolvimento com agentes verificáveis, escrito do zero para a empresa.

The idea: turn a good working session with agents into a procedure. Every development phase leaves an artifact a deterministic check verifies, the specification gets an adversarial review from a different model before it becomes code, and the model never approves anything. This is where the ideas behind the verifiable agent development workflow came from, written from scratch for the company.

Event RSVP App

PúblicoPublicNo arLive

App completo construído por um pipeline de agentesA complete app built by an agent pipeline

Código, testes, especificação e documentação produzidos por agentes Claude a partir de uma especificação aprovada por mim. Cinco papéis: analista de regras de negócio, redator de spec, implementador em TDD estrito, revisor adversarial e release. Cada fase passa por um gate humano antes do merge.

Code, tests, specification and documentation produced by Claude agents from a specification I approved. Five roles: business-rules analyst, spec writer, strict-TDD implementer, adversarial reviewer and release. Every phase passes a human gate before merge.

Regra de negócio, requisito, tarefa e teste são ligados por ID, e o build falha se a cadeia quebrar. Depois de três tentativas sem sucesso, a falha escala para a especificação. Até a fase 10, 25 incidentes ficaram registrados com causa raiz e resolução.

Business rules, requirements, tasks and tests are linked by ID, and the build fails if the chain breaks. After three failed attempts, a failure escalates to the specification. Through phase 10, 25 incidents were logged with root cause and resolution.

MarcoMilestone

7º lugar no hackathon Build With AI da Valsoft.

7th place in Valsoft's Build With AI hackathon.

Ferramentas do dia a diaDaily tools

Claude Code · Codex · OpenCode

TécnicasTechniques

Recuperação híbrida (RAG) · Engenharia de contexto · Servidores MCP · Pipelines multiagente com gates humanos

Hybrid retrieval (RAG) · Context engineering · MCP servers · Multi-agent pipelines with human gates

Produtos desenvolvidosProducts built

Produtos que desenhei e construí. O selo de cada um diz de quem é e em que estado está.

Products I designed and built. Each badge says who owns it and what state it is in.

Fluxo de desenvolvimento com agentes verificáveisVerifiable agent development workflow

InternoInternal

Fluxo de desenvolvimento com agentes de IA e a ferramenta de linha de comando que o operaAn AI-agent development workflow and the command-line tool that runs it

Agentes de IA já escrevem código, mas raramente com previsibilidade. Partem de buscas soltas em arquivos em vez do conhecimento confirmado do produto, aprovam o próprio trabalho e deixam pouca evidência que um humano consiga auditar.

AI agents already write code, but rarely predictably. They start from loose file searches instead of the product's confirmed knowledge, approve their own work, and leave little evidence a human can audit.

Neste fluxo, toda mudança nasce de conhecimento confirmado por pessoas, e cada fase deixa evidência que uma checagem determinística verifica. A ferramenta de linha de comando monta o contexto dos agentes, registra cada fase e recusa o que quebra uma regra, sempre dizendo qual regra, em qual campo e como corrigir.

In this workflow, every change starts from knowledge people have confirmed, and every phase leaves evidence a deterministic check can verify. The command-line tool builds the agents' context, records each phase and refuses whatever breaks a rule, always naming the rule, the field and the fix.

O ciclo de uma mudançaThe life of a change

  1. DEFINE

    O definidor monta o contexto a partir da base de conhecimento, entrevista o humano e escreve uma spec executável com requisitos, tarefas, arquivos exatos e testes. Um adversário ataca a spec antes da aprovação humana.

    The definer builds context from the knowledge base, interviews the human and writes an executable spec with requirements, tasks, exact files and tests. An adversary attacks the spec before human approval.

  2. IMPLEMENT

    Um implementador de modelo mais barato executa a spec. O teste falha primeiro e depois passa.

    An implementer on a cheaper model executes the spec. The test fails first, then passes.

  3. VERIFY

    Um verificador independente reexecuta os critérios de aceite e confirma, em ambiente isolado, que cada teste falhava antes do código existir.

    An independent verifier reruns the acceptance criteria and confirms, in isolation, that each test failed before the code existed.

  4. GATE

    Na CI, predicados determinísticos julgam o pull request. As regras vêm sempre da branch base, então um PR não muda como é julgado.

    In CI, deterministic predicates judge the pull request. Rules always come from the base branch, so a PR cannot change how it is judged.

  5. REVIEW · CLOSE

    Um humano revisa e aprova, e um registro de ciclo fecha o ticket.

    A human reviews and approves, and a cycle record closes the ticket.

recall da recuperação híbrida contra a busca lexical, em pares rotulados de tickets reaishybrid retrieval recall vs lexical search, on labeled pairs from real tickets
0,53 → 0,840.53 → 0.84
predicados no gate: dez sempre ativos e dois de disciplina (rastreabilidade e evidência de TDD)gate predicates: ten always on, two for discipline (traceability and TDD evidence)
12
testes automatizadosautomated tests
~1.000~1,000
start-up do binário para Windows, Linux e macOSbinary start-up on Windows, Linux and macOS
0,08–0,23 s0.08–0.23 s

Base de conhecimento e distribuiçãoKnowledge base and distribution

Um único Postgres com pgvector guarda texto, embeddings e um grafo de código (símbolos, imports, chamadas) reconstruível a partir do repositório. Os embeddings vêm de um modelo aberto, local e multilíngue, e nenhum dado sai da rede. A recuperação combina full-text, vetores e vizinhança no grafo dentro de um orçamento de tokens. Agentes acessam por um servidor MCP, e o que respondem em entrevistas vira proposta que um humano confirma.

A single Postgres with pgvector stores text, embeddings and a code graph (symbols, imports, calls) that can be rebuilt from the repository. Embeddings come from an open, local, multilingual model, and no data leaves the network. Retrieval combines full-text, vectors and graph neighborhood within a token budget. Agents connect through an MCP server, and interview answers become proposals a human confirms.

Um comando instala o processo inteiro num repositório (configuração com versão fixada, skills, permissões, workflow do gate e donos de código) e faz o commit de forma transacional: se algo falha, tudo volta como estava. Outro comando confere se o repositório segue o processo, e um terceiro migra de versão. A ferramenta foi construída com o próprio processo, e cada lição aprendida vira regra nas instruções dos papéis.

One command installs the whole process into a repository (pinned configuration, skills, permissions, gate workflow and code owners) and commits it transactionally: if anything fails, everything rolls back. Another command checks the repository still follows the process, and a third migrates it to a new version. The tool was built with its own process, and every lesson learned becomes a rule in the role instructions.

  • Python
  • Typer
  • Pydantic
  • Postgres + pgvector
  • MCP
  • GitHub Actions
  • PyInstaller

Plataforma de conhecimento para agentes de IAKnowledge platform for AI agents

ConfidencialConfidentialEm produçãoIn production

Base de conhecimento, governança e esteira de documentação para uma equipe de software legado de grande porteKnowledge base, governance and documentation pipeline for a large legacy software team

O conhecimento de negócio estava espalhado em tickets, código e na cabeça das pessoas. Os agentes reaprendiam o mesmo contexto a cada tarefa, ninguém sabia se um texto era regra confirmada ou hipótese, e as propostas de documentação ficavam paradas sem ninguém aceitar.

Business knowledge was scattered across tickets, code and people's heads. Agents relearned the same context on every task, no one could tell a confirmed rule from a hypothesis, and documentation proposals sat waiting with no one to accept them.

Base vivaLiving knowledge base

Markdown versionado em Git, com índice de busca. Antes de mexer no código, o agente consulta a base por MCP, com OAuth emitido pelo próprio serviço. Pessoas navegam por um grafo interativo testado com 10 mil registros sintéticos.

Markdown versioned in Git, with a search index. Before touching code, the agent queries the base over MCP, with OAuth issued by the service itself. People browse an interactive graph tested against 10,000 synthetic records.

GovernançaGovernance

Toda página nasce como proposta e só é confirmada com dois aceites: o técnico, do tech lead, e o de negócio, do product owner. Cada confirmação vira um commit com os dois recibos, e ninguém concede papel a si mesmo.

Every page starts as a proposal and is confirmed only with two sign-offs: technical, from the tech lead, and business, from the product owner. Each confirmation becomes a commit carrying both receipts, and no one can grant themselves a role.

Documentação embutidaBuilt-in documentation

Um plugin para os agentes de código orienta consultar a base ao abrir a tarefa e capturar o que aprendeu; o turno só termina com a captura feita. O conhecimento entra como proposta e segue a governança. Edições preservam a codificação original dos arquivos legados.

A plugin for the coding agents prompts them to query the base when a task opens and to capture what they learned; a turn only ends once the capture is done. Knowledge enters as a proposal and follows governance. Edits preserve the original encoding of legacy files.

Cada merge publica em produção via Docker com checagem de saúde, e cada troca levou menos de 20 segundos fora do ar. Agentes de planejamento, implementação e revisão trabalham em paralelo, coordenados por um canal de mensagens entre sessões e máquinas, com humanos nas decisões.

Every merge ships to production through Docker with a health check, and each swap took under 20 seconds of downtime. Planning, implementation and review agents work in parallel, coordinated by a message channel across sessions and machines, with humans on the decisions.

  • Python
  • Git
  • SQLite
  • Docker
  • MCP
  • OAuth
  • D3 + Canvas
  • GitHub Actions

Próximo passo: banco relacional com busca vetorial para RAG completo, convivendo com o modo Git por uma chave de configuração, e implantação em nuvem.

Next: a relational database with vector search for full RAG, coexisting with the Git mode behind a configuration switch, and cloud deployment.

PexBot

Produto próprioOwn productNo arLive

SDR para WhatsApp com CRM e IA integrada para atendimentoWhatsApp SDR with CRM and built-in AI for customer service

Plataforma que qualifica leads e atende pelo WhatsApp com IA, com CRM, funil de vendas e agendamento integrados. Contribuí na construção da arquitetura. Não participo da operação do produto.

A platform that qualifies leads and serves customers over WhatsApp with AI, with CRM, a sales pipeline and scheduling built in. I contributed to building its architecture. I am not involved in operating the product.

Design Systems e IA agênticaDesign Systems and agentic AI

Aplico os dois no desenho de sistemas reais. A especificação de UI vira contrato para pessoas e agentes, e guias de agentes com invariantes numeradas decidem o que entra no código. Abaixo, dois sistemas que desenhei, descritos sem nomes.

I apply both when designing real systems. The UI spec becomes a contract for people and agents, and agent guides with numbered invariants decide what gets into the code. Below are two systems I designed, described without names.

Túnel reverso para servidores locaisReverse tunnel for on-premise servers

InternoInternal

Plataforma que permite a uma administração central acessar serviços que rodam dentro de redes de clínicas sem nenhuma porta de entrada aberta.A platform that lets a central administration reach services that run inside clinic networks with no inbound port open.

Os dados das clínicas ficam em servidores locais, atrás de NAT e firewall, e a administração precisava de acesso controlado a eles sem abrir portas de entrada. Desenhei uma plataforma de túnel reverso: um agente na rede privada abre um WebSocket de saída para um gateway na nuvem, e as chamadas HTTP voltam por esse mesmo socket até serviços ligados ao loopback da máquina da clínica. Sessões TCP brutas, como SSH, usam um serviço de relay separado, para que tráfego TCP pesado não esgote o relay HTTP. O mesmo backend mantém um registro de versões imutáveis de schema de API, servidas no formato exato que o parser do motor da clínica lê.

Clinic data lives on local servers behind NAT and firewalls, and the administration needed governed access to it without opening inbound ports. I designed a reverse-tunnel platform: an agent on the private network opens an outbound WebSocket to a cloud gateway, and HTTP calls travel back down that same socket to services bound to loopback on the clinic machine. Raw TCP sessions, such as SSH, use a separate relay service, so heavy TCP traffic cannot exhaust the HTTP relay. The same backend keeps a registry of immutable API schema versions, served in the exact shape that the clinic engine's parser reads.

O gateway roda Spring MVC sobre virtual threads, faz o relay das requisições por um contrato de mensagens JSON congelado e classifica cada sessão como online, suspeita ou offline, com heartbeat e anti-flapping. O agente e o SDK Delphi gerado reconectam com backoff exponencial e, quando o servidor recusa um túnel, esperam o intervalo que a mensagem de recusa informa. Um reconciliador agendado consulta o serviço de identidade e licenciamento sobre a licença de cada clínica e fecha os túneis bloqueados; uma queda desse serviço não altera nenhum registro. A telemetria passa por uma fila limitada em memória que descarta e conta amostras sob pressão, e nenhuma thread do gateway acessa o banco.

The gateway runs Spring MVC on virtual threads, relays requests over a frozen JSON message contract, and classifies each session as online, suspect or offline, with heartbeats and anti-flapping. The agent and the generated Delphi SDK reconnect with exponential backoff and, when the server refuses a tunnel, wait the interval that the refusal message carries. A scheduled reconciler asks the identity and licensing service for each clinic's license state and closes blocked tunnels; an outage of that service changes no record. Telemetry passes through a bounded in-memory queue that drops and counts samples under pressure, and no gateway thread touches the database.

A especificação de UI como contratoThe UI spec as a contract

Escrevi a especificação de UI do painel como a autoridade única para decisões de tela, e ela usa só dados que o backend já produz. O mapa de fontes de dados liga cada campo da UI a um campo REST ou a uma métrica Prometheus, e lista os dados que o backend ainda não expõe, com uma regra de placeholder para essas telas. A escala de cores, a escala tipográfica (Inter e JetBrains Mono) e os raios de borda vieram de um design system administrativo compartilhado, então os apps administrativos têm a mesma linguagem visual.

I wrote the dashboard's UI spec as the single authority for screen decisions, and it uses only data the backend already produces. Its data source map ties every UI field to a REST field or a Prometheus metric, and it lists the data the backend does not expose yet, with a placeholder rule for those screens. The color ramp, the type ramp (Inter and JetBrains Mono) and the border radii came from a shared admin design system, so the admin apps share one visual language.

  • Todo erro ou estado degradado diz o que significa, a causa provável e o que tentar.
  • Every error or degraded state says what it means, its likely cause, and what to try.
  • Um status tem um ícone, uma cor e um texto em todas as telas.
  • One status has one icon, one color and one wording on every screen.
  • Cor nunca é o único sinal: cada estado também tem forma de ícone e rótulo de texto.
  • Color is never the only signal: each state also has an icon shape and a text label.
  • Informação crítica nunca fica escondida atrás de hover.
  • Critical information never sits behind hover.
  • Dado ausente aparece como traço, e nenhum elemento mostra dado que o backend não tem.
  • Missing data shows a dash, and no element shows data the backend does not have.

AgentesAgents

Construí funcionalidades com agentes de código num fluxo de spec, plano e registro de tarefas: cada tarefa sai com um briefing, volta com um relatório e recebe uma revisão do seu diff. Arquivos de guia para agentes guardam invariantes numeradas, um mapa de marcos e um guia de verificação que lista leituras falsas que aconteceram de fato no repositório. O trabalho é conferido por testes unitários herméticos, testes de integração com Docker contra PostgreSQL real, regras de camadas com ArchUnit e, em qualquer mudança no túnel, uma execução com o agente real e curl.

I built features with coding agents on a spec, plan and task-ledger flow: each task goes out with a brief, comes back with a report, and gets a review of its diff. Agent guide files hold numbered invariants, a milestone map, and a verification guide that lists false readings that actually happened in the repository. Work is checked by hermetic unit tests, Docker-backed integration tests against real PostgreSQL, ArchUnit layering rules, and, for any tunnel change, a run with the real agent and curl.

  • Java 21
  • Spring Boot 4
  • Spring MVC (virtual threads)
  • Netty
  • WebSocket
  • Server-Sent Events
  • PostgreSQL 16
  • Liquibase
  • Prometheus
  • React 19
  • TypeScript
  • Tailwind CSS 4
  • ArchUnit
  • Testcontainers
  • Delphi (SDK cliente gerado)
  • Delphi (generated client SDK)

Pipeline de entrega única de arquivosSingle-delivery pipeline for statement files

InternoInternal

Substituto em Java de um servidor Delphi legado que recebe arquivos de extrato de cobrança das clínicas e os envia por SFTP a uma clearinghouse de cobrança externa.Java replacement for a legacy Delphi server that receives billing statement files from clinics and uploads them over SFTP to an external billing clearinghouse.

O servidor legado recebia arquivos de extrato de um cliente desktop, reformatava e enviava a uma clearinghouse de cobrança, e um envio duplicado cobra o cliente duas vezes. Projetei o substituto para que o cliente desktop existente funcione sem mudança: reimplementei em Java o protocolo RPC binário legado atrás de um adaptador removível, e uma regra ArchUnit mantém o núcleo independente dele. Toda entrada chama uma única porta de ingestão, então a regra de negócio tem uma só implementação. Um teste de arquivo golden fixa a saída dos conversores nos bytes do legado, e a clearinghouse recebe o arquivo bruto sem alteração.

The legacy server received statement files from a desktop client, reformatted them and uploaded them to a billing clearinghouse, and a duplicate upload bills the customer twice. I designed the replacement so the existing desktop client works unchanged: I reimplemented the legacy binary RPC protocol in Java behind a removable adapter, and an ArchUnit rule keeps the core independent of it. Every ingress calls one ingest port, so the business logic has a single implementation. A golden-file test pins the converter output to the legacy bytes, and the clearinghouse receives the raw file unchanged.

Os bytes do payload nunca vão para disco nem para o banco: existem só em mensagens persistentes do RabbitMQ e em memória, e cada transferência entre filas espera a confirmação do broker antes de reconhecer a mensagem de origem. A entrega segue uma máquina de estados: o serviço grava uma intenção de entrega com lease antes do upload SFTP, renova a lease com heartbeat e marca qualquer falha durante ou depois do upload como resultado desconhecido, que exige decisão humana auditada.

Payload bytes never reach disk or the database: they exist only in persistent RabbitMQ messages and in memory, and each transfer between queues waits for a broker confirm before the source message is acknowledged. Delivery follows a state machine: the service commits a leased delivery intent before the SFTP upload, renews the lease with a heartbeat, and marks any failure during or after the upload as an unknown outcome that needs an audited human decision.

Filas duráveis separadas estacionam mensagens pausadas, em retentativa, de resultado desconhecido, sem registro correspondente ou com falha de processamento, e um gauge Prometheus mostra a profundidade de cada fila. Uma API HTTP privada recebe os bytes brutos com chave de idempotência obrigatória e lê a clínica só de um claim de um service token de vida curta; o chamador dessa API, o serviço de identidade e licenciamento, está planejado.

Separate durable queues park messages that are paused, retrying, of unknown outcome, unmatched to a record, or failing in processing, and a Prometheus gauge reports each queue's depth. A private HTTP API takes the raw bytes with a mandatory idempotency key and reads the clinic only from a claim in a short-lived service token; the caller of that API, the identity and licensing service, is planned.

AgentesAgents

Escrevi o guia de agentes que qualquer agente de código lê antes de escrever código; ele define invariantes numeradas, um mapa de marcos e regras de processo: mudança de arquitetura exige registro de decisão antes do merge, e código de broker só é aceito com testes de integração contra um broker real. A verificação tem três camadas: testes unitários e de slice offline, testes com Testcontainers contra RabbitMQ e PostgreSQL reais que cobrem crash, reentrega e duplicata, e um script de smoke que exercita a stack inteira com um cliente independente de socket bruto e compara o arquivo SFTP byte a byte. A CI roda os testes unitários, compila as fontes de integração e gera a imagem Docker a cada pull request.

I wrote the agent guide that any coding agent reads before it writes code; it sets numbered invariants, a milestone map and process rules: an architecture change needs a decision record before merge, and broker code is accepted only with integration tests against a real broker. Verification has three layers: offline unit and slice tests, Testcontainers tests against real RabbitMQ and PostgreSQL that cover crash, redelivery and duplicate cases, and a smoke script that drives the full stack with an independent raw-socket client and compares the SFTP file byte for byte. CI runs the unit tests, compiles the integration sources and builds the Docker image on each pull request.

  • Java 21
  • Spring Boot 4
  • Spring Security
  • RabbitMQ 4.1 (filas quorum)
  • RabbitMQ 4.1 (quorum queues)
  • PostgreSQL 18
  • Liquibase
  • SFTP
  • HAProxy
  • Prometheus
  • React 18
  • TypeScript
  • ArchUnit
  • Testcontainers
  • GitHub Actions

Como os dois se conectamHow the two connect

Os dois sistemas não chamam um ao outro, e nenhum repositório referencia a API do outro. Eles compartilham um serviço externo de identidade e licenciamento: a plataforma de túnel valida os tokens de operador que ele emite e consulta o estado das licenças com um service token, e a API privada do serviço de arquivos aceita chamadas só dele; nos dois, a clínica vem de um claim do token. Também compartilham um padrão de backend (Spring Boot 4, schema controlado pelo Liquibase, camadas verificadas por ArchUnit, testes herméticos e testes com Docker, configuração só por variáveis de ambiente) e a mesma paleta de cores e tipografia nos painéis administrativos. Os dois têm planejado mover o seu cliente do lado da clínica para o mesmo host de serviços Windows no servidor do cliente.

The two systems do not call each other, and neither repository references the other's API. They share an external identity and licensing service: the tunnel platform validates the operator tokens it issues and asks it for license state with a service token, and the file service's private API accepts calls only from it; in both, the clinic comes from a token claim. They also share one backend standard (Spring Boot 4, a Liquibase-owned schema, ArchUnit-checked layers, hermetic and Docker-backed test tiers, configuration only from environment variables) and one color and type palette in their admin UIs. Both have planned a move of their clinic-side client into the same Windows service host on the client server.

REDE PRIVADA DO CLIENTECLIENT PRIVATE NETWORK NUVEMCLOUD EXTERNOEXTERNAL WebSocket de saídaoutbound WebSocket canal TCP de saídaoutbound TCP channel HTTP no loopbackloopback HTTP JWT de operadoroperator JWT estado da licençalicense state planejadoplanned RPC binário legadolegacy binary RPC mensagens persistentespersistent messages SFTPSFTP Agente do túnelTunnel agent só conexões de saídaoutbound connections only API local (loopback)Local API (loopback) Cliente desktop legadoLegacy desktop client Gateway de túnel HTTPHTTP tunnel gateway Relay TCPTCP relay Identidade eIdentity and licenciamentolicensing Proxy de bordaEdge proxy Serviço de arquivosStatement de extratofile service Broker de mensagensMessage broker Navegador doOperator operadorbrowser ClearinghouseExternal externaclearinghouse
Acima, o túnel reverso: o agente só abre conexões de saída, e as chamadas voltam pelo mesmo socket até a API local. Abaixo, o pipeline de arquivos, do cliente desktop legado até a clearinghouse. O único ponto em comum é o serviço de identidade e licenciamento; a linha tracejada está planejada.Top: the reverse tunnel. The agent only opens outbound connections, and calls travel back down the same socket to the local API. Bottom: the file pipeline, from the legacy desktop client to the clearinghouse. The only shared point is the identity and licensing service; the dashed line is planned.

Design system como contexto do agenteDesign system as agent context

PráticaPractice

Tokens de cor, tipografia, ícones e grade de espaçamento num arquivo mestre que as instruções do projeto tornam leitura obrigatória antes de qualquer tela. Aplicado num dashboard analítico de dados densos, com uma cor semântica fixa para cada tipo de ocorrência em todo o sistema.

Color, typography, icon and spacing-grid tokens in a master file that the project instructions make required reading before any screen. Applied to a data-dense analytics dashboard, with one fixed semantic color per type of occurrence across the whole system.

Auditoria de UX conduzida por agentesAgent-driven UX audit

PúblicoPublic

No Event RSVP App, um redesign de UI/UX entrou como emenda formal da especificação. Depois da entrega, uma auditoria contra os critérios de avaliação corrigiu 27 achados de comportamento sem adicionar funcionalidade.

In the Event RSVP App, a UI/UX redesign entered as a formal amendment to the specification. After delivery, an audit against the evaluation criteria fixed 27 behavioral findings without adding features.

Código abertoOpen source

Bibliotecas Delphi e Free Pascal sobre concorrência e arquitetura de processos, licença MIT, com CI no GitHub Actions. O núcleo portável roda em Free Pascal no Linux; as camadas Delphi e Windows são testadas onde de fato rodam.

Delphi and Free Pascal libraries on concurrency and process architecture, MIT licensed, with CI on GitHub Actions. The portable core runs under Free Pascal on Linux; the Delphi and Windows layers are tested where they actually run.

Builds negativosNegative builds

Um build negativo é uma versão de teste em que desligo de propósito uma proteção, por exemplo o lock que impede duas threads de escreverem no log ao mesmo tempo. O CI roda os testes nessa versão quebrada e só aprova se eles falharem. Se passassem, os testes não estariam vigiando aquela proteção. Três destas bibliotecas têm builds negativos.

A negative build is a test build where I switch off one protection on purpose, for example the lock that stops two threads from writing to the log at once. CI runs the tests against that broken build and only passes if they fail. If they passed, the tests would not be guarding that protection. Three of these libraries ship negative builds.

delphi-service-host

Builds negativosNegative builds

Serviços de vida longa, cada um dono da própria thread, falando só por um barramento de eventos. Parar significa cancelar, aguardar e descartar o que ficou pendente.

Long-lived services, each owning its thread, talking only through an event bus. Stopping means cancel, join and discard whatever is pending.

59 asserções · 4 builds negativos · consome o pool como submódulo59 assertions · 4 negative builds · consumes the pool as a submodule

delphi-concurrent-pool

Builds negativosNegative builds

Fila limitada com bloqueio, worker dono da própria thread e pool de tamanho fixo.

A bounded blocking queue, a worker that owns its thread, and a fixed-size pool.

96 asserções · 4 builds negativos · watchdog · 14 etapas de CI96 assertions · 4 negative builds · watchdog · 14 CI steps

delphi-concurrent-log

Build negativoNegative build

Log seguro para múltiplas threads, com núcleo portável testado em Free Pascal.

Thread-safe logging with a portable core tested under Free Pascal.

PROVE_RACE remove o lock e exige que a suíte falhePROVE_RACE removes the lock and requires the suite to fail

delphi-ipc

CI em 2 sistemasCI on 2 OSes

Mensagens estruturadas entre processos Windows por WM_COPYDATA, com enquadramento portável e testado.

Structured messages between Windows processes over WM_COPYDATA, with portable, tested framing.

enquadramento testado no Linux · transporte testado no Windowsframing tested on Linux · transport tested on Windows

delphi-fiber-runtime

Experimental

Serviços periódicos, esperas cooperativas e eventos gerenciados. Cada tarefa tem pilha própria, e muitas dividem uma thread nativa.

Periodic services, cooperative waits and managed events. Each task has its own stack, and many share one native thread.

validado em Free Pascal 3.2.2 · build Delphi ainda não executadovalidated on Free Pascal 3.2.2 · Delphi build not yet run

treatmentform

Legado modernizadoModernized legacy

Validação e tratamento de formulários, escrita em 2017 e reescrita em 2026. A tag v1.0 preserva o código original.

Form validation and treatment, written in 2017 and rewritten in 2026. The v1.0 tag preserves the original code.

122 asserções · regras separadas da VCL122 assertions · rules separated from the VCL

Também contribuí com o AgnosticDataBase, camada de abstração de banco para Delphi.

I also contributed to AgnosticDataBase, a database abstraction layer for Delphi.

CompetênciasSkills

LinguagensLanguages
Delphi / Object Pascal · Free Pascal · Java · Python · C# · PHP · SQL
Frameworks
Spring Boot · Spring Data JPA · ASP.NET MVC · React
ArquiteturaArchitecture
Modernização de legado · Decomposição de monólito · Microsserviços · APIs REST · Arquitetura orientada a eventos · Padrões de projetoLegacy modernization · Monolith decomposition · Microservices · REST APIs · Event-driven architecture · Design patterns
ConcorrênciaConcurrency
Multithreading · Filas limitadas e pools · Comunicação entre processos · Detecção de corrida e vazamento em CIMultithreading · Bounded queues and pools · Inter-process communication · Race and leak detection in CI
IAAI
Claude Code · Codex · OpenCode · MCP · RAG e recuperação híbrida · Engenharia de contexto · Harness de agentes · Pipelines multiagenteClaude Code · Codex · OpenCode · MCP · RAG and hybrid retrieval · Context engineering · Agent harnesses · Multi-agent pipelines
DadosData
PostgreSQL + pgvector · MySQL · SQL Server · SQLite · Supabase
Infra
AWS · Docker · DigitalOcean · Datadog · Apache Kafka · RabbitMQ · Prometheus · GitHub Actions
PráticasPractices
Gestão de release · Liderança técnica · TDD · Desenvolvimento guiado por especificação · Regras de arquitetura com ArchUnit · Testes de integração com Testcontainers · Documentação técnicaRelease management · Technical leadership · TDD · Spec-driven development · Architecture rules with ArchUnit · Integration testing with Testcontainers · Technical documentation

FormaçãoEducation

GraduaçãoDegree

  • Análise e Desenvolvimento de SistemasSystems Analysis and DevelopmentTecnólogoTechnologist degree · Universidade Potiguar (UNP) · 2015–2017

IdiomasLanguages

  • PortuguêsPortugueseNativoNative
  • InglêsEnglishAvançado · uso diário com times no Canadá e nos Estados UnidosAdvanced · daily use with teams in Canada and the United States

CertificaçõesCertifications

  • Spring Data JPA Master ClassAmigoscode · 2022
  • Getting Started With Spring BootAmigoscode · 2022
  • Docker: Ferramenta Essencial para DesenvolvedoresDocker: Essential Tool for DevelopersUdemy · 2023
  • Magento 2: O Curso, 3ª EdiçãoMagento 2: The Course, 3rd EditionMagenteiro · 2023

ContatoContact

O caminho mais rápido é o e-mail. Respondo em português ou inglês.

Email is the fastest way to reach me. I reply in Portuguese or English.