feat: initial commit — asaas-checkout template white-label

Template genérico de checkout com ASAAS, parametrizado via env vars.
Inclui fluxo completo: checkout → pedido → polling → webhook → admin.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-16 06:40:41 +02:00
commit 038ce3f556
103 changed files with 20709 additions and 0 deletions

99
setup.sh Executable file
View File

@@ -0,0 +1,99 @@
#!/bin/bash
# setup.sh — Bootstrap de nova instância do asaas-checkout
# Uso: bash setup.sh
set -e
echo ""
echo "=== asaas-checkout — Setup de nova instância ==="
echo ""
# Coletar configurações
read -p "Nome do projeto (slug, sem espaços): " PROJECT_SLUG
read -p "Nome exibido na interface: " APP_NAME
read -p "Domínio (ex: checkout.seudominio.com.br): " DOMAIN
read -p "ASAAS API Key: " ASAAS_KEY
read -p "ASAAS Env [sandbox/production] (default: sandbox): " ASAAS_ENV
ASAAS_ENV=${ASAAS_ENV:-sandbox}
read -p "Supabase URL: " SUPABASE_URL
read -p "Supabase Anon Key: " SUPABASE_ANON
read -p "Supabase Service Role Key: " SUPABASE_SERVICE
read -p "Senha do admin (deixar vazio para gerar): " ADMIN_PASS
if [ -z "$ADMIN_PASS" ]; then
ADMIN_PASS=$(openssl rand -base64 12)
echo " → Senha gerada: $ADMIN_PASS"
fi
read -p "Redirect após pagamento (URL, pode ser / ): " AFTER_PAYMENT
AFTER_PAYMENT=${AFTER_PAYMENT:-/}
read -p "n8n Webhook URL pagamento confirmado (opcional): " N8N_WEBHOOK
read -p "n8n Webhook URL PIX gerado (opcional): " N8N_PIX
# Criar .env.local
cat > .env.local <<EOF
NEXT_PUBLIC_APP_NAME="${APP_NAME}"
NEXT_PUBLIC_APP_LOGO_URL=""
NEXT_PUBLIC_APP_PRIMARY_COLOR="#1d4ed8"
NEXT_PUBLIC_AFTER_PAYMENT_REDIRECT="${AFTER_PAYMENT}"
NEXT_PUBLIC_SUPPORT_EMAIL=""
NEXT_PUBLIC_SUPPORT_WHATSAPP=""
NEXT_PUBLIC_ADMIN_USER="admin"
NEXT_PUBLIC_ADMIN_PASSWORD="${ADMIN_PASS}"
ASAAS_API_KEY="${ASAAS_KEY}"
ASAAS_ENV="${ASAAS_ENV}"
NEXT_PUBLIC_SUPABASE_URL="${SUPABASE_URL}"
NEXT_PUBLIC_SUPABASE_ANON_KEY="${SUPABASE_ANON}"
SUPABASE_SERVICE_ROLE_KEY="${SUPABASE_SERVICE}"
N8N_WEBHOOK_URL="${N8N_WEBHOOK}"
N8N_PIX_WEBHOOK_URL="${N8N_PIX}"
EOF
echo ""
echo "✓ .env.local criado"
# Criar stack file para Docker Swarm
cat > stack.${PROJECT_SLUG}.yaml <<EOF
version: "3.8"
services:
app:
image: ${PROJECT_SLUG}:latest
networks:
- network_public
environment:
NEXT_PUBLIC_APP_NAME: "${APP_NAME}"
NEXT_PUBLIC_APP_LOGO_URL: ""
NEXT_PUBLIC_APP_PRIMARY_COLOR: "#1d4ed8"
NEXT_PUBLIC_AFTER_PAYMENT_REDIRECT: "${AFTER_PAYMENT}"
NEXT_PUBLIC_ADMIN_USER: "admin"
NEXT_PUBLIC_ADMIN_PASSWORD: "${ADMIN_PASS}"
ASAAS_API_KEY: "${ASAAS_KEY}"
ASAAS_ENV: "${ASAAS_ENV}"
NEXT_PUBLIC_SUPABASE_URL: "${SUPABASE_URL}"
NEXT_PUBLIC_SUPABASE_ANON_KEY: "${SUPABASE_ANON}"
SUPABASE_SERVICE_ROLE_KEY: "${SUPABASE_SERVICE}"
N8N_WEBHOOK_URL: "${N8N_WEBHOOK}"
N8N_PIX_WEBHOOK_URL: "${N8N_PIX}"
deploy:
replicas: 1
restart_policy:
condition: on-failure
labels:
- traefik.enable=true
- traefik.http.routers.${PROJECT_SLUG}.rule=Host(\`${DOMAIN}\`)
- traefik.http.routers.${PROJECT_SLUG}.entrypoints=websecure
- traefik.http.routers.${PROJECT_SLUG}.tls.certresolver=letsencrypt
- traefik.http.services.${PROJECT_SLUG}.loadbalancer.server.port=3000
networks:
network_public:
external: true
EOF
echo "✓ stack.${PROJECT_SLUG}.yaml criado"
echo ""
echo "Próximos passos:"
echo " 1. docker build -t ${PROJECT_SLUG}:latest ."
echo " 2. docker stack deploy -c stack.${PROJECT_SLUG}.yaml ${PROJECT_SLUG}"
echo " 3. docker service update --image ${PROJECT_SLUG}:latest --force ${PROJECT_SLUG}_app"
echo ""
echo "Admin: https://${DOMAIN}/admin | usuário: admin | senha: ${ADMIN_PASS}"