Vinicius Aguiar

Engenharia

Sistemas que projetei e operei em produção — decisões de arquitetura, trade-offs e restrições reais.

Problemas resolvidos em produção

Performance de frontend

Inbox de um SaaS B2B carregando ~20.000 conversas de uma vez (~6,7 MB por requisição) — paginação cursor-based + virtualização de lista, payload de ~19 KB e fim dos travamentos de interface

Latência de API

Timeouts de APIs de marketplaces causando falhas em cascata no checkout de uma operação de dropshipping — circuit breaker com fallbacks e monitoramento (implementação completa no blog)

Inconsistências de marketplace

APIs do Mercado Livre e da Shopee retornando dados de produto inconsistentes — adapter pattern normalizando os schemas em um modelo unificado

Migração de legado

Plataforma de estética com 50k+ usuários saindo de um monolito PHP 5.3 para React + Next.js sem downtime — migração incremental, tela a tela (strangler fig)

Performance em escala

Tempos de resposta degradando com o crescimento da base em uma plataforma de saúde web + mobile — otimização de queries, caching estratégico e chamadas paralelas

UX cross-platform

Manter UX consistente entre React (web) e React Native (mobile) no mesmo produto — design tokens e contratos de componentes compartilhados

Consistência de dados

Módulos financeiros de um SaaS para pet shops (vendas + comissões + pagamentos) perdendo sincronia — transações atômicas com advisory locks do PostgreSQL

Sistemas de IA em produção

Não chatbots — pipelines em produção onde IA é um componente em um sistema maior, com fallbacks, monitoramento e dados reais fluindo.

Agente IA no WhatsApp

Agente com LLM para atendimento, recomendação de produtos e finalização de vendas. Mensagens processadas de forma assíncrona, dados registrados no PostgreSQL. Fallback para matching por regras quando LLM está indisponível.

Pipeline RAG (LangChain + pgVector)

Ingestão de documentos → chunking → geração de embeddings → armazenamento vetorial no PostgreSQL com pgVector → busca semântica com top-K como contexto para LLM.

Ler implementação completa →

Perguntas frequentes

O que é paginação cursor-based e quando usar?

Em vez de OFFSET/LIMIT, cada página é buscada a partir de um cursor — um ponteiro estável para o último registro carregado (ex.: created_at + id). Isso mantém o custo de leitura constante em listas grandes e evita itens duplicados ou pulados quando novos registros chegam durante a navegação. É a escolha certa para feeds e inboxes; o trade-off é perder o salto direto para uma página arbitrária.

O que é arquitetura multi-tenant?

Um padrão de design onde múltiplas organizações compartilham a mesma aplicação e banco de dados, mas os dados de cada tenant são isolados. A abordagem mais comum em SaaS moderno é banco compartilhado com coluna tenant_id e Row Level Security (RLS) do PostgreSQL como rede de segurança.

Como lidar com webhooks de pagamento de forma confiável?

Use uma abordagem em camadas: valide assinaturas em cada evento, garanta idempotência com IDs de eventos armazenados, responda imediatamente e processe em background, valide transições de estado com state machine, execute jobs de reconciliação periódicos e direcione eventos com falha para uma dead letter queue.

Como integrar IA em sistemas de produção?

Trate a IA como um componente do sistema, não uma feature isolada. Processe mensagens de forma assíncrona, registre dados de volta no banco, implemente fallbacks para quando o LLM estiver indisponível e monitore a qualidade das respostas. O ponto central é confiabilidade — o sistema precisa funcionar mesmo quando o provedor de IA tem problemas.

O que é o padrão circuit breaker?

Um padrão de resiliência para integrações com APIs terceiras. Quando uma API externa começa a falhar, o circuit breaker 'abre' e retorna respostas fallback ao invés de propagar a falha pelo sistema. Após um período de cooldown, permite requisições de teste para verificar se o serviço se recuperou.