Vibecoder Dictionary 2026
Las primeras 25 las viste en el reel. Las otras 25 son las que tarde o temprano te van a aparecer en Cursor, en Claude Code, en el deploy, en el error que no entiendes a las 2am.
12 puntos que separan un side-project de algo en producción. No es exhaustivo. Es lo mínimo no-negociable. Si vibecodeas con Cursor, Claude o ChatGPT, deployas en Vercel, Netlify o Railway, y usas Supabase, Clerk o Stripe — esta guía está hecha para ti. La idea es simple: antes de pasar a producción, recorrer estos 12 puntos uno por uno. Te toma 30 minutos la primera vez. Después, 10.
.env, nunca en el repoQué es: Las API keys de OpenAI, Anthropic, Stripe, Supabase, Resend — todo lo que tenga una cadena tipo sk-..., pk_..., eyJ... — va en un archivo .env local y en las variables de entorno de tu plataforma. Nunca en el código.
Por qué importa: Si pusheas una API key al repo público, hay bots que escanean GitHub cada minuto. Tu key dura entre 30 segundos y 5 minutos antes de que alguien la use para minar cripto o quemarte la cuota.
Cómo se ve hecho:
.env está en .gitignore.env.example con los nombres de las variables, sin valoresVerifica: corre git log -p | grep -iE "sk-|api_key|secret" en tu repo. Si aparece algo, hay key expuesta en el historial.
Qué es: Las mismas variables que tienes en .env local tienen que estar pegadas en el dashboard de Vercel, Railway, Netlify o donde sea que deployes.
Por qué importa: El error más común post-deploy: "funciona en local pero en producción truena". 8 de cada 10 veces son env vars que olvidaste configurar en el dashboard, o que copiaste con un espacio extra.
Cómo se ve hecho:
.env.example está creada en producciónNEXT_PUBLIC_Verifica: abre la consola del navegador en producción y revisa que no haya errores tipo undefined is not a function o Cannot read property X of undefined por env vars faltantes.
Qué es: Un límite máximo de gasto mensual en OpenAI, Anthropic, Replicate, ElevenLabs, o cualquier API que cobre por uso.
Por qué importa: Un bug en un loop, un usuario malicioso, o un agente que se enreda en sí mismo, te pueden generar $3,000 en una madrugada. Sin límite, la tarjeta se cobra. Con límite, la API responde con error y tú duermes.
Cómo se ve hecho:
Verifica: revisa que tengas un límite numérico, no solo "alertas". El límite tiene que cortar el servicio, no solo avisarte.
Qué es: Dos cosas distintas:
Por qué importa: El frontend esconde el botón de "borrar usuario", pero el endpoint DELETE /api/users/123 está abierto a cualquiera que lo descubra. Otro clásico: el user_id viene del frontend en lugar de leerse del token de sesión, así que cualquiera edita los datos de cualquiera cambiando un número en la URL.
Cómo se ve hecho:
user_id se lee siempre del token/sesión del servidor, nunca del request body o de la URLuser_id autenticado: where user_id = session.user.idadmin, user) y se validan en el backendVerifica: abre dos cuentas de prueba. Logueado como usuario A, intenta acceder a un recurso de usuario B cambiando el ID en la URL o en el request. Si funciona, hay agujero.
Qué es: Toda data que viene del usuario (formularios, URL params, headers) se valida con un schema antes de tocar la lógica. Y toda query a la DB usa parámetros, no concatenación de strings.
Por qué importa: Sin validación, un email puede ser 10KB de texto malicioso. Sin queries parametrizadas, alguien escribe '; DROP TABLE users;-- y te borra la base de datos. SQL injection sigue siendo el top 1 de OWASP por algo.
Cómo se ve hecho:
$1, ?), nunca template strings con datos del usuariodangerouslySetInnerHTML lo rompe)Verifica: intenta enviar un campo name con 10,000 caracteres, un email sin @, un número negativo donde debería ser positivo. ¿La API responde con error 400, o lo acepta?
Qué es: Los enlaces de "olvidé mi contraseña", verificación de email, o invitaciones, expiran después de un tiempo corto.
Por qué importa: Un link de reset que dura para siempre es una llave maestra. Si el correo del usuario se compromete meses después, ese link sigue siendo válido.
Cómo se ve hecho:
Verifica: pide un reset, espera el tiempo de expiración + 5 minutos, intenta usar el link. Debe responder "link expirado", no permitir el reset.
Qué es: Un máximo de requests por minuto/hora por IP, por usuario, y por endpoint sensible.
Por qué importa: Sin rate limiting, alguien puede:
Cómo se ve hecho:
Verifica: abre una terminal y corre for i in {1..20}; do curl https://tu-app.com/api/login; done. Después del intento 5-10 debes ver respuestas 429 "Too Many Requests".
Qué es: Cuando Stripe, Clerk, GitHub o cualquier servicio te manda un webhook, llega con un header de firma. Tu endpoint debe verificar esa firma antes de procesar el evento.
Por qué importa: Tu endpoint de webhook es público — cualquiera puede llamarlo. Sin verificación de firma, alguien puede mandarte un POST falso simulando "Stripe dice que este usuario pagó $1,000" y darle acceso premium sin haber cobrado nada.
Cómo se ve hecho:
stripe.webhooks.constructEvent() con el STRIPE_WEBHOOK_SECRET@clerk/nextjs con el WEBHOOK_SECRETx-hub-signature-256 con HMACVerifica: intenta llamar tu endpoint de webhook con curl y un body falso. Debe responder con error 400 o 401, no procesar el evento.
Qué es: Tres capas distintas:
Por qué importa: Sin esto, te enteras de los bugs por el tweet enojado del usuario. Con esto, te enteras en 60 segundos y arreglas antes de que se note.
Cómo se ve hecho:
console.log sueltosVerifica: fuerza un error en producción (un endpoint con un throw new Error()). ¿Te llegó la alerta? ¿En cuánto tiempo? Si no llega, no está configurado bien.
Qué es: Tu base de datos se respalda automáticamente, y tú sabes cómo restaurarla.
Por qué importa: Un DELETE FROM users sin WHERE (sí, pasa), una migración mal hecha, un servidor que se corrompe — sin backup, perdiste el negocio. Con backup, pierdes un día.
Cómo se ve hecho:
pg_dump manual o paga el upgrade si tienes data realVerifica: entra al dashboard de tu DB, busca "Backups". Si no ves la palabra "automated" o "daily", no estás cubierto.
Qué es: Después del deploy, no asumas que funciona porque "abrió la página". Recorre el flujo completo de tu producto en el dominio de producción, como si fueras un usuario nuevo.
Por qué importa: En localhost, Stripe usa modo test, los emails se mandan a tu inbox, y los redirects van a localhost:3000. En producción, todo cambia. El bug aparece en el momento más caro: cuando un usuario real está pagando.
Cómo se ve hecho: abre una ventana de incógnito y:
tu+test@gmail.com)Verifica: si cualquier paso falla o se siente raro, no lances. Aún si tu app "se ve bien".
Qué es: Si el deploy que acabas de hacer rompe algo, puedes volver al anterior en menos de 60 segundos.
Por qué importa: Todo el mundo deploya bugs. La diferencia entre un susto y una crisis es el tiempo que pasa entre "se rompió" y "ya está arreglado". El rollback te da minutos en lugar de horas.
Cómo se ve hecho:
git revert + push hace rollbackVerifica: abre el dashboard de tu plataforma ahora mismo, busca el deploy anterior, y confirma que sabes cómo promoverlo. Si te toma más de 30 segundos encontrar dónde, no es un "rollback en un clic".
.env.examplePega esto en la raíz de tu proyecto y adapta a lo que uses:
# App
NEXT_PUBLIC_APP_URL=https://tu-app.com
# Database (Supabase / Neon / etc.)
DATABASE_URL=
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=
# Auth (Clerk / Auth0 / etc.)
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=
CLERK_SECRET_KEY=
CLERK_WEBHOOK_SECRET=
# AI
OPENAI_API_KEY=
ANTHROPIC_API_KEY=
# Pagos
STRIPE_SECRET_KEY=
STRIPE_WEBHOOK_SECRET=
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=
# Email
RESEND_API_KEY=
# Observability
SENTRY_DSN=
NEXT_PUBLIC_SENTRY_DSN=
Primera vez: imprímelo o pégalo en un Notion. Recorre los 12 puntos uno por uno. Te va a tomar entre 1 y 3 horas la primera vez según el estado de tu proyecto.
Cada deploy nuevo: revisión rápida de los puntos que pueden cambiar (env vars, rollback, smoke test). Toma 10 minutos.
Cuando lances algo nuevo grande: los 12 otra vez. Sin atajos.
Si no puedes responder "sí, está hecho" a los 12, no es momento de deploy. Es momento de cerrar el laptop y dormir. Vuelve mañana, termina los pendientes, y entonces sí.
El deploy que se rompe a las 2 AM cuesta más que el lanzamiento que se atrasa 24 horas. Siempre.
Hecho por Erik Taveras · Taveras Solutions LLC
Regístrate gratis para descargar archivos, guardar recursos en favoritos, ganar XP y acceder a cursos y el foro de la comunidad.
¿Ya tienes cuenta? Inicia sesión
Autor
Erik Taveras
Creado por
Erik Taveras
Las primeras 25 las viste en el reel. Las otras 25 son las que tarde o temprano te van a aparecer en Cursor, en Claude Code, en el deploy, en el error que no entiendes a las 2am.
Guía práctica — Erik Taveras Cómo estructurar tu prompt para que genere bien a la primera, más el checklist de diseño que uso para entregar sitios a clientes.
La mayoría de asistentes de IA olvidan todo entre conversaciones. Cada vez que abres un chat nuevo, vuelves a explicar quién eres, qué estás trabajando, cómo te gusta que organicen la información, qué formato usas para tus reportes. Ese costo no aparece en la factura mensual, pero se siente todos los días.