800+
commits
da ideia ao encerramento
Case study de engenharia
O NekoMoji foi projetado, desenvolvido e operado de ponta a ponta por Gabriel. Esta é a leitura técnica de um produto que processou mídia, pagamentos e mensagens para 37 mil pessoas — com decisões de arquitetura, confiabilidade, privacidade e custo tomadas em produção.
receive(signedWebhook)
↓ validate · normalize · route
guard(identity, limits, premium)
↓ download · transcode · compress
send(orderedSticker)
↓ correlate · aggregate · observe
A base privada em números
Ordens de grandeza registradas no encerramento. Os números do produto foram auditados; os números de código representam o repositório em outubro de 2026.
800+
commits
da ideia ao encerramento
100+
módulos TypeScript
separados por domínio
120+
arquivos de teste
unitários e de integração
7
integrações sociais
em um pipeline comum
37.293pessoas atendidas
405.531figurinhas entregues
2.576pagamentos aprovados
O repositório do NekoMoji permanece privado. Ele contém histórico operacional, configurações e informações ainda confidenciais. Este case publica arquitetura, decisões e resultados suficientes para avaliação técnica sem expor código ou dados sensíveis.
Jornada de infraestrutura
A infraestrutura mudou junto com o estágio do produto. Primeiro, velocidade. Depois, previsibilidade de custo. Por fim, automação e controles para uma operação madura conduzida por uma pessoa.
Agosto–setembro de 2025
A primeira infraestrutura usou serviços da AWS para colocar o produto no ar rapidamente. O objetivo era reduzir o tempo entre ideia e uso real, mesmo com custo ainda pouco previsível.
time-to-marketOutubro de 2025
A operação foi levada para uma VPS Hostinger pré-paga por dois anos. A troca reduziu a incerteza mensal e transformou infraestrutura em uma despesa conhecida — importante para um projeto pessoal.
FinOpsNovembro de 2025–março de 2026
Linux, Nginx, TLS, PM2, domínio, processos e backups passaram a fazer parte do produto. A migração para a Cloud API adicionou webhooks, filas e novas fronteiras de falha.
SRE soloAbril–setembro de 2026
CI, branch protegida, releases, deploy, health checks e rollback reduziram o risco operacional. Portas ficaram restritas, serviços internos foram isolados e a saúde passou a ser verificada depois de cada entrega.
defesa em profundidadeArquitetura em camadas
O sistema evoluiu para fronteiras claras: transporte, orquestração, domínio, persistência e operação. Isso permitiu mudar uma parte sem reescrever a conversa inteira.
Entrada
Webhooks assinados recebiam mensagens e status da Meta. O servidor respondia rápido e encaminhava o evento para o pipeline sem acoplar HTTP à regra de negócio.
Orquestração
Guardas, cadastro, comandos, limites, links Premium e mídia seguiam uma ordem explícita. Cada domínio tinha handlers próprios, mantendo contratos públicos estáveis durante as refatorações.
Processamento
Imagens, vídeos e GIFs passavam por validação, recorte, compressão e metadados. Vídeos difíceis usavam prévia, escada adaptativa e circuit breaker para evitar consumo inútil de CPU.
Estado e negócio
Usuário unificado, uso, Premium, indicação e histórico conviviam com cache e consultas indexadas. Pagamentos eram validados no provedor e processados de forma idempotente.
Saída
Texto, menus, figurinhas e reações saíam por um único ponto. Isso permitiu instrumentar tentativas, aceites, falhas, tipos e jornadas sem espalhar telemetria por cada fluxo.
Operação
Agregados diários, health checks e relatórios ligavam comportamento técnico a uso, receita e custo. Releases versionadas passavam por CI, deploy automatizado e rollback com verificação de saúde.
Ciclo de uma interação
O usuário via poucos segundos de espera. O backend precisava coordenar identidade, regras, serviços externos, CPU, entrega e telemetria.
Webhook
assinatura e envelope
Roteamento
comando, link ou mídia
Guardas
usuário, grupo, limite e Premium
Execução
download ou conversão
Entrega
fila, upload e mensagem
Observação
aceite, status e agregado
Caminho feliz
Receber → validar → reservar uso → processar → enviar em ordem → confirmar entrega.
Falha recuperável
Retry com backoff → fallback → erro sanitizado → rollback do uso → métrica por categoria.
Regra financeira
Criar preferência → persistir pendência → validar webhook → deduplicar → ativar → invalidar cache.
Estado, dinheiro e confiança
O NekoMoji precisava reconhecer a mesma pessoa em identidades diferentes, conceder exatamente o que foi pago e medir o produto sem transformar conversas em dados de telemetria.
Dados e identidade
O Firestore entrou ainda no primeiro mês. Com o crescimento, telefone, JID e identificadores da Cloud API precisaram convergir sem duplicar pessoas, Premium ou limites.
Pagamentos
O checkout pelo Mercado Pago escondia um fluxo distribuído: preferência, pendência, webhook, consulta ao provedor, ativação e reconciliação. Repetir um evento nunca poderia repetir um benefício.
LGPD e segurança
A adequação não ficou restrita a uma política. Ela chegou aos logs, ao banco, às referências financeiras, à telemetria, aos backups e aos procedimentos de atendimento ao titular.
Decisões e trade-offs
As escolhas abaixo nasceram de problemas observados, não de arquitetura por antecipação.
Operar também era construir
Sem equipes separadas de SRE, dados, segurança ou suporte, o sistema precisava tornar o estado visível e o caminho de recuperação repetível.
Retries com backoff, circuit breakers para FFmpeg e integrações, slow mode, locks de uso e rollback quando a geração falhava.
Health check, snapshots, alertas, desempenho de mídia e séries de tentativas, aceites, entregas e falhas por jornada.
Typecheck, ESLint e Vitest como gate; testes comportamentais protegiam ordem do pipeline, pagamentos, limites e regressões.
Branch protegida, PR, CI, release versionada, tag, deploy por GitHub Actions, PM2 e rollback se o health check não passasse.
Caches explícitos e manutenção Premium por queries, evitando varrer dezenas de milhares de usuários na rotina diária.
Logs sanitizados, Firestore fechado para clientes, exportação e exclusão LGPD e telemetria agregada sem conteúdo pessoal.
Rastreabilidade de produção
A telemetria separava o que o bot tentou, o que a Meta aceitou e o que chegou a um desfecho terminal. Receita oficial vinha do Mercado Pago, não de eventos internos.
Engenharia AI-native, com governança
O projeto atravessou um ano de evolução acelerada dos modelos. Em vez de apostar em um único fornecedor, virou um laboratório prático para comparar raciocínio, geração de código, revisão e automação.
A rastreabilidade não estava em “qual IA escreveu qual linha”, mas no que realmente importa em engenharia: requisito versionado, diff revisável, teste reproduzível, decisão humana e resultado observado.
AI_01
ChatGPT e Codex, Claude, DeepSeek, Grok e outros modelos foram usados como pares diferentes para explorar, criticar e comparar soluções — nunca como uma única fonte de verdade.
AI_02
Cursor, Codex, GitHub Copilot e Claude Code conviveram com instruções compartilhadas, regras específicas por ferramenta e contexto técnico versionado no repositório.
AI_03
AGENTS.md, regras do Cursor, ponte para Claude, instruções do Copilot, skills e runbooks registravam comandos, áreas sensíveis e critérios de aceite.
AI_04
A IA acelerava investigação, testes, documentação e refatorações. A decisão final continuava humana e precisava sobreviver a lint, tipos, testes, revisão, CI e validação em produção.
O ciclo de confiança
O que a produção ensinou
LESSON_01
A resposta 200 da Meta provava aceite, não chegada ao usuário. O monitor passou a correlacionar sent, delivered, read e failed, inclusive fora de ordem.
LESSON_02
Um percentual global parecia saudável enquanto uma categoria de figurinha animada concentrava falhas. Segmentar por tipo e jornada tornou a causa acionável.
LESSON_03
Modelo de usuário, índices, TTL, deduplicação e manutenção query-based determinaram custo e confiabilidade tanto quanto o código do bot.
LESSON_04
Fluxos críticos, runbooks, decisões e procedimentos de rollback reduziram o risco de um sistema operado por uma única pessoa.
LESSON_05
Custos por mensagem, CPU de mídia, volume de suporte e receita foram tratados como partes do desenho — e não apenas como uma planilha posterior.
LESSON_06
O desligamento exigiu data de corte, defesa em profundidade, idempotência, reconciliação financeira e comunicação compatível com o estado real do sistema.
Engenharia com responsabilidade de produto
O NekoMoji reuniu arquitetura de soluções, backend, mídia, pagamentos, dados, segurança, observabilidade, DevOps, IA aplicada, suporte e estratégia de sustentabilidade sob a responsabilidade de um único engenheiro.