// Use this skill when working with database, Prisma ORM, PostgreSQL, Server Components, deployment issues, or build configuration. Contains critical rules for data access, migrations, and Vercel builds.
| name | database-setup |
| description | Use this skill when working with database, Prisma ORM, PostgreSQL, Server Components, deployment issues, or build configuration. Contains critical rules for data access, migrations, and Vercel builds. |
| allowed-tools | Read, Write, Edit, Bash, Grep, Glob |
This skill provides all information about database configuration, Prisma usage, Next.js Server Components, and deployment setup for the Token Milagre Platform.
Banco de Dados: ✅ Supabase PostgreSQL (migrado do Neon em 2025-11-12)
ORM: Prisma
Localização do Client: lib/generated/prisma (caminho customizado)
Total de Usuários: 2 (Admin + Editor)
Domínio: https://tokenmilagre.xyz (domínio customizado)
SEMPRE usar Prisma diretamente em Server Components
fetch('http://localhost:3000/api/articles')await prisma.article.findMany()Caminho CORRETO do Prisma Client
// ✅ CORRETO - Este projeto usa caminho customizado
import { prisma } from '@/lib/prisma';
// OU em scripts Node.js:
const { PrismaClient } = require('../lib/generated/prisma');
// ❌ ERRADO - Não usar caminho padrão
import { PrismaClient } from '@prisma/client';
Script postinstall OBRIGATÓRIO
"postinstall": "prisma generate" no package.jsonProdução (Vercel) - Configuradas via Vercel CLI ou integração Supabase:
DATABASE_URL=postgresql://... (com pooling)
DIRECT_URL=postgresql://... (sem pooling, para migrations)
Desenvolvimento Local - Copiar do Vercel Settings → Environment Variables:
DATABASE_URL="postgresql://..."
DIRECT_URL="postgresql://..."
# Gerar Prisma Client
npx prisma generate
# Aplicar mudanças no schema (development)
npx prisma db push
# Abrir Prisma Studio (visualizar dados)
npm run db:studio
# Exportar dados do SQLite (backup)
npm run db:export
# Importar dados para PostgreSQL
npm run db:import
✅ Concluída em 2025-10-19
prisma/dev.db)prisma/backup-sqlite.json (gitignored)MIGRACAO-POSTGRES.mdNUNCA usar SQLite em produção no Vercel - ambiente serverless não mantém arquivos.
Server Components (RSC) - Buscar Dados
// ✅ CORRETO - Buscar direto do Prisma
import { prisma } from '@/lib/prisma';
async function getArticle(slug: string) {
return await prisma.article.findUnique({
where: { slug }
});
}
// ❌ ERRADO - Fazer fetch HTTP em Server Component
async function getArticle(slug: string) {
const res = await fetch('http://localhost:3000/api/articles/' + slug);
return await res.json();
}
Por que evitar fetch HTTP em Server Components?
NEXT_PUBLIC_API_URL, VERCEL_URL)Quando usar API Routes (/api/...)?
NUNCA tentar verificar arquivos gerados do Prisma
lib/generated/prisma/ são gerados automaticamentenext.config.ts com ignoreDuringBuilds: trueChecklist para build bem-sucedido:
postinstall presente no package.jsonnext.config.ts com eslint.ignoreDuringBuilds: trueprisma/schema.prisma apontando para PostgreSQLDATABASE_URL e DIRECT_URL configuradas no Vercel../lib/generated/prismaSkill criada por: Claude Code Última atualização: 2025-10-24
Problema: Neon atingiu cota de transferência do plano gratuito
Erro: Your project has exceeded the data transfer quota
Solução: Migração completa para Supabase PostgreSQL
Por que usar CLI:
Passo a passo:
# 1. Login (apenas primeira vez)
vercel login
# 2. Linkar projeto
vercel link --yes
# 3. Adicionar variáveis (exemplo Supabase)
echo "postgres://postgres.PROJECT:PASSWORD@...supabase.com:6543/postgres?sslmode=require&pgbouncer=true" | vercel env add DATABASE_URL production
echo "postgres://postgres.PROJECT:PASSWORD@...supabase.com:6543/postgres?sslmode=require&pgbouncer=true" | vercel env add DATABASE_URL preview
echo "postgres://postgres.PROJECT:PASSWORD@...supabase.com:6543/postgres?sslmode=require&pgbouncer=true" | vercel env add DATABASE_URL development
echo "postgres://postgres.PROJECT:PASSWORD@...supabase.com:5432/postgres?sslmode=require" | vercel env add DIRECT_URL production
echo "postgres://postgres.PROJECT:PASSWORD@...supabase.com:5432/postgres?sslmode=require" | vercel env add DIRECT_URL preview
echo "postgres://postgres.PROJECT:PASSWORD@...supabase.com:5432/postgres?sslmode=require" | vercel env add DIRECT_URL development
# 4. Forçar redeploy
git commit --allow-empty -m "chore: Trigger redeploy"
git push origin main
Problema comum:
SUPABASE_POSTGRES_*, POSTGRES_*DATABASE_URL e DIRECT_URLDATABASE_URL e DIRECT_URL mesmo tendo a integraçãoSolução:
DATABASE_URL e DIRECT_URL copiando valores da integraçãoSintoma:
*.vercel.apptokenmilagre.xyz)api/auth/callback/credentials:1 Failed to load resource: 401Causa:
NextAuth precisa de NEXTAUTH_URL explícito quando há domínio customizado.
Solução:
# Via Vercel CLI
echo "https://tokenmilagre.xyz" | vercel env add NEXTAUTH_URL production
# Não adicionar para preview/development (Vercel auto-detect)
Configuração correta:
NEXTAUTH_URL (Production apenas): https://tokenmilagre.xyz
NEXTAUTH_SECRET (Todos): [gerado com openssl rand -base64 32]
Causa: Imports usando @prisma/client em vez do caminho customizado
Arquivos que devem usar caminho customizado:
app/api/articles/route.tslib/copilot/admin-tools.tslib/copilot/tools.tsCorreção:
// ❌ ERRADO
import { Prisma } from '@prisma/client';
// ✅ CORRETO
import { Prisma } from '@/lib/generated/prisma';
Buscar outros casos:
grep -r "from '@prisma/client'" app/ lib/ --include="*.ts" --include="*.tsx"
Durante a migração, foram criados scripts úteis para diagnóstico:
scripts/check-users.tsVerifica usuários no banco (produção ou local)
npx tsx scripts/check-users.ts
Output:
scripts/test-login.tsTesta autenticação localmente
npx tsx scripts/test-login.ts
Valida:
scripts/debug-production-login.tsTesta login EXATAMENTE como produção
npx tsx scripts/debug-production-login.ts
Conecta em:
scripts/seed-production.tsCria usuários admin/editor direto na produção
npx tsx scripts/seed-production.ts
Cria:
app/api/debug-auth/route.tsEndpoint HTTP para debug remoto
GET: Status geral
https://tokenmilagre.xyz/api/debug-auth
POST: Testar login
curl -X POST https://tokenmilagre.xyz/api/debug-auth \
-H "Content-Type: application/json" \
-d '{"email":"admin@tokenmilagre.com","password":"admin123"}'
⚠️ REMOVER antes de produção final (expõe informações sensíveis)
docs/MIGRACAO-SUPABASE.md - Documentação completa da migraçãodocs/URGENTE-TROCAR-BANCO-VERCEL.md - Guia de troubleshootingdocs/CONFIGURAR-VERCEL-NEXTAUTH.md - Configuração NextAuthCREDENCIAIS-SUPABASE-VERCEL.md - Variáveis prontas para copy-pasteQuando usuário diz "estou cansado" ou similar:
NEXTAUTH_URL obrigatórioÚltima atualização: 2025-11-12 (Migração Neon → Supabase) Criado por: Claude Code