Um kit inicial moderno e robusto para construir seu SaaS, construído com as melhores tecnologias do mercado.
- 🚀 Next.js 15 com App Router
- 🔒 Autenticação completa (Google OAuth + Magic Link)
- 💳 Integração Stripe para assinaturas
- 🎨 UI Moderna com shadcn/ui
- 📱 Responsivo e acessível
- 🔐 Segurança reforçada
- 📧 Sistema de Email com Resend
- 🤖 Proteção contra bots com reCAPTCHA
- 🐳 Docker para desenvolvimento e produção
- Node.js (LTS)
- npm ou yarn
- Docker e Docker Compose
- Docker Desktop para Mac/Windows
- Docker Engine para Linux
- Conta no Stripe
- Conta no Resend
- Conta no Google Cloud
- Clone o repositório
git clone https://github.com/vinimatheus/starter-org-dog.git
cd starter-org-dog
- Instale as dependências
npm install
- Configure o banco de dados
# Inicie o PostgreSQL com Docker
docker-compose up -d
- Configure as variáveis de ambiente
# Crie um arquivo .env na raiz do projeto
cp .env.example .env
# Preencha as variáveis necessárias:
# - DATABASE_URL
# - AUTH_SECRET
# - RESEND_API_KEY
# - GOOGLE_CLIENT_ID
# - GOOGLE_CLIENT_SECRET
# - STRIPE_SECRET_KEY
# - STRIPE_WEBHOOK_SECRET
# - STRIPE_PRO_PLAN_PRICE_ID
# - RECAPTCHA_SECRET_KEY
# - NEXT_PUBLIC_RECAPTCHA_SITE_KEY
# - NEXT_PUBLIC_APP_URL
- Inicialize o banco de dados
npx prisma generate
npx prisma db push
- Inicie o servidor de desenvolvimento
npm run dev
-
Crie uma conta no Stripe
- Acesse dashboard.stripe.com
- Obtenha suas chaves de API
-
Configure o webhook
# Instale o Stripe CLI
brew install stripe/stripe-cli/stripe
# Faça login
stripe login
# Inicie o webhook listener
stripe listen --forward-to localhost:3000/api/webhooks/stripe
# Copie o webhook signing secret para seu .env
- Teste os pagamentos
- Cartão de teste:
4242 4242 4242 4242
- Data: Qualquer data futura
- CVC: Qualquer número de 3 dígitos
- CEP: Qualquer CEP válido
- Cartão de teste:
- Acesse Google Cloud Console
- Crie um novo projeto
- Configure as credenciais OAuth 2.0
- Adicione a URL de redirecionamento:
http://localhost:3000/api/auth/callback/google
- Copie o Client ID e Client Secret para o
.env
- Crie uma conta no Resend
- Configure seu domínio de email
- Obtenha sua API key
- Configure o
EMAIL_FROM
no.env
O projeto usa shadcn/ui. Para adicionar novos componentes:
npx shadcn-ui@latest add [nome-do-componente]
- Tailwind CSS para estilização
- Sistema de cores personalizável
- Componentes acessíveis
- Animações suaves
npm run dev # Inicia o servidor de desenvolvimento
npm run build # Cria a versão de produção
npm run start # Inicia o servidor de produção
npm run lint # Executa a verificação de linting
-
Upgrade para Pro
- Usuário clica em "Fazer Upgrade"
- É redirecionado para checkout do Stripe
- Realiza o pagamento
-
Processamento
- Webhook recebe confirmação
- Plano é atualizado para PRO
- Usuário é redirecionado
-
Gerenciamento
- Portal do cliente para gestão
- Atualização de pagamento
- Cancelamento de assinatura
- Verificação de assinatura de webhook
- Proteção CSRF
- Rate limiting
- Validação de email
- Tokens JWT seguros
- Proteção contra bots
- Sessões com expiração
O projeto implementa verificação robusta de IPs para garantir que todas as comunicações com o Stripe sejam autênticas:
- Verificação automática dos IPs oficiais do Stripe
- Cache de IPs atualizado a cada 24 horas
- Endpoints oficiais:
- Webhooks:
https://stripe.com/files/ips/ips_webhooks.json
- API:
https://stripe.com/files/ips/ips_api.json
- Webhooks:
Para maior segurança, configure seu firewall para permitir apenas os IPs oficiais do Stripe:
- Webhooks (IPs que enviam eventos):
# Lista de IPs de webhook
3.18.12.63
3.130.192.231
13.235.14.237
13.235.122.149
18.211.135.69
35.154.171.200
52.15.183.38
54.88.130.119
54.88.130.237
54.187.174.169
54.187.205.235
54.187.216.72
- API (IPs para comunicação com a API):
# Baixe a lista completa de IPs da API
curl https://stripe.com/files/ips/ips_api.txt
- Inscreva-se na lista de anúncios da API
- Receba notificações 7 dias antes de mudanças nos IPs
- Verifique periodicamente os endpoints oficiais:
https://stripe.com/files/ips/ips_api.txt
https://stripe.com/files/ips/ips_webhooks.txt
O sistema verifica automaticamente:
- IP de origem de cada requisição
- Assinatura do webhook
- Cache de IPs atualizado
- Fallback para cache em caso de falha
Para ambientes com proxy/CDN, certifique-se de configurar:
# Exemplo de configuração Nginx
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
starter-org-dog/
├── src/
│ ├── app/ # Rotas e páginas
│ ├── components/ # Componentes React
│ ├── lib/ # Utilitários e configurações
│ └── actions/ # Server Actions
├── prisma/ # Schema do banco de dados
├── public/ # Arquivos estáticos
├── scripts/ # Scripts utilitários
├── Dockerfile # Configuração Docker produção
├── Dockerfile.dev # Configuração Docker desenvolvimento
├── docker-compose.yml # Serviços básicos
└── docker-compose.dev.yml # Ambiente completo
- Faça um Fork
- Crie sua Branch (
git checkout -b feature/AmazingFeature
) - Commit suas mudanças (
git commit -m 'Add AmazingFeature'
) - Push para a Branch (
git push origin feature/AmazingFeature
) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para detalhes.
Desenvolvido com ❤️ por Vinicius Matheus
Se você gostou do projeto, considere dar uma ⭐️ no GitHub!
O projeto utiliza Docker para garantir consistência entre ambientes de desenvolvimento. Temos dois modos de execução:
# Inicia apenas o PostgreSQL
docker-compose up -d
# Para parar
docker-compose down
# Inicia todos os serviços (Next.js + PostgreSQL)
docker-compose -f docker-compose.dev.yml up
# Para parar
docker-compose -f docker-compose.dev.yml down
Para produção, utilizamos uma configuração otimizada:
# Build da imagem de produção
docker build -t dog-saas:prod .
# Executa o container
docker run -p 3000:3000 \
--env-file .env.production \
dog-saas:prod
Dockerfile
: Configuração para ambiente de produçãoDockerfile.dev
: Configuração para desenvolvimentodocker-compose.yml
: Serviços básicos (PostgreSQL)docker-compose.dev.yml
: Ambiente completo de desenvolvimento
volumes:
postgres_data: # Dados do PostgreSQL
node_modules: # Dependências do Node.js
# Ver logs dos containers
docker-compose logs -f
# Reconstruir containers
docker-compose build --no-cache
# Limpar recursos não utilizados
docker system prune
# Ver status dos containers
docker-compose ps
- Problemas de Permissão
# Ajuste permissões do volume
sudo chown -R $USER:$USER ./postgres-data
- Limpeza de Containers
# Remove containers parados
docker container prune
# Remove volumes não utilizados
docker volume prune
- Reset do Ambiente
# Para todos os containers
docker-compose down
# Remove volumes
docker-compose down -v
# Reconstrói e inicia
docker-compose up --build