El archivo .env no está incluido en el repositorio — está listado en .gitignore. Nunca lo subas a control de versiones. Cada entorno (local, staging, producción) necesita su propio archivo o configuración de secretos.
Frontend (Next.js)
Crea un archivo .env en la raíz del repositorio con las siguientes variables.
Ejemplo completo
# Base de datos
DATABASE_URL="postgresql://usuario:password@host:5432/psicoscan?sslmode=require"
# NextAuth
NEXTAUTH_SECRET="reemplaza-con-cadena-aleatoria-de-64-caracteres"
NEXTAUTH_URL="http://localhost:3000"
# API de clasificación ML
ML_API_URL="http://localhost:8000"
Referencia de variables
| Variable | Requerida | Descripción |
|---|
DATABASE_URL | Sí | Cadena de conexión PostgreSQL completa con credenciales |
NEXTAUTH_SECRET | Sí | Clave secreta para firmar tokens JWT de sesión |
NEXTAUTH_URL | Sí | URL base canónica de la aplicación |
ML_API_URL | No | URL base de la API de clasificación ML. Por defecto: http://localhost:8000 |
DATABASE_URL
Cadena de conexión en formato URL estándar de PostgreSQL.
postgresql://<usuario>:<password>@<host>:<puerto>/<nombre_bd>?sslmode=require
- Local: obtén los datos del servidor PostgreSQL local (usuario y contraseña definidos durante la instalación de Postgres).
- Supabase / Neon: copia la URL de conexión desde el panel de tu proyecto. En Supabase: Settings → Database → Connection string → URI. Asegúrate de usar el puerto
5432 (directo) o el string de connection pooler si lo indican.
NEXTAUTH_SECRET
Cadena aleatoria usada por NextAuth.js para firmar y cifrar cookies y tokens JWT. Debe tener al menos 32 caracteres. Genera una con:
Usa el valor completo que devuelve el comando como valor de esta variable.
NEXTAUTH_URL
URL base de la aplicación incluyendo protocolo y puerto (sin barra final).
| Entorno | Valor |
|---|
| Desarrollo local | http://localhost:3000 |
| Producción en Vercel | https://tu-app.vercel.app |
API de clasificación ML
La API FastAPI lee su configuración directamente de variables de entorno del sistema operativo o de un archivo .env en ml-api/. El frontend Next.js también usa ML_API_URL para llamar a la API desde las Server Actions.
Ejemplo
# .env raíz del repositorio (frontend)
ML_API_URL="http://localhost:8000"
# ml-api/.env (o variables de entorno del servidor de despliegue)
ALLOWED_ORIGINS="http://localhost:3000"
Referencia de variables
| Variable | Servicio | Requerida | Valor por defecto | Descripción |
|---|
ML_API_URL | Frontend (Next.js) | No | http://localhost:8000 | URL base de la ML API, usada por Server Actions |
ALLOWED_ORIGINS | ML API (FastAPI) | No | http://localhost:3000 | Orígenes permitidos para CORS, separados por comas |
DIRECT_URL | Script de entrenamiento | No | — | URL de conexión directa a PostgreSQL (sin pooler) |
ML_API_URL
URL base de la API FastAPI de clasificación. Usada por la Server Action procesarYGuardarTamizaje en lib/actions/tamizaje.ts:
const mlUrl = process.env.ML_API_URL ?? "http://localhost:8000"
| Entorno | Valor |
|---|
| Desarrollo local | http://localhost:8000 (valor por defecto) |
| Producción | URL de tu servicio en Railway o Render, ej. https://tu-ml-api.railway.app |
Si esta variable no está definida, el sistema usa http://localhost:8000 como fallback. En producción debes definirla en el entorno del servidor Next.js (Vercel) para que las Server Actions puedan alcanzar la ML API.
ALLOWED_ORIGINS
Lista de orígenes que tienen permiso de hacer peticiones cross-origin a la ML API. La API la lee en main.py con:
_raw = os.getenv("ALLOWED_ORIGINS", "http://localhost:3000")
_origins = [o.strip() for o in _raw.split(",")]
Para múltiples orígenes sepáralos con coma:
ALLOWED_ORIGINS="https://psicoscan.vercel.app,https://psicoscan-staging.vercel.app"
En producción este valor debe ser la URL exacta de tu despliegue en Vercel (sin barra final).
DIRECT_URL
URL de conexión directa (sin connection pooler) a PostgreSQL. Usada exclusivamente por el script de entrenamiento ml-api/scripts/entrenar_sena.py:
db_url = os.getenv("DIRECT_URL") or os.getenv("DATABASE_URL")
| Variable | Cuándo se usa |
|---|
DIRECT_URL | Supabase/Neon con connection pooler — el pooler no soporta consultas largas; usa la URL de conexión directa (puerto 5432) |
DATABASE_URL | Fallback si DIRECT_URL no está definida |
Esta variable solo es necesaria si vas a ejecutar el script de entrenamiento ML. No la requiere el frontend Next.js.