Petzara
SaaS full-stack de gestão para petshops — agendamentos, financeiro, equipe e assinatura Stripe
01
Visão Geral
O Petzara é um SaaS construído do zero com dois repositórios separados: front-end React 19/Vite e back-end Node.js/Express/MongoDB. O sistema é multi-tenant — cada petshop tem seus dados isolados, podendo adicionar colaboradores que compartilham o contexto em tempo real via Socket.io. Possui autenticação JWT com refresh automático via cookie httpOnly, sistema de assinatura completo com Stripe (planos mensal e anual, trial, webhooks e bloqueio de acesso ao expirar), cron jobs para atualização automática de status de agendamentos e envio de e-mails transacionais via Resend.
Meu papel
Desenvolvedor full-stack solo — arquitetura, back-end Node.js/Express/MongoDB, front-end React 19/Vite, Socket.io, integração Stripe completa, deploy Railway e manutenção em produção.
Categoria
SaaS
Ano
2025
Status
Em Produção02
O Problema
Petshops crescem pelo boca-a-boca mas travam na operação: agenda no caderno, histórico de clientes perdido no WhatsApp, equipe sem visibilidade do dia e financeiro em planilhas. Com o crescimento, esse processo manual se torna um gargalo que limita a capacidade operacional.
03 — Solução
SaaS multi-tenant com front-end React PWA e back-end Node.js/MongoDB: agenda de agendamentos com atualização automática de status, cadastro de clientes/pets/serviços, financeiro integrado, gestão de colaboradores com permissões e assinatura Stripe com trial — acessível como app instalável no celular.
04
Funcionalidades Principais
Agenda em Tempo Real
Agendamentos com transição automática de status (confirmado → em andamento → concluído) via cron job, com updates instantâneos para toda a equipe via Socket.io.
Gestão de Clientes e Pets
Cadastro completo de tutores e pets com histórico de serviços, observações e preferências de atendimento.
Controle Financeiro
Dashboard de receitas, transações e métricas do negócio com exportação de dados por período.
Gestão de Colaboradores
Cadastro de equipe com permissões escalonadas — colaboradores acessam apenas o necessário para o atendimento diário.
Assinatura Stripe
Planos mensal e anual com checkout Stripe, trial gratuito, webhook de pagamento e bloqueio automático de acesso ao expirar a assinatura.
PWA + Link Público de Agendamento
Instalável como app no celular via PWA. Link público permite clientes marcarem horário sem criar conta no sistema.
05
Tecnologias
Front-end
Back-end
Banco de Dados
Deploy
Integrações
Bibliotecas
06
Demonstração



07
Decisões de Design
Quatro temas de cor trocáveis em runtime via CSS custom properties (terracotta, forest, ocean, ochre). Interface dividida em dois contextos: admin com gestão completa e colaborador com visão focada no atendimento do dia. Tour guiado integrado via GuidedTourContext para onboarding de novos usuários.
08
Desafios Técnicos
O webhook do Stripe exige o body cru (Buffer) para validar a assinatura via secret, mas o express.json() consome o body antes. Solução: montar a rota do webhook antes de qualquer middleware de body parsing. Segundo desafio: o refresh token inline no authMiddleware que regenera o access token sem rejeitar a requisição — o novo token é retornado no header X-Access-Token e capturado pelo interceptor axios do front-end de forma transparente.
09
Resultados
- SaaS em produção com agendamentos e assinaturas Stripe ativas
- Multi-tenancy funcional: admin e colaboradores compartilham dados em tempo real via Socket.io
- PWA instalável no celular com link público de agendamento para clientes sem conta
10
Aprendizados
- JWT com dupla camada: access token 15 min + refresh token 30 dias em cookie httpOnly, renovado automaticamente via interceptor axios sem redirecionar o usuário
- Multi-tenancy em MongoDB: isolar recursos por owner ObjectId, com colaboradores herdando o contexto do admin via campo owner
- Integração Stripe completa: a rota do webhook precisa ser montada antes do express.json() para receber o body cru e validar a assinatura — detalhe que quebra a integração se ignorado
- Socket.io com salas por owner: todos os eventos (agendamentos, clientes, pets, financeiro) disparam updates em tempo real para admin e colaboradores simultaneamente
- Cron jobs em produção: atualização automática de status de agendamentos, alertas de trial expirando em 3 dias e expiração automática de trials vencidos
Gostou desse projeto?
Tem uma ideia parecida ou quer construir algo diferente? Vamos conversar.