# Ambiente de produção A validação está em `src/config/env.ts`. Ela roda no start da aplicação e do worker. Durante `next build` ela não interrompe o CI, porque o build não tem os segredos do piloto. | Variável | Obrigatória | Ambiente | Finalidade | Exemplo sem segredo | Risco se ausente | | --- | --- | --- | --- | --- | --- | | NEXT_PUBLIC_SUPABASE_URL | Sim | Produção | Auth Elo Pro | `https://.supabase.co` | Ninguém autentica | | NEXT_PUBLIC_SUPABASE_ANON_KEY | Sim | Produção | Chave pública do Auth | `anon` | Sessão não resolve | | SUPABASE_SERVICE_ROLE_KEY | Sim | Servidor | Storage e tarefas internas | `service-role` | Upload e worker param | | SUPABASE_STORAGE_BUCKET | Sim | Produção | Bucket privado | `spreadsheet-adapter` | Produção recusa storage. Valor `public` é recusado | | DATABASE_URL | Sim | Produção | Postgres | `postgres://host/db` | Aplicação não sobe | | REDIS_URL | Sim | Produção | Lock e fila de ids | `redis://host:6379` | Processamento recusado | | SENTRY_DSN | Sim | Produção | Erros sanitizados | `https://@sentry/` | Piloto sem alerta | | SPREADSHEET_TEMP_TTL_SECONDS | Sim | Produção | Vida dos temporários | `86400` | Start recusado | | ADAPTER_JOB_MODE | Sim, implícito | Produção | `worker` | `worker` | `inline` recusado | | ELO_PRO_LOGIN_URL | Sim | Produção | Login central | `https://app.elo.example/login` | `/login` não encaminha | | ELO_PRO_APP_URL | Recomendada | Produção | `returnTo` no mesmo host | `https://app.elo.example` | Retorno cai no caminho padrão | | AUTH_ALLOWED_RETURN_HOSTS | Não | Produção | Hosts extras do retorno | `app.elo.example` | Host externo continua bloqueado | | ADAPTER_DEV_AUTH | Deve ficar desligada | Produção | Sessão local | `0` | Valor `1` recusa o start | | ADAPTER_DEV_AUTH_SECRET | Não | Só dev | Assina o cookie local | vazio em produção | Não é usado no piloto | | SPREADSHEET_JOB_TIMEOUT_MS | Não | Todos | Teto do processamento | `120000` | Usa 120000 | `ADAPTER_DEV_AUTH` não autentica em produção. Storage público não é aceito. TTL inválido falha cedo. Sem Redis, o modo worker não processa.