Sistemas que construí
O case: de R$40 mil/mês em vendas a R$2,5 milhões faturados numa Black Friday 2025 — com a máquina que construí. Aqui estão os 10 sistemas por trás disso, com mais profundidade técnica do que cabe na página inicial, e mais.
O case: de R$40 mil/mês em vendas a R$2,5 milhões faturados numa Black Friday 2025 — com a máquina que construí. Aqui estão os 10 sistemas por trás disso, com mais profundidade técnica do que cabe na página inicial, e mais.
Pra sua loja: um lugar só onde você vê o lucro real de cada anúncio, produto e canal — e decide sem achismo.
O desafio
O número da operação vivia espalhado: anúncios numa tela, pedidos noutra, estoque e financeiro à parte. Faltava uma visão geral única — um BI que cruzasse tudo, sem dupla contagem, para decidir sobre dado real.
O que construí
Um BI completo que puxa dado de todos os lados — pedidos da Shopify, gasto de Meta e Google, estoque, financeiro, afiliados e metas — e calcula o retorno por atribuição last-click não-direto. Banco MariaDB (~106 mil pedidos, tabela de 540 MB) com índice composto, API JWT e servidor MCP com RAG (Qdrant + bge-m3) para perguntar qualquer número em linguagem natural.
Stack
O resultado
Como funciona, em 3 passos
Shopify, Meta, Google, ERP, afiliados, reviews e metas — cada um com seu conector.
Sync a cada 15 min, atribuição last-click não-direto, sem dupla contagem.
API JWT e RAG (Qdrant) respondem qualquer número em segundos.
Detalhe técnico: a tabela-fato consolida ~106 mil pedidos com sync incremental a cada 15 minutos, integrando 7 fontes de dados — Shopify Admin API (REST + GraphQL), Meta Marketing API, GA4 Data API, Tiny ERP de 3 empresas diferentes, UpPromote (afiliados), Stamped.io (reviews) e Google Sheets (metas). A atribuição multi-touch é motor próprio, reconstruído a partir da jornada do cliente (last-click não-direto) — não a API pronta de nenhuma plataforma. PII fica cifrada em repouso com AES-256-GCM, e um HMAC-SHA256 permite contar clientes únicos sem nunca expor o dado em claro. O motor de margem/custo por canal é configurável, então o lucro real considera custo de produto e taxa por canal, não só receita bruta.
Pra sua loja: a verba sobe no que dá lucro e corta o que perde — sozinho, todo dia, sem alguém mexendo no feeling.
O desafio
Ajustar dezenas de campanhas na mão não escala — e escalar sobre ROAS inflado queima caixa. Precisava automatizar a decisão sobre o número real, com travas.
O que construí
Robô Python que lê o sROAS e ajusta orçamento por regra: só sobe acima de 1,5, reduz abaixo de 1,0 e nunca aumenta abaixo de 1. Teto diário soft + kill imediato de quem gasta demais com sROAS baixo.
Stack
O resultado
Como funciona, em 3 passos
Lê o retorno de verdade da Shopify — não o inflado do gerenciador.
Sobe acima de 1,5, reduz abaixo de 1,0, nunca aumenta abaixo de 1.
Teto diário, cooldown e dead-man's switch cuidam do caixa sozinhos.
Detalhe técnico: a atribuição casa venda↔campanha por utm_term=campaign.id — identificador imutável que sobrevive a renomear a campanha — com 4 camadas de fallback caso o parâmetro falhe. Além das travas de sROAS, o autopilot respeita um teto agregado de conta, não mexe em campanha que ainda está na trava de aprendizado do Meta, aplica cooldown de aumento (no máximo 1x a cada N dias por campanha) e limita a variação máxima por rodada para evitar oscilação. O estado persiste cifrado em AES-256-GCM, a chamada à Graph API tem retry com backoff e respeito ao header Retry-After, e um dead-man's switch (heartbeat + healthcheck + alerta no Telegram) avisa se o robô parar de rodar. Roda via supercronic, está na versão 3, com testes unitários e deploy programático.
Pra sua loja: cada cliente vê o produto certo pra ele, o carrinho cresce — e você não paga mais anúncio por isso.
O desafio
O app genérico sugeria produtos sem nexo. A 1ª versão própria, só por lift de co-compra, inflava pares raros e matava o complemento dos best-sellers.
O que construí
Motor híbrido com três sinais rank-normalizados: co-compra por cosseno, similaridade semântica (bge-m3/Qdrant) e popularidade. Intenções complemento/substituto, diversidade por família, penalidade de preço e flag de rollback.
Stack
O resultado
Como funciona, em 3 passos
Co-compra, similaridade semântica e popularidade, cada uma com peso.
Diversidade por família e penalidade de preço evitam viés.
Cold-start via semântico cobre até produto sem histórico.
Detalhe técnico: os três sinais — co-compra, semântico e popularidade — entram normalizados por rank antes de somar, para que uma escala diferente entre eles não domine o resultado sozinha. A intenção complemento/substituto decide se a sugestão empurra "leva junto" ou "alternativa"; a diversidade por família de produto evita mostrar 5 variações do mesmo item; a penalidade de preço evita empurrar sempre o mais caro do catálogo. A flag de rollback existe porque motor de recomendação é o tipo de sistema que erra silencioso — dá para reverter pro sinal anterior sem redeploy.
Pra sua loja: boa parte de quem abandona o carrinho volta e compra — no automático, sem queimar cupom à toa.
O desafio
A recuperação nativa era um e-mail atrasado. E um bug chegou a mandar cupom para quem já comprou — queimando margem.
O que construí
Fluxo por evento de checkout, dual-channel (e-mail + WhatsApp): lembrete em minutos, quebra de objeção, incentivo só no fim. Guard anti-cupom-indevido checando pedido concluído por contato, e-mail, telefone e ID Shopify.
Stack
O resultado
Como funciona, em 3 passos
Dispara em minutos, não horas depois.
Quebra de objeção primeiro, incentivo só no fim.
Confere contato, e-mail, telefone e loja antes de qualquer desconto.
Detalhe técnico: o guard não se contenta com e-mail — cruza contato, e-mail, telefone e ID da loja (Shopify) antes de disparar qualquer lembrete ou cupom. O último campo importa porque a mesma automação atende mais de uma loja: sem o ID da loja no cruzamento, um cliente que já comprou na loja A poderia receber cupom disparado pela loja B só por coincidência de e-mail ou telefone. Foi exatamente essa lacuna — checagem por um campo só — que causou o bug original.
Pra sua loja: o anúncio volta a enxergar cada venda e otimiza melhor — mesmo com bloqueio de cookie no navegador.
O desafio
Com bloqueio de cookie, o pixel perdia conversão e o algoritmo otimizava cego. E o gasto não voltava pra Shopify, travando o cálculo de retorno real.
O que construí
Tracking server-side enviando cada pedido ao Meta via Conversions API com dedup por event_id e hashing de PII (EMQ), + conector que puxa gasto do Meta Graph e GA4 e injeta na Shopify — idempotente, cron diário.
Stack
O resultado
Como funciona, em 3 passos
O pixel do navegador perde a conversão sozinho.
Envia o pedido direto, com dedup por event_id e hash de PII.
EMQ sobe, gasto volta pra Shopify, ROAS real fecha certo.
Detalhe técnico: a Conversions API deduplica eventos por event_id — evita contar a mesma venda duas vezes quando o pixel do navegador e o servidor mandam o mesmo evento — e faz hashing de PII antes de enviar, o que sobe o EMQ (Event Match Quality), a nota que o Meta dá pra qualidade do sinal recebido. O conector que injeta gasto do Meta Graph e do GA4 de volta na Shopify é idempotente (pode rodar de novo sem duplicar linha) e roda em cron diário, mantendo o cálculo de ROAS real sempre com o gasto do dia certo.
Pra sua loja: um só sistema cuida do cliente do carrinho ao pós-venda, com WhatsApp disparando na hora certa.
O desafio
Várias lojas precisavam do mesmo CRM sem manter código diferente por marca, e sem que um bug numa respingasse nas outras.
O que construí
CRM Node + MongoDB com deploy por patches versionados sobre imagem base (cada tenant é rebrand com tag fixa). Automações por override em banco, cupom via OAuth próprio e rastreio no WhatsApp. Webhooks acionam os fluxos.
Stack
O resultado
Como funciona, em 3 passos
Cada tenant nasce do mesmo código, com patch por cima.
Muda o fluxo de uma loja sem subir deploy novo.
Webhook aciona a automação certa, na hora certa, por loja.
Detalhe técnico: cada tenant nasce de uma imagem base comum e recebe patches versionados por cima — rebrand por tag fixa, não fork de código, então uma correção sobe para todas as lojas de uma vez. A automação (que mensagem, quando, pra quem) é resolvida por override gravado em banco por tenant, não por deploy separado — mudar um fluxo de uma loja não exige subir código novo. O cupom é emitido via integração OAuth própria com a Shopify de cada loja, e webhooks de pedido/cliente acionam os fluxos em tempo real.
Pra sua loja: cada venda paga sai com nota fiscal sozinha, na hora certa — sem alguém emitindo nota à mão o dia inteiro.
O desafio
Emitir nota de centenas de pedidos por dia na mão não escala, e a logística tem hora pra fechar a remessa: pedido pago sem nota é pedido que não embarca. Precisava de emissão contínua, confiável, que não parasse sozinha.
O que construí
Um serviço que escuta o pedido pago na Shopify, sincroniza com o ERP (Tiny/Olist) e emite a NF-e pelo ERP de hora em hora, sozinho. Uma API recebe o webhook do pedido e um worker agendado faz a emissão em ciclo, reavaliando a fila a cada rodada.
Stack
O resultado
Como funciona, em 3 passos
A venda paga chega na hora, direto pelo evento da loja.
Puxa o pedido no ERP e monta a fila de quem já pode faturar.
O worker fatura em ciclo, no minuto 0, e reavalia a fila a cada rodada.
Detalhe técnico: a emissão passou por três blindagens depois de incidentes reais de produção. Primeiro, a fila sofria head-of-line blocking — pedidos de pré-venda, por serem os mais antigos, ocupavam todas as vagas do ciclo e travavam os pedidos normais; corrigido com um ORDER BY que prioriza o pendente e só encaixa pré-venda se sobrar vaga. Depois, um ECONNRESET no sync abortava o ciclo inteiro e não faturava nada: agora cada etapa tem retry com backoff (respeitando 429/Retry-After) e try/catch isolado, então a emissão sempre acontece mesmo se o sync falhar. Por fim, a busca de pedidos no ERP lia só a primeira página (100 pedidos): em pico, tudo além do 100º ficava invisível — corrigido com paginação completa e teto configurável. O serviço reavalia a cada tick, e um pedido de pré-venda vira nota sozinho no instante em que o estoque fica positivo.
Pra sua loja: você vende o lote antes dele chegar e entra caixa adiantado — sem risco de faturar cedo demais e sem mexer em nada à mão.
O desafio
Abrir pré-venda na mão é frágil: quando um tamanho zera por venda normal ele deveria virar pré-venda sozinho, e um pedido antigo comprado com estoque físico não pode ser segurado por engano. Faltava a regra automática, por tamanho.
O que construí
Um serviço que varre a loja a cada poucos minutos: produto com tag pré-venda cujo tamanho zerou passa a aceitar compra, entra no desconto automático e ganha um carimbo de data de início. Só pedidos feitos depois desse carimbo são etiquetados e segurados — os antigos passam limpos.
Stack
O resultado
Como funciona, em 3 passos
Enxerga a variante sem estoque de um produto marcado pra pré-venda.
Libera a venda, entra no desconto automático e carimba a data de início.
Marca e segura apenas as compras feitas depois do carimbo — nunca as antigas.
Detalhe técnico: o coração da regra é um carimbo de data (metafield por variante) que resolve um problema sutil — ao ligar a pré-venda de um tamanho que acabou de zerar, pedidos antigos comprados com estoque físico seriam etiquetados e segurados por engano; a nota fiscal só segura o pedido cuja data é posterior ao carimbo. O mesmo carimbo é lido pelo serviço de faturamento, então os dois sistemas concordam sobre o que é pré-venda sem duplicar lógica. Há ainda o cuidado com o desconto automático da Shopify, que não aceita ficar sem itens: a solução foi um produto-âncora em rascunho (não comprável) fixo no desconto, para nunca vazar o desconto nos tamanhos que ainda têm estoque. Quando o lote chega, o tamanho volta a "esgotado até repor" e sai do desconto sozinho.
Pra sua loja: o cliente pergunta preço, tamanho ou prazo no Instagram e recebe resposta certa na hora — com a informação real da sua loja, não um texto genérico.
O desafio
Comentário e direct chegam o dia todo e a resposta atrasada perde a venda. Mas um robô que responde "de cabeça" inventa preço e prazo — precisava responder rápido e com o dado verdadeiro do catálogo e das políticas da loja.
O que construí
Um respondedor que, antes de escrever, consulta a base de conhecimento da loja (catálogo + políticas, por busca semântica) e só então gera a resposta com IA. Usa uma cadeia de 3 modelos em ordem de custo, com painel próprio protegido por senha pra revisar antes de publicar.
Stack
O resultado
Como funciona, em 3 passos
A pergunta do cliente entra pelo Instagram e dispara o fluxo.
Busca catálogo e políticas por significado antes de escrever qualquer coisa.
Gera a resposta pelo modelo mais barato que funcionar; se cair, tenta o próximo.
Detalhe técnico: antes de gerar a resposta, o serviço faz uma busca semântica (RAG com Qdrant + embeddings bge-m3) na base de conhecimento e no catálogo da loja, com piso de score — se nada relevante volta, ele responde mesmo assim, mas sem contexto inventado (fail-open com timeout, nunca trava o atendimento). A geração usa uma cadeia de 3 provedores em ordem de custo (um modelo econômico primeiro, dois de reserva pagos e grátis), devolvendo a primeira que responder — resiliência sem depender de uma única API. O system prompt é mantido com prefixo estável e cacheável pra baratear cada chamada, e o painel de revisão tem autenticação com hash bcrypt. Roda em produção na versão 1.7.
Pra sua loja: quem quis comprar e o produto estava esgotado é avisado assim que volta — e você recupera uma venda que ia embora calada.
O desafio
Produto esgotado é demanda comprovada que some sem deixar rastro. O cliente ia embora e não havia como chamá-lo de volta quando o estoque retornasse — a venda mais fácil da loja virava perda silenciosa.
O que construí
Um serviço que captura o interesse de quem clicou "avise-me quando voltar" no tamanho esgotado, registra esse contato marcado por tag no e-mail marketing e dispara o aviso automático assim que aquele tamanho específico volta ao estoque.
Stack
O resultado
Como funciona, em 3 passos
No tamanho esgotado, o "avise-me quando voltar" registra o contato.
O contato entra etiquetado por produto e tamanho, pronto pra reativar.
Assim que aquele tamanho retorna, o aviso sai sozinho pra quem esperava.
Detalhe técnico: o serviço lê o estoque pela Shopify Admin API e cruza o retorno de cada variante específica (tamanho, não produto) com a lista de quem pediu aviso — o cliente que queria o 38 não é notificado quando volta o 42. O registro do interesse é feito por tag no ActiveCampaign, o que deixa o disparo do aviso rodar dentro do próprio fluxo de e-mail marketing da loja, sem construir uma régua de envio paralela. É a mesma demanda que a pré-venda ataca pela frente: um evita perder a venda antes do produto chegar, o outro recupera a venda depois que ele esgota.
Remix + Prisma + MariaDB, jobs em cron para reconciliar estado de carrinho e checkout.
Compara com Google Shopping e alerta no WhatsApp quando um concorrente muda de faixa.
Mini-Shopify SSR, PII cifrada, SSL por domínio próprio de cada cliente.
Webhook mantém kits coerentes em tempo real, evitando vender combo sem componente.
PII AES-256-GCM por campo, CNPJ por HMAC para não expor documento em claro.
Consolida gasto Meta+Google para painéis, com normalização de fuso e moeda.
Gera o feed de produtos da loja pro Merchant Center a partir da Shopify, atualizado sozinho.
Espelha o feed do Instagram da marca no site, servido por serviço próprio.
Pagina todo o catálogo e os pedidos da Shopify a cada 6h com upsert idempotente e reconciliação de deleções.
Todo esse conjunto — BI, autopilot, storefront, retenção, tracking, CRM, fiscal, pré-venda e atendimento com IA — roda sobre Docker Swarm com Traefik como proxy reverso e TLS automático via Let's Encrypt, somando mais de 25 serviços em produção. A camada de servidor é hardenizada: SSH com acesso restrito, UFW e fail2ban ativos, headers de segurança aplicados nas respostas e portas administrativas liberadas só para IPs específicos. É a mesma disciplina de engenharia que sustenta o pico da Fiber sem cair.
Como cheguei da nutrição e suporte técnico até construir essa máquina — 4+ anos de estrada, na página Sobre mim →.
Autopilot de orçamento, recuperação de carrinho e tracking server-side como serviço — veja em Automação para ecommerce →.
Gestão de Meta e Google Ads sobre ROAS real, não sobre o número inflado do gerenciador — veja em Tráfego pago para ecommerce →.
Sem intermediário e sem compromisso. Me chama no WhatsApp e a gente olha os seus números juntos — costumo responder no mesmo dia útil.
Prefere o direct? Instagram @rafaeltondin →