> ## Documentation Index
> Fetch the complete documentation index at: https://docs.assessiq.digital/llms.txt
> Use this file to discover all available pages before exploring further.

# Variáveis de Ambiente

> Todas as variáveis de ambiente necessárias para rodar o AssessIQ.

Crie o arquivo `.env.local` na raiz do projeto com as seguintes variáveis:

## Banco de Dados

```env theme={null}
# URL de conexão pooled (usada em produção pelo Prisma)
DATABASE_URL="postgresql://user:password@host:5432/dbname?sslmode=require"

# URL direta (sem pool — usada para migrations)
DATABASE_URL_UNPOOLED="postgresql://user:password@host:5432/dbname?sslmode=require"

# Alternativa pooled do Neon (sem channel_binding, compatível com PgBouncer)
POSTGRES_PRISMA_URL="postgresql://user:password@host-pooler:5432/dbname?sslmode=require"
```

<Tip>
  Recomendamos o [Neon](https://neon.tech) para banco PostgreSQL gerenciado com suporte a branches (ideal para preview deploys). O plano free suspende após 5 dias sem atividade — configure `CRON_SECRET` para que o backup diário mantenha o banco ativo.
</Tip>

## Autenticação (NextAuth)

```env theme={null}
# Segredo para assinar tokens de sessão — gere com: openssl rand -base64 32
AUTH_SECRET="seu-segredo-aqui"
NEXTAUTH_SECRET="seu-segredo-aqui"  # mesmo valor que AUTH_SECRET

# URL pública da aplicação
NEXTAUTH_URL="http://localhost:3000"
```

## CSRF

```env theme={null}
# Segredo para assinar tokens CSRF — gere com: openssl rand -hex 32 (mínimo 32 chars)
CSRF_SECRET="d14bc890958d40c6eee672baaab5b1b1caeba33d41ecf3432588289c5ca6943e"
```

<Warning>
  Sem `CSRF_SECRET`, a proteção CSRF é desabilitada silenciosamente em produção com log de erro crítico. Configure essa variável no Vercel.
</Warning>

### Google OAuth (Opcional)

```env theme={null}
AUTH_GOOGLE_ID="seu-google-client-id"
AUTH_GOOGLE_SECRET="seu-google-client-secret"
```

## Email (Resend)

```env theme={null}
RESEND_API_KEY="re_xxxxxxxxxxxxxxxxxxxx"

# E-mail remetente configurado no Resend
EMAIL_FROM="noreply@seudominio.com"
```

## Monitoramento (Sentry)

```env theme={null}
NEXT_PUBLIC_SENTRY_DSN="https://xxxx@sentry.io/yyyy"
SENTRY_AUTH_TOKEN="sntrys_xxxx"
SENTRY_ORG="sua-org"
SENTRY_PROJECT="plataforma-testes"
```

## Rate Limiting (Redis / Upstash)

```env theme={null}
# URL do Redis Upstash (formato: redis://default:password@host:port)
REDIS_URL="redis://default:password@redis-xxxxx.upstash.io:6379"
```

<Note>
  Se `REDIS_URL` não estiver configurada ou o Redis estiver inacessível, o rate limiting falha aberto (fail-open) — requisições são permitidas e o erro é registrado nos logs. A aplicação funciona normalmente sem Redis, mas sem proteção de rate limit.
</Note>

## Criptografia

```env theme={null}
# Chave de 64 chars hex para criptografia AES-256 — gere com: openssl rand -hex 32
ENCRYPTION_KEY="a1b2c3d4e5f6..."
```

## Cron Jobs

```env theme={null}
# Segredo para autenticar chamadas do cron na Vercel
CRON_SECRET="seu-cron-secret-aqui"
```

## Storage de Arquivos (Opcional)

```env theme={null}
# Cloudinary (para upload de imagens/arquivos)
CLOUDINARY_CLOUD_NAME="seu-cloud-name"
CLOUDINARY_API_KEY="sua-api-key"
CLOUDINARY_API_SECRET="seu-api-secret"
```

## Configuração da Aplicação

```env theme={null}
# URL base da aplicação (usada em links de e-mail, etc.)
NEXT_PUBLIC_APP_URL="http://localhost:3000"

# Ambiente
NODE_ENV="development"
```

***

## Variáveis de Produção (Vercel)

No painel da Vercel, adicione todas as variáveis acima em **Settings → Environment Variables**, separando por ambiente:

| Variável                          | Development    | Preview        | Production           |
| --------------------------------- | -------------- | -------------- | -------------------- |
| `DATABASE_URL`                    | local          | preview DB     | prod DB              |
| `AUTH_SECRET` / `NEXTAUTH_SECRET` | qualquer       | mesmo          | diferente e seguro   |
| `CSRF_SECRET`                     | qualquer       | mesmo          | forte (>= 32 chars)  |
| `ENCRYPTION_KEY`                  | qualquer       | mesmo          | forte (64 chars hex) |
| `CRON_SECRET`                     | qualquer       | mesmo          | forte                |
| `NEXT_PUBLIC_APP_URL`             | localhost:3000 | URL do preview | URL de prod          |
| `REDIS_URL`                       | opcional       | opcional       | recomendado          |

<Warning>
  Nunca commite o arquivo `.env.local` no Git. Ele já está no `.gitignore` do projeto. Variáveis do `.env.local` **nunca são enviadas automaticamente ao Vercel** — você precisa adicioná-las manualmente no painel.
</Warning>
