Memozze - memoriais digitais e celebrações da vida
Visão Geral
O Memozze nasceu de um problema muito humano: depois que alguém se vai, as memórias ficam espalhadas entre grupos de WhatsApp, álbuns de fotos, stories antigos e relatos que se perdem com o tempo. Não havia um lugar simples, permanente e colaborativo onde família e amigos pudessem construir um memorial vivo, com histórias, fotos, eventos e homenagens em torno de uma pessoa.
Transformei essa dor em um produto SaaS em produção. O Memozze permite criar memoriais digitais com biografia, linha do tempo, galeria de fotos, slideshows e comentários, além de eventos associados (como celebrações da vida, aniversários de nascimento e datas especiais). O foco é tornar fácil para famílias e amigos contribuírem juntos, sem fricção técnica.
Este é um projeto solo end-to-end: concepção, design da experiência, arquitetura, desenvolvimento full‑stack, infraestrutura, billing com Stripe e pipeline de CI/CD com GitHub Actions. Levei o projeto de um monorepo local até um ambiente de produção estável em VPS, com monitoramento, logs estruturados e processos assíncronos para tarefas pesadas.
Em produção desde 2025, o produto vem crescendo de forma orgânica, com aproximadamente 150 usuários cadastrados, mais de 20 memoriais criados e mais de 50 eventos ativos sendo usados por famílias reais para organizar lembranças e celebrações.
Diferencial Principal
O diferencial do Memozze não é apenas “mais uma aplicação CRUD”: trata-se de um produto sensível, usado em momentos emocionalmente carregados, que precisa ser estável, rápido e simples para pessoas não técnicas. Tecnicamente, isso se traduz em três decisões principais.
Primeiro, uma arquitetura orientada a performance e resiliência: Fastify 5 com TypeScript e validação de schema, Drizzle ORM para um layer de acesso a dados previsível, Redis para cache e BullMQ para filas assíncronas. Isso garante que picos de tráfego - comuns quando um memorial é compartilhado nas redes sociais logo após uma perda - sejam absorvidos sem degradar a experiência de leitura.
Segundo, uma postura pragmática em relação à infraestrutura: eu comecei com Kubernetes (K3s) e migrei conscientemente para Docker Compose em VPS quando ficou claro que a complexidade operacional não pagava o custo para o estágio atual do produto. O projeto mostra, na prática, como trazer decisões de “enterprise infra” de volta para algo simples, audível e fácil de evoluir sem sacrificar boas práticas.
Terceiro, um padrão de lazy initialization via Proxy para providers com dependências externas (e-mail, storage, filas), resolvendo uma classe inteira de bugs de bootstrap em Fastify sem recorrer a um framework pesado de injeção de dependência. Esse padrão é reutilizável e mostra maturidade de engenharia focada em DX e confiabilidade.
Arquitetura
- Web App (Next.js 15): Frontend em React/Next.js com TypeScript, Tailwind CSS, Radix UI e TanStack Query; renderiza páginas de memorial e eventos, lida com navegação, estados assíncronos e interação em tempo real com a API.
- Editor de Memoriais (Tiptap + Embla): Editor rich text baseado em Tiptap para biografias e histórias, com carrosséis usando Embla para slideshows de fotos e sessões de destaque.
- API HTTP (Fastify 5): Camada de backend em Node.js/TypeScript, com rotas REST para gestão de usuários, memoriais, eventos, comentários, uploads e billing; usa validação de schema para requests/responses.
- Camada de Persistência (PostgreSQL + Drizzle ORM): Banco relacional para dados principais (usuários, planos, memoriais, eventos, convites), acessado via Drizzle para garantir type-safety end-to-end e SQL otimizado.
- Cache e Filas (Redis + BullMQ): Redis usado tanto para cache de consultas críticas quanto como backend de filas BullMQ para jobs assíncronos (envio de e-mails, processamento de notificações, tarefas de manutenção).
- Serviço de Arquivos: Armazenamento de fotos e assets de memoriais, com integração direta a partir da API e controle de ACLs adequadas para conteúdo público/privado.
- Serviço de E-mail: Envio de e-mails transacionais (confirmação de conta, convites para colaborar em memoriais, notificações de eventos), orquestrado pelos jobs de fila.
- Gerenciamento de Secrets: Vault em produção para armazenar secrets sensíveis (chaves Stripe, credenciais de banco, access keys da AWS), com rotação automatizada e acesso via API.
- Billing e Assinaturas (Stripe): Integração com Stripe para planos pagos, ciclo de cobrança e gerenciamento de status de assinatura vinculado a features premium da aplicação.
- Logging e Monitoring: Logging estruturado com Pino em todos os serviços de backend; Sentry para captura de erros, performance e tracing entre web e API.
- Monorepo e Build System (Turborepo + pnpm): Monorepo com workspaces pnpm para
web,apie pacotes compartilhados (tipos, utils, configs), orquestrado por Turborepo para builds e pipelines otimizados. - Infraestrutura e Deploy (Docker Compose + VPS + GitHub Actions): Todos os serviços empacotados em containers; orquestração via Docker Compose em VPS dedicado; deployments automatizados via GitHub Actions usando SSH e comandos de atualização.
Destaques Técnicos
- Estruturei um monorepo com Turborepo e pnpm workspaces, compartilhando tipos, validações e utilitários entre frontend e backend para garantir type-safety de ponta a ponta.
- Migrei conscientemente de um cluster K3s em produção para uma stack Docker Compose em VPS, reduzindo complexidade operacional e custo sem perder observabilidade, automação de deploy ou boas práticas de isolamento.
- Implementei um padrão de lazy proxy com
Proxydo JavaScript para inicialização tardia de providers (MailProvider, FileProvider, queue emitter), eliminando erros de bootstrap e simplificando o acoplamento entre Fastify e integrações externas. - Usei Drizzle ORM no lugar de Prisma para obter type-safety forte com código SQL idiomático, facilitando otimização de queries e entendimento da camada de dados a longo prazo.
- Modelei fluxos assíncronos com BullMQ + Redis para e-mails transacionais e notificações, mantendo a API HTTP responsiva mesmo em cenários de pico de criação/compartilhamento de memoriais.
- Configurei HashiCorp Vault para gestão central de secrets de produção, com integração à pipeline de CI/CD e política de não expor credenciais em variáveis de ambiente estáticas ou logs.
- Construí um fluxo de CI/CD com GitHub Actions que realiza build, testes, criação de imagens e deploy automatizado via SSH, com rollback simples através de versões de compose.
- Entreguei um produto SaaS em produção, com ~150 usuários cadastrados, 20+ memoriais e 50+ eventos ativos, validando a arquitetura e o design com uso real em um domínio sensível.