Configuración
Dos cosas que configurar: los secretos de los servicios que uses y los datos de tu marca. Esta página es la referencia completa de ambos.
Dónde vive la configuración
Los secretos locales viven en apps/api/.dev.vars (ignorado por git). El scaffolder lo crea a partir de .dev.vars.example, que lista cada variable que pueden usar los módulos elegidos, así que solo ves las variables que aplican a tu app. Los datos de marca viven aparte, en packages/ui/src/config.ts.
Nota
RESEND_API_KEY, el módulo de correo registra y omite el envío; sin claves de Stripe, los endpoints de checkout quedan inactivos. Puedes construir y explorar antes de conectar un solo servicio externo.Variables principales
Existen en toda app de Kavel, elijas los módulos que elijas.
- `ENVIRONMENT` El modo de ejecución,
developmentoproduction. En local esdevelopment; los workers desplegados lo ponen enproduction, lo que desactiva la referencia de API interactiva/rpc/docs. - `WEB_URL` La URL pública de la app web,
http://localhost:3000en desarrollo. Se usa para CORS y para construir enlaces en correos y callbacks de autenticación. - `API_URL` La URL pública del Worker de la API,
http://localhost:8787en desarrollo. La app web la lee para llegar al backend.
Variables de los módulos
Cada módulo añade solo sus propias variables a .dev.vars.example. Rellena las de los módulos que hayas activado.
Auth
- `BETTER_AUTH_SECRET` Obligatorio. Firma sesiones y tokens. Genera uno con
openssl rand -base64 32. - `GITHUB_CLIENT_ID` y `GITHUB_CLIENT_SECRET` Opcionales. Activan el inicio de sesión social con GitHub, creados en los ajustes de tu app OAuth de GitHub.
- `GOOGLE_CLIENT_ID` y `GOOGLE_CLIENT_SECRET` Opcionales. Activan el inicio de sesión social con Google, desde la consola de Google Cloud.
Deja los pares de OAuth vacíos para mantener esos proveedores desactivados. El inicio de sesión con correo y contraseña funciona sin ninguno de ellos.
Correo
- `RESEND_API_KEY` Necesaria para enviar. Tu clave de API de Resend. Sin ella, el módulo registra el correo y omite la entrega.
- `EMAIL_FROM` La dirección de remitente, por ejemplo
My App <noreply@myapp.com>. El dominio debe estar verificado en Resend. - `CONTACT_TO` A dónde se entregan los envíos del formulario de contacto.
Pagos
- `STRIPE_SECRET_KEY` Obligatoria. Tu clave secreta de Stripe, desde el panel de Stripe.
- `STRIPE_WEBHOOK_SECRET` Obligatoria. Verifica los webhooks entrantes de Stripe, se muestra al registrar tu endpoint de webhook.
- `STRIPE_PRICE_ID` El precio que cobra el checkout.
Local vs producción
.dev.vars es solo para desarrollo local y nunca se sube al repositorio. En producción, los mismos nombres se dividen en dos tipos:
- Secretos, los valores sensibles (claves de API,
BETTER_AUTH_SECRET, claves de Stripe), se definen conwrangler secret put NAMEo en el panel de Cloudflare. Nunca tocan el repositorio. - Variables simples, las no sensibles (
ENVIRONMENT,WEB_URL), viven enwrangler.jsoncbajovars.
Advertencia
.dev.vars es solo para desarrollo local. En producción, define los secretos en el Worker con wrangler secret put NAME, nunca los subas al repositorio. Consulta Despliegue.Configuración de marca
Tu nombre, eslogan, datos de contacto y enlaces sociales viven en un único objeto tipado en packages/ui/src/config.ts. Las páginas de marketing, el pie de página y las plantillas de correo lo leen, así que actualizar tu marca es una sola edición:
Regenerar los tipos
Tras cambiar los bindings del Worker en wrangler.jsonc, regenera los tipos de Cloudflare para que la API siga tipada: