Uma plataforma completa de reservas para experiências de escalada no Morro Araçoiaba (Floresta Nacional de Ipanema), desenvolvida com Next.js 15, TypeScript, Privy e múltiplos métodos de pagamento.
- 🏗️ Arquitetura Moderna: Next.js 15 com App Router, TypeScript e Clean Architecture
- 🔐 Autenticação Segura: Integração com Privy para Web3 e autenticação social
- 💳 Múltiplos Pagamentos: Mercado Pago, PIX, Bitcoin, USDT e GitHub Sponsors
- 🎫 Sistema de Cupons: Descontos personalizáveis com regras de negócio
- 🎨 Sistema de Temas: Suporte para múltiplos destinos de escalada
- 🧪 Testes Abrangentes: 80+ testes incluindo BDD e integração
- 📱 Responsivo: Interface otimizada para todos os dispositivos
- 🚀 Início Rápido
- 🏗️ Arquitetura
- 💳 Sistema de Pagamentos
- 🎫 Sistema de Cupons
- 🧪 Testes
- 🔧 Pré-requisitos
- 🚀 Deploy (Vercel)
- ⚙️ Configuração Completa
- 🔐 Configuração das APIs
- ❌ Resolução de Problemas
- 📚 Comandos Úteis
# Clone o repositório
git clone https://github.com/govinda777/XperienceClimb.git
cd XperienceClimb
# Instale as dependências
npm install
# Configure as variáveis de ambiente (veja ENV_VARIABLES.txt)
cp .env.example .env.local
# Execute em modo de desenvolvimento
npm run devAcesse http://localhost:3000 para ver a aplicação rodando.
O projeto utiliza Clean Architecture com Domain-Driven Design (DDD):
src/
├── app/ # Next.js App Router (Presentation)
├── components/ # Componentes React
├── core/ # Domain Layer
│ ├── entities/ # Entidades de domínio
│ ├── repositories/ # Interfaces de repositórios
│ ├── services/ # Interfaces de serviços
│ └── use-cases/ # Casos de uso
├── infrastructure/ # Infrastructure Layer
│ ├── repositories/ # Implementações de repositórios
│ └── services/ # Implementações de serviços
├── hooks/ # Custom React hooks
├── store/ # Estado global (Zustand)
└── themes/ # Sistema de temas
Principais Tecnologias:
- Next.js 15 - Framework React com App Router
- TypeScript - Tipagem estática
- Tailwind CSS - Estilização utilitária
- Zustand - Gerenciamento de estado
- Privy - Autenticação Web3 e social
- Jest + React Testing Library - Testes
Suporte completo a múltiplos métodos de pagamento:
- 💳 Cartão de Crédito - Via Mercado Pago
- 📱 PIX - Pagamento instantâneo brasileiro
- ₿ Bitcoin - Pagamentos em criptomoeda
- 💎 USDT - Stablecoin na rede Ethereum
- 🐙 GitHub Sponsors - Patrocínio via GitHub
- 📞 WhatsApp - Fallback para finalização manual
- Processamento Seguro - Integração com APIs confiáveis
- Webhooks - Confirmação automática de pagamentos
- Conversão de Moeda - Suporte a BRL, USD e criptomoedas
- Fallback Inteligente - WhatsApp como backup
Sistema avançado de descontos com regras de negócio:
- Percentual - Ex: 10% de desconto
- Valor Fixo - Ex: R$ 50 de desconto
- Método Específico - Descontos por forma de pagamento
| Código | Tipo | Valor | Restrições |
|---|---|---|---|
WELCOME10 |
Percentual | 10% | Mín. R$ 50, Todos os métodos |
CLIMB50 |
Fixo | R$ 50 | Mín. R$ 100, Cartão/PIX |
CRYPTO15 |
Percentual | 15% | Mín. R$ 30, Apenas crypto |
- Validação em Tempo Real - Verificação instantânea
- Limites de Uso - Controle de quantidade e usuário
- Compatibilidade - Restrições por método de pagamento
- Expiração - Datas de validade configuráveis
Suite completa de testes com alta cobertura:
- Unit Tests - Componentes e funções isoladas
- Integration Tests - Fluxos completos de API
- BDD Tests - Cenários de comportamento do usuário
# Todos os testes
npm test
# Com cobertura
npm run test:coverage
# Testes BDD
npm run test:bdd
# Testes de pré-commit
npm run test:pre-commit- 80+ testes implementados
- 5 suites de teste
- Cobertura > 90% nas funcionalidades críticas
Suporte para múltiplos destinos de escalada com sistema de imagens externas:
- 🎨 Temas Personalizáveis - Cores, conteúdo e imagens específicas
- 🌐 Imagens Externas - URLs de serviços como Unsplash, Picsum e outros
- 💾 Economia de Armazenamento - Não precisa hospedar imagens localmente
- 🚀 Performance Otimizada - CDNs especializadas em imagens
- 🔄 Flexibilidade - Fácil troca de imagens sem reupload
- 🏔️ Fazenda Ipanema - Escalada na Floresta Nacional de Ipanema
- 🏞️ Pedra Bela - Aventura completa com tirolesa e cachoeiras
- 🌐 Exemplo Externo - Demonstração do sistema de imagens externas
# Script interativo para criar temas
npm run create-theme
# Ou manualmente editando os arquivos de configuraçãoO projeto suporta URLs externas de serviços confiáveis:
- Unsplash - Fotos gratuitas de alta qualidade
- Picsum - Imagens placeholder aleatórias
- Placeholder.com - Placeholders simples
- URLs Customizadas - Qualquer CDN confiável
// Exemplo de configuração
{
src: 'https://images.unsplash.com/photo-123?w=800&h=600&fit=crop',
alt: 'Escalada técnica',
title: 'Escalada Técnica',
category: 'climb',
isExternal: true,
externalDomain: 'images.unsplash.com'
}📚 Documentação Completa: docs/EXTERNAL_IMAGES.md
- Node.js v18 ou superior
- npm ou yarn
- Git
- Conta na Vercel (recomendado)
- Conta no Privy para autenticação
- Conta no MercadoPago para pagamentos
-
Faça push do código para GitHub:
git add . git commit -m "Preparar para deploy" git push origin main
-
Conecte com Vercel:
- Acesse vercel.com
- Clique em "New Project"
- Importe seu repositório GitHub
- Configure as variáveis de ambiente (veja seção abaixo)
- Clique em "Deploy"
-
Instale Vercel CLI:
# Execute o script fornecido (Mac/Linux) chmod +x INSTALL_VERCEL.sh ./INSTALL_VERCEL.sh # Ou instale manualmente npm install -g vercel
-
Faça login e deploy:
vercel login vercel --prod
O arquivo ENV_VARIABLES.txt contém todas as variáveis necessárias. Configure-as na Vercel Dashboard > Settings > Environment Variables:
# Privy (Autenticação)
NEXT_PUBLIC_PRIVY_APP_ID=seu_privy_app_id
# MercadoPago (Pagamentos)
NEXT_PUBLIC_MERCADOPAGO_PUBLIC_KEY=sua_public_key
MERCADOPAGO_ACCESS_TOKEN=seu_access_token
# URLs da Aplicação (atualize após primeiro deploy)
NEXT_PUBLIC_APP_URL=https://sua-app.vercel.app
NEXT_PUBLIC_SUCCESS_URL=https://sua-app.vercel.app/checkout/success
NEXT_PUBLIC_FAILURE_URL=https://sua-app.vercel.app/checkout/failure
NEXT_PUBLIC_PENDING_URL=https://sua-app.vercel.app/checkout/pendingPara fazer o primeiro deploy rapidamente, use valores temporários:
NEXT_PUBLIC_PRIVY_APP_ID=temp_value
NEXT_PUBLIC_MERCADOPAGO_PUBLIC_KEY=temp_value
MERCADOPAGO_ACCESS_TOKEN=temp_value
NEXT_PUBLIC_APP_URL=https://xperienceclimb.vercel.app
NEXT_PUBLIC_SUCCESS_URL=https://xperienceclimb.vercel.app/checkout/success
NEXT_PUBLIC_FAILURE_URL=https://xperienceclimb.vercel.app/checkout/failure
NEXT_PUBLIC_PENDING_URL=https://xperienceclimb.vercel.app/checkout/pending
⚠️ Importante: Substitua pelos valores reais após configurar as APIs.
Após o primeiro deploy:
- Anote a URL gerada:
https://sua-app.vercel.app - Atualize as variáveis de ambiente com a URL real
- Configure domínio customizado (opcional):
- Vercel Dashboard > Domains
- Adicione seu domínio personalizado
- Acesse: dashboard.privy.io
- Crie uma aplicação:
- Nome: XperienceClimb
- Callback URLs:
https://sua-app.vercel.app
- Configure login methods: Email, Google, Apple
- Copie o App ID e atualize
NEXT_PUBLIC_PRIVY_APP_ID
- Acesse: developers.mercadopago.com
- Crie uma aplicação:
- Nome: XperienceClimb
- Tipo: Checkout Pro
- Configure webhooks:
- URL:
https://sua-app.vercel.app/api/mercadopago/webhook - Eventos:
payment,merchant_order
- URL:
- Copie as credenciais:
- Public Key →
NEXT_PUBLIC_MERCADOPAGO_PUBLIC_KEY - Access Token →
MERCADOPAGO_ACCESS_TOKEN
- Public Key →
Após configurar as APIs:
- Atualize as variáveis na Vercel
- Force um novo deploy:
vercel --prod --force
-
Instale Netlify CLI:
npm install -g netlify-cli
-
Build e deploy:
npm run build netlify deploy --prod --dir=.next
-
Configure variáveis: Netlify Dashboard > Environment Variables
-
Crie Dockerfile:
FROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build EXPOSE 3000 CMD ["npm", "start"]
-
Build e run:
docker build -t xperience-climb . docker run -p 3000:3000 xperience-climb
- ✅ Verifique se
NEXT_PUBLIC_PRIVY_APP_IDestá configurado - ✅ Confirme que o App ID está correto no Privy Dashboard
- ✅ Use a Public Key, não o Access Token
- ✅ Verifique se está usando credenciais de produção
- ✅ Arquivo
vercel.jsonsimplificado para Next.js 14 - ✅ Next.js App Router gerencia functions automaticamente
- ✅ Remova configurações desnecessárias de
functionsebuildCommand
- ✅ Configure o webhook URL exatamente como:
https://sua-app.vercel.app/api/mercadopago/webhook - ✅ Headers CORS já estão configurados no
vercel.json
- ✅ Privy Apple login não fornece propriedade
name - ✅ Use apenas
user.google?.nameeuser.email?.address - ✅ Corrija também
user.google?.pictureUrl→user.google?.picture - ✅ Arquivos
LoginButton.tsxeuseAuth.tsjá corrigidos
- ✅ Remova exportação duplicada de
Moneydo arquivoOrder.ts - ✅ Importe
MoneydePackage.tsnoOrder.ts - ✅ Mantenha
Moneyapenas em um arquivo para evitar conflitos
- ✅
PACKAGESé umRecord<string, PackageType>, não array - ✅ Use
PACKAGES[id]ao invés dePACKAGES.find() - ✅ Use
Object.values(PACKAGES)ao invés dePACKAGES.map()
# Corrigir problemas de lint
npm run lint:fix
# Build ignorando avisos
npm run build -- --no-lint- ✅ Imagens devem estar em
public/images/ - ✅ Referencie como
/images/nome.jpg - ✅ Adicione domínios externos no
next.config.js
npm run dev # Servidor de desenvolvimento
npm run build # Build de produção
npm run start # Servidor de produção
npm run lint # Verificar lint
npm run type-check # Verificar TypeScriptvercel # Deploy preview
vercel --prod # Deploy produção
vercel --force # Force redeploy
vercel domains # Gerenciar domínios
vercel env # Gerenciar variáveisvercel logs # Ver logs da aplicação
vercel inspect # Inspecionar deploy
npm run analyze # Analisar bundle sizeAntes de considerar o deploy completo:
- ✅ Aplicação compila sem erros
- ✅ Todas as variáveis de ambiente configuradas
- ✅ Privy App ID e callback URLs corretos
- ✅ MercadoPago credenciais e webhooks configurados
- ✅ URLs de checkout atualizadas
- ✅ Testes de pagamento funcionando
- ✅ Autenticação funcionando
- ✅ Imagens carregando corretamente
- ✅ Domínio personalizado configurado (se aplicável)
Se encontrar problemas:
- Verifique os logs:
vercel logs - Teste localmente:
npm run build && npm start - Consulte a documentação:
✅ APLICAÇÃO ONLINE!
URL de Produção: https://xperience-climb-1fk4unbis-govinda777s-projects.vercel.app
Próximos passos:
- Configure as variáveis de ambiente com valores reais
- Configurar Privy App ID
- Configurar credenciais do MercadoPago
- Testar funcionalidades completas
- Sistema de Autenticação - Privy com Web3 e social login
- Carrinho de Compras - Gerenciamento completo com Zustand
- Múltiplos Pagamentos - 5 métodos diferentes implementados
- Sistema de Cupons - Descontos com regras de negócio
- Checkout Multi-step - Processo guiado de finalização
- Testes Abrangentes - 80+ testes com alta cobertura
- Arquitetura Limpa - Clean Architecture + DDD
- Sistema de Temas - Preparado para múltiplos destinos
- Campo WhatsApp - Adicionar campo obrigatório no formulário
- Melhorias de Interface - Ajustes no menu, footer e galeria
- Seção Cronograma - Cronograma detalhado da experiência
- Seção Parceiros - Parceiros e colaboradores
- Arquivos de Código: 100+ arquivos TypeScript/React
- Linhas de Código: 10,000+ linhas
- Componentes: 30+ componentes reutilizáveis
- Testes: 80+ testes automatizados
- Cobertura: >90% nas funcionalidades críticas
Para contribuir com o projeto:
- Fork o repositório
- Crie uma branch para sua feature (
git checkout -b feature/nova-feature) - Commit suas mudanças (
git commit -m 'Adiciona nova feature') - Push para a branch (
git push origin feature/nova-feature) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Para suporte e dúvidas:
- Email: contato@xperiencehubs.com
- WhatsApp: +55 11 99999-9999
- GitHub Issues: Para bugs e melhorias
🚀 XperienceClimb - Escalando novos horizontes na tecnologia e na natureza!