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>
4.8 KiB
4.8 KiB
CLAUDE.md — asaas-checkout (template)
Este arquivo define as regras de comportamento do Claude Code neste projeto.
O que é este projeto
asaas-checkout é um template white-label de checkout com ASAAS.
Não é uma aplicação de produto específico — é uma base reutilizável.
Cada instância real (ex: vixcert, outra-empresa) é uma cópia/fork deste repo, parametrizada via variáveis de ambiente.
Estrutura
app/
page.tsx — homepage listando produtos
comprar/page.tsx — listagem de produtos
comprar/[id]/page.tsx — página de checkout do produto
pedido/[id]/page.tsx — acompanhamento de pedido
api/
checkout/route.ts — cria pedido + pagamento ASAAS
pedido/[id]/route.ts — polling de status (consulta ASAAS se PENDING)
webhook/route.ts — recebe notificações ASAAS
admin/ — dashboard admin
login/page.tsx — login simples via env vars
components/
pedido-status.tsx — cliente component com polling 5s
product-buy-form.tsx — formulário de compra
site-header.tsx — cabeçalho parametrizado
dashboard-stats.tsx — métricas do admin
transaction-table.tsx — tabela de pedidos com filtros
pedido-detail-modal.tsx— modal de detalhes do pedido
lib/
config.ts — lê todas as env vars → appConfig
auth-context.tsx — autenticação admin via env vars
supabase.ts — cliente Supabase
asaas.ts — funções ASAAS (criar pagamento, buscar status)
actions.ts — server actions (getPedidos, etc.)
Variáveis de ambiente
| Variável | Obrigatória | Descrição |
|---|---|---|
NEXT_PUBLIC_APP_NAME |
sim | Nome exibido na interface |
NEXT_PUBLIC_APP_LOGO_URL |
não | URL da logo (texto se vazio) |
NEXT_PUBLIC_APP_PRIMARY_COLOR |
não | Cor primária hex (default #1d4ed8) |
NEXT_PUBLIC_AFTER_PAYMENT_REDIRECT |
não | URL pós-pagamento (default /) |
NEXT_PUBLIC_SUPPORT_EMAIL |
não | Email de suporte |
NEXT_PUBLIC_SUPPORT_WHATSAPP |
não | WhatsApp de suporte (55119...) |
NEXT_PUBLIC_ADMIN_USER |
sim | Usuário do admin |
NEXT_PUBLIC_ADMIN_PASSWORD |
sim | Senha do admin |
ASAAS_API_KEY |
sim | Chave da API ASAAS |
ASAAS_ENV |
sim | sandbox ou production |
NEXT_PUBLIC_SUPABASE_URL |
sim | URL do projeto Supabase |
NEXT_PUBLIC_SUPABASE_ANON_KEY |
sim | Anon key Supabase |
SUPABASE_SERVICE_ROLE_KEY |
sim | Service role key Supabase |
N8N_WEBHOOK_URL |
não | Webhook pagamento confirmado |
N8N_PIX_WEBHOOK_URL |
não | Webhook PIX gerado |
Ver .env.example para exemplo completo.
Como criar uma nova instância
# 1. Clonar o template
git clone git@git.oakia.com.br:admin/asaas-checkout.git meu-projeto
cd meu-projeto
# 2. Remover origin e apontar para novo repo
git remote remove origin
git remote add origin git@git.oakia.com.br:admin/meu-projeto.git
# 3. Rodar o setup interativo (gera .env.local e stack.yaml)
bash setup.sh
# 4. Instalar dependências e testar
npm install
npm run dev
# 5. Build e deploy
docker build -t meu-projeto:latest .
docker stack deploy -c stack.meu-projeto.yaml meu-projeto
Schema do banco (Supabase)
O template espera as seguintes tabelas (DDL em data/schema.sql se existir):
clientes— nome, email, cpf_cnpj, telefoneprodutos— nome, descricao, valor_centavos, tipo, validade, midia, ativopedidos— cliente_id, produto_id, status, valor_centavos, metodo_pagamento, asaas_payment_id, pix_copia_cola, pix_qrcode_url, asaas_invoice_url, paid_at
Fluxo de pagamento
- Cliente preenche form →
POST /api/checkout→ cria pedido no Supabase + pagamento no ASAAS - Cliente é redirecionado para
/pedido/[id] - Frontend faz polling em
GET /api/pedido/[id]a cada 5s - Se status=PENDING, a API consulta ASAAS diretamente e atualiza o DB
- ASAAS também dispara webhook para
POST /api/webhook(registrar via ASAAS API) - Quando pago: exibe confirmação + botão para
AFTER_PAYMENT_REDIRECT
Zonas de comportamento (herda do harness /root)
Verde
- Leitura de arquivos, logs, consultas
- Geração de specs e documentação
Amarelo (executa e avisa)
- Mudanças em componentes genéricos do template
- Atualização de dependências
Vermelho (nunca sem "confirmo, pode executar")
- Push para
origin(afeta todas as instâncias futuras) - Mudanças no schema SQL que quebram instâncias existentes
- Alteração nas variáveis obrigatórias (quebra instâncias sem a var)
Convenções
- Todo texto visível ao usuário deve vir de
appConfig(nunca hardcoded) - Referências a produto específico (ex: "certificado digital", "ICP-Brasil") são proibidas
- Componentes novos: genéricos, sem assumir domínio de negócio
- Testar sempre com
ASAAS_ENV=sandboxantes de production