Pular para o conteúdo

Desenvolvedor BackendNode.js · NestJS · TypeScript · AWS

Desenvolvedor BackendMarcus Vinícius Carneiro dos Santos

Escrevo backend de pagamentos — a parte do sistema onde errar custa dinheiro de verdade.

Filas, idempotência e fronteiras transacionais explícitas: nada é cobrado duas vezes, nada se perde quando o broker cai.

>Não precisa acreditar em mim. Pode conferir.

brinque com o cubo — arraste, clique ou aperte

arraste / toque /

15+

endpoints REST em produção

5

recursos AWS via IaC

80%

menos reprocessamento em lote

100%

webhooks com assinatura verificada

60s

detecção de falha na DLQ

C2

inglês — domínio pleno

01 //

Projetos

Sistemas que construí e o que cada um resolve

Mais no GitHub
01AWS Serverless

Pipeline de Pagamentos Assíncrono

Processamento de pagamentos end-to-end fora do ciclo da requisição HTTP: 2 funções Lambda e 5 recursos AWS provisionados via Infrastructure as Code com Serverless Framework.

O que importa

  • Retirei a chamada ao provider do ciclo da requisição HTTP, isolando latência de terceiros do tempo de resposta da API.
  • Adotei o contrato de partial batch failure do SQS e reduzi em 80% o reprocessamento de mensagens em lotes com falha isolada.
  • Política de retry em 2 camadas (3 tentativas de cobrança e 5 recebimentos) com roteamento para dead letter queue e alarme de detecção em até 60 segundos.
Node.jsTypeScriptAWS LambdaSQS FIFOSNSS3CloudWatchServerless Framework
02Consistência

Cobrança Idempotente

Garantia de cobrança única por requisição mesmo sob retries, concorrência e falhas parciais de infraestrutura.

O que importa

  • Chave de idempotência combinada com unique index no banco, fechando a janela de duplicidade no nível do schema.
  • Controle de concorrência otimista por UPDATE condicional, sem lock global e sem perder escrita concorrente.
  • Replay da mesma chave ao provider em cada retry, para que a tentativa repetida seja reconhecida como a mesma cobrança.
PostgreSQLPrisma ORMNestJSSQS
03Mensageria

Outbox Transacional

Entrega at-least-once de eventos de domínio mesmo com o broker indisponível, aplicada tanto sobre SQS/SNS quanto sobre RabbitMQ.

O que importa

  • Evento e mudança de estado gravados na mesma transação, eliminando a janela entre commit no banco e publicação no broker.
  • Publicação assíncrona com backoff exponencial e dead letter queue para mensagens que esgotam as tentativas.
  • Mesmo padrão reaproveitado em dois brokers diferentes, sem acoplar o domínio ao transporte.
RabbitMQSQSSNSPostgreSQLPrisma ORM
04Stripe · Mercado Pago · PIX

Integrações de Pagamento

Dois provedores de pagamento integrados cobrindo Checkout, cobranças PIX e webhooks autenticados antes de qualquer mudança de status.

O que importa

  • Verificação de assinatura HMAC em todo webhook recebido, com 100% de rejeição de notificações não autenticadas antes da atualização de status.
  • Checkout e cobranças PIX cobertos pelo mesmo fluxo de máquina de estado do pagamento.
  • Fronteira transacional explícita em volta da chamada ao gateway, para que erro de infraestrutura pós-autorização não marque como recusado um pagamento já cobrado.
StripeMercado PagoPIXNestJSHMACWebhooks
02 //

Experiência

O que fiz, com números

Desenvolvedor Backend

Freelancer · Conchal, São Paulo

Jan 2026 – Presente

Disponível para novos projetos

  • Desenvolvi APIs REST com Node.js, TypeScript e NestJS, entregando 15+ endpoints de autenticação, gestão de produtos e processamento de pagamentos, com JWT, refresh tokens, guards de rota e validação de payloads com class-validator e Zod.
  • Projetei o processamento assíncrono de pagamentos end-to-end com 2 funções Lambda e 5 recursos AWS (SQS FIFO, dead letter queue, SNS, S3 e CloudWatch) provisionados via Infrastructure as Code, retirando a chamada ao provider do ciclo da requisição HTTP.
  • Garanti cobrança única por requisição combinando chave de idempotência com unique index, controle de concorrência otimista por UPDATE condicional e replay da mesma chave ao provider em cada retry.
  • Reduzi em 80% o reprocessamento de mensagens em lotes com falha isolada ao adotar o contrato de partial batch failure do SQS.
  • Implementei política de retry em 2 camadas (3 tentativas de cobrança e 5 recebimentos) com roteamento para dead letter queue e alarme de detecção em até 60 segundos.
  • Corrigi classe de falha crítica em que erro de infraestrutura posterior à autorização marcava como recusados pagamentos já cobrados no provider, isolando a chamada ao gateway atrás de uma fronteira transacional explícita.
  • Modelei outbox transacional garantindo entrega at-least-once de eventos de domínio mesmo com o broker indisponível, padrão aplicado tanto sobre SQS/SNS quanto sobre RabbitMQ.
  • Integrei 2 provedores de pagamento (Stripe e Mercado Pago), cobrindo Checkout, cobranças PIX e webhooks com verificação de assinatura HMAC, garantindo 100% de rejeição de notificações não autenticadas antes da atualização de status.
  • Reduzi a carga de leitura no banco com cache Redis de TTL 10s e rate limiting por IP, sustentando picos de tráfego em serviço serverless com fallback resiliente e deploy em produção na Vercel.
  • Modelei e mantive schemas com Prisma ORM e PostgreSQL, aplicando migrations versionadas, índices compostos e constraints de unicidade, com validação de entrada em 100% dos endpoints de escrita.
  • Entreguei 3 aplicações full-stack com React.js, Next.js e NestJS, incluindo marketplace com checkout e serviço serverless de geração dinâmica de SVG, com testes em Jest e Vitest sobre as regras de negócio críticas.
  • Padronizei ambiente de desenvolvimento reproduzível com Docker Compose e LocalStack, operacional em 2 comandos, com code review e versionamento via Git/GitHub.
03 //

Decisões técnicas

Os problemas difíceis, e por que resolvi desse jeito

  • Problema

    Uma classe de falha crítica: erro de infraestrutura posterior à autorização marcava como recusados pagamentos que já tinham sido cobrados no provider. O dinheiro saía do cliente e o sistema dizia que não.

    Decisão

    Isolei a chamada ao gateway atrás de uma fronteira transacional explícita, separando o efeito externo irreversível do commit local reversível.

    Resultado

    Falha de infraestrutura depois da autorização deixou de produzir estado divergente entre provider e banco.

04 //

Stack

Ferramentas que uso em produção

Core

  • Node.js
  • TypeScript
  • NestJS
  • REST APIs
  • Event-Driven

AWS & IaC

  • Lambda
  • SQS FIFO
  • SNS
  • S3
  • CloudWatch
  • IAM
  • Serverless Framework
  • LocalStack

Dados

  • PostgreSQL
  • Prisma ORM
  • Migrations
  • Índices compostos
  • Redis

Mensageria

  • RabbitMQ
  • Transactional Outbox
  • Dead Letter Queue
  • Retry com backoff
  • Idempotência

Pagamentos

  • Stripe
  • Mercado Pago
  • PIX
  • Checkout
  • Webhooks HMAC
  • Máquinas de estado

Front-end

  • React
  • Next.js

Qualidade

  • Jest
  • Vitest
  • Supertest
  • Testcontainers
  • Clean Code
  • SOLID
  • Design Patterns

Infra & CI/CD

  • Docker
  • Docker Compose
  • GitHub Actions
  • Git/GitHub
  • Vercel
05 //

Formação & certificações

  • Fundamentos de Inteligência Artificial no Azure — AI-900

    Fundação Bradesco / Microsoft · Certificação

    2026

  • Administrando Banco de Dados

    Fundação Bradesco · Curso complementar

    2026

  • Recursos Humanos

    ETEC Pedro Ferreira Alves · Técnico

    Conclusão em Dezembro 2021

$ mail akyriuu

Tem projeto ou oportunidade?

Aberto a posições backend e freelances em Node.js, NestJS e AWS. Respondo rápido.

+55 19 99477-0193