Buscar

Buscar en Kavel...

Menú de documentación

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

Los módulos se degradan con elegancia. Sin 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, development o production. En local es development; los workers desplegados lo ponen en production, lo que desactiva la referencia de API interactiva /rpc/docs.
  • `WEB_URL` La URL pública de la app web, http://localhost:3000 en 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:8787 en 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 con wrangler secret put NAME o en el panel de Cloudflare. Nunca tocan el repositorio.
  • Variables simples, las no sensibles (ENVIRONMENT, WEB_URL), viven en wrangler.jsonc bajo vars.
bash
wrangler secret put BETTER_AUTH_SECRET
wrangler secret put RESEND_API_KEY

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:

ts
export const Config = {
  brand: {
    name: "My App",
    tagline: "Ship faster on the edge",
    domain: "myapp.com",
    email: "hello@myapp.com",
    socialMedia: [
      { id: "github", name: "GitHub", url: "https://github.com/my-app" },
    ],
  },
};

Regenerar los tipos

Tras cambiar los bindings del Worker en wrangler.jsonc, regenera los tipos de Cloudflare para que la API siga tipada:

bash
bun cf-typegen