{"content_id":"sjuxeehxgw","slug":"vibe-coding-project-architecture-and-four-hour-rescue-sprint","locale":"es","schema_type":"TechArticle","category":"how_to","category_name":"Cómo hacer","title":"Problemas estructurales de un proyecto de vibe coding y sprint de recuperación de 4 horas","summary":"Las causas de que un proyecto de vibe coding se atasque justo antes del lanzamiento pueden estar, más que en la habilidad para crear prompts, en una estructura poco clara, un código incoherente y los límites entre servicios externos. La recuperación en 4 horas no garantiza un servicio completo, sino que debe entenderse como un sprint condicionado que fija el alcance y reimplementa el flujo principal para crear una base funcional.","author":{"name":"Equipo editorial de Injoys","url":"https://injoys.com/ko/about"},"key_points":["React, Next.js y Supabase no son un problema en sí mismos, pero la complejidad crece rápidamente cuando se combinan sin límites de responsabilidad ni reglas de implementación.","Como la IA no conserva automáticamente la intención de diseño ni las condiciones operativas de todo el repositorio, una misma función puede implementarse siguiendo patrones diferentes.","Ruby on Rails reduce las opciones mediante convenciones y componentes integrados, pero no resuelve automáticamente los pagos, la verificación de seguridad ni la preparación operativa.","La recuperación en 4 horas es una reconstrucción inicial o una tarea de estabilización posible cuando existen requisitos definidos, un alcance principal reducido, cuentas e infraestructura preparadas y un profesional experimentado.","Para decidir si seguir corrigiendo el código existente o rehacerlo, deben compararse no solo el estado del código, sino también la migración de datos, las integraciones externas, las pruebas, la capacidad del equipo y los riesgos del lanzamiento."],"content_markdown":"La programación por vibra es una forma de trabajo que utiliza instrucciones en lenguaje natural y herramientas de programación con IA para implementar aplicaciones rápidamente. Al principio, las pantallas y las funciones aumentan con rapidez, pero, a medida que se acerca el lanzamiento, suelen aparecer problemas que atraviesan varias capas, como la autenticación, los datos, los pagos y el despliegue.\n\nEste fenómeno no debe explicarse únicamente por defectos de una pila tecnológica concreta o por la capacidad del usuario para crear prompts. Lo fundamental es **quién controla la coherencia estructural**, **si las responsabilidades de cada componente están claras** y **si existen pruebas que permitan verificar que el trabajo está terminado**.\n\n## Por qué los proyectos de programación por vibra se atascan en las etapas finales\n\n### Completar la interfaz no equivale a completar el servicio\n\nEn las primeras fases del desarrollo, se crean rápidamente resultados visibles como botones, formularios de entrada y listas. Sin embargo, un servicio real necesita las siguientes condiciones no visibles.\n\n- Comprobaciones de permisos para que cada usuario solo pueda acceder a sus propios datos\n- Procesamiento de datos que tolere solicitudes duplicadas y reintentos de red\n- Éxito, fallo, cancelación y reembolso de pagos, además de verificación de webhooks\n- Validación de datos de entrada y recuperación ante errores\n- Cambios en la base de datos y migración de los datos existentes\n- Gestión de claves secretas, registros, monitorización, copias de seguridad y restauración\n- Pruebas automatizadas que garanticen que las funciones principales sigan funcionando después del despliegue\n\nEl mero hecho de que la interfaz funcione no significa que se cumplan estas condiciones. Los defectos que se descubren en las etapas finales no han surgido de repente; en muchos casos, se han acumulado desde la implementación inicial sin haber sido verificados.\n\n### La IA no siempre conserva la intención de diseño de todo el repositorio\n\nLas herramientas de programación con IA generan propuestas de cambios a partir de los archivos proporcionados, el contexto de la conversación, el código recuperado y las instrucciones. Si las reglas del proyecto no están documentadas, pueden producirse las siguientes incoherencias.\n\n- Implementar de manera diferente una misma consulta de datos en componentes de servidor, rutas de API y código del navegador\n- Gestionar de forma duplicada el estado de autenticación mediante cookies, el estado del cliente y un SDK externo\n- Escribir de manera distinta las mismas reglas de validación en la interfaz y en el servidor\n- Añadir únicamente manejo de excepciones o condicionales sin resolver el error de raíz\n- Crear repetidamente funciones y modelos de datos similares al no encontrar las abstracciones existentes\n\nEn esta situación, al corregir un error nuevo, un cambio en una capa puede romper las suposiciones de otra. El usuario siente que la IA da vueltas sobre el mismo punto, pero en realidad puede ocurrir que no exista una única estructura ni criterios de verificación que la IA deba seguir.\n\n## Comprender correctamente la combinación de React, Next.js y Supabase\n\nNo es exacto definir React, Next.js y Supabase simplemente como una mala pila compuesta. Cada tecnología tiene funciones independientes y ventajas ampliamente utilizadas.\n\n| Tecnología | Función básica | Aspectos que deben decidirse en el proyecto |\n|---|---|---|\n| React | Biblioteca para crear interfaces de usuario | Gestión del estado, solicitudes de datos, límites de los componentes |\n| Next.js | Framework web full stack basado en React | Método de renderizado, límites entre servidor y cliente, configuración de caché y API |\n| Supabase | Plataforma backend que ofrece PostgreSQL, autenticación, almacenamiento, etc. | Políticas de acceso, modelo de datos, gestión de sesiones, permisos del servicio |\n| Ruby on Rails | Framework integrado para aplicaciones web centradas en el servidor | Modelos, controladores, tareas, correo y configuración del despliegue dentro de las convenciones de Rails |\n\nNext.js no es una herramienta que se ocupe únicamente de la interfaz, sino que también ofrece funciones de servidor. Supabase tampoco es solo una base de datos, ya que puede incluir autenticación, almacenamiento y otras funciones. El problema surge cuando se utilizan varias funciones sin determinar **dónde reside la responsabilidad final sobre los permisos y las reglas de negocio**.\n\nPor ejemplo, si las reglas para crear pedidos están repartidas entre el código del navegador, las rutas de servidor de Next.js y las políticas de la base de datos de Supabase, resulta difícil rastrear los errores. Por el contrario, si se establece una regla según la cual las operaciones de escritura pasan por la capa de servicios del servidor y las políticas de la base de datos se utilizan como última línea de defensa, la misma pila puede operarse de forma estable.\n\n## Por qué Ruby on Rails puede ser una alternativa\n\n### Reduce las opciones mediante la convención sobre configuración\n\nLa convención sobre configuración, uno de los principios representativos de Ruby on Rails, unifica mediante las reglas predeterminadas del framework las decisiones estructurales que deben tomarse repetidamente. La ubicación y la forma de conexión de los modelos, controladores, cambios de la base de datos, tareas, correo y pruebas son relativamente predecibles.\n\nEsta previsibilidad resulta especialmente útil en la programación con IA. Seguir convenciones claras reduce la posibilidad de que la IA añada nuevas funciones con patrones completamente distintos y también facilita que una persona revise los cambios.\n\n### Gestiona las funciones comunes de los servicios web dentro de un solo sistema\n\nRails ofrece componentes y rutas oficiales para el acceso a la base de datos, el enrutamiento, el renderizado en el servidor, las tareas asíncronas, el correo, la comunicación en tiempo real, las pruebas y el despliegue. Esto permite reducir los puntos de conexión entre herramientas independientes.\n\nSin embargo, también presenta limitaciones claras.\n\n- Para procesar pagos, sigue siendo necesario un proveedor de pagos externo como Stripe.\n- Una página de administración no se completa automáticamente de forma que satisfaga todos los requisitos.\n- Aunque se generen funciones de autenticación o se configuren mediante una biblioteca, el diseño de permisos y la revisión de seguridad son tareas independientes.\n- Las interfaces complejas en tiempo real o las API móviles independientes requieren un diseño adicional.\n- Si el equipo no tiene experiencia con Rails, habrá costes de aprendizaje y contratación.\n\nPor tanto, Rails no es una herramienta que permita que la IA resuelva todos los problemas, sino **una opción que delimita la ruta básica que deben seguir tanto la IA como las personas**.\n\n## Qué se puede resolver en 4 horas\n\nNo existe una base universal para afirmar que cualquier servicio que incluya inicio de sesión, pagos, funciones administrativas, migración de datos, revisión de seguridad y despliegue operativo pueda completarse en 4 horas. Los objetivos realistas para 4 horas son los siguientes.\n\n- Comprender la estructura actual y los puntos de fallo.\n- Elegir entre el mantenimiento y la reimplementación.\n- Poner en funcionamiento un flujo de usuario prioritario.\n- Crear una nueva base de referencia comprobable.\n- Desplegarla, si es posible, en un entorno de staging.\n- Dejar una lista de los riesgos restantes y las tareas posteriores.\n\n### Condiciones que permiten una reimplementación en 4 horas\n\nCuantas más de las siguientes condiciones se cumplan, más viable será una reimplementación rápida.\n\n1. Las pantallas y los flujos de usuario necesarios ya están definidos.\n2. Los campos de datos principales y sus relaciones están organizados.\n3. Es posible tomar como referencia las pantallas existentes sin volver a discutir el diseño.\n4. Se puede acceder inmediatamente al repositorio, el dominio, el entorno de despliegue y las cuentas de los servicios externos.\n5. Se puede omitir la migración de los datos existentes o trasladar únicamente una muestra pequeña.\n6. Los pagos se limitan a un alcance reducido, como el flujo básico de éxito en el entorno de pruebas.\n7. Una persona que conozca Rails y el entorno de despliegue revisa los resultados de la IA.\n\nAquí también reside la razón por la que resulta útil contar con un proyecto existente en el que se ha trabajado durante varios meses. Si durante ese periodo se concretaron los flujos de usuario, los campos obligatorios, los casos de fallo y las prioridades, se reduce el tiempo de exploración. Sin embargo, esto no significa que la planificación se haya vuelto perfecta automáticamente, y solo deben reutilizarse los requisitos validados en el proyecto existente.\n\n## Sprint práctico de recuperación de 4 horas\n\n| Tiempo | Trabajo | Entregable mínimo |\n|---|---|---|\n| 0:00~0:30 | Conservación del repositorio y del estado operativo, investigación de la pila tecnológica | Copia de seguridad, lista de componentes, comprobación de exposición de información secreta |\n| 0:30~1:00 | Definición del flujo principal y del modelo de datos, decisión entre reparación y reimplementación | Alcance en una frase, condiciones de finalización, lista de riesgos |\n| 1:00~2:00 | Base de referencia en Rails o modificación estructural del proyecto existente | Aplicación ejecutable, modelo de datos, estructura básica de autenticación |\n| 2:00~3:15 | Implementación vertical del flujo de usuario principal | Un flujo conectado desde la interfaz hasta el almacenamiento de datos y sus pruebas |\n| 3:15~3:45 | Configuración mínima de integraciones externas y despliegue en staging | Integración con el entorno de pruebas, URL de despliegue, configuración de variables de entorno |\n| 3:45~4:00 | Pruebas de humo y traspaso | Resultados de éxito y fallo, elementos pendientes, orden de las siguientes tareas |\n\n### Paso 1: Conservar el original\n\nAntes de modificar nada, se crea una rama separada o una copia del repositorio y se realiza una copia de seguridad de la base de datos. No se deben pegar claves de API, contraseñas de bases de datos ni información de identificación personal en las conversaciones con la IA. Si ya se han expuesto, lo más seguro es revocar esos secretos y emitir otros nuevos.\n\n### Paso 2: Investigar la pila tecnológica basándose en pruebas\n\nEn lugar de pedir a la IA que simplemente adivine la pila tecnológica, hay que exigirle que compruebe los siguientes recursos.\n\n- Manifiestos y archivos de bloqueo que registran los paquetes y sus versiones\n- Esquema de la base de datos y migraciones\n- Archivos que gestionan la autenticación y las sesiones\n- Rutas de API y funciones del servidor\n- Configuración de despliegue, nombres de variables de entorno y SDK de servicios externos\n- Pruebas automatizadas y configuración de integración continua\n\nUn ejemplo de solicitud que puede utilizarse es el siguiente.\n\n\u003e Lee el repositorio y organiza en una tabla las herramientas del frontend, el servidor, la base de datos, la autenticación, el almacenamiento, los pagos, el despliegue y las pruebas. Incluye las rutas de los archivos que justifican cada conclusión y señala dónde están duplicadas las reglas de negocio y dónde podría haber infracciones de los límites entre servidor y cliente. No modifiques todavía el código ni muestres valores secretos.\n\n### Paso 3: Elegir un solo flujo vertical principal\n\nUn flujo vertical es una ruta completa que conecta la interfaz con la lógica del servidor y el almacenamiento de datos. Algunos ejemplos son los siguientes.\n\n- Registro → inicio de sesión → consulta del perfil\n- Selección de producto → creación del pedido → aprobación del pago en el entorno de pruebas\n- Inicio de sesión del administrador → creación de una publicación → visualización en la página pública\n\nEn lugar de crear varias pantallas a la vez, validar un solo flujo principal en condiciones de éxito, falta de permisos y entrada incorrecta permite revelar más rápidamente los riesgos estructurales.\n\n### Paso 4: Fijar las condiciones de finalización mediante pruebas\n\nSi solo se pide a la IA que implemente una función, puede generar código adaptado al caso de éxito visible en la interfaz. Como mínimo, se deben fijar las siguientes condiciones mediante pruebas automatizadas o una lista de comprobación repetible.\n\n- Un usuario válido puede completar la tarea.\n- Un usuario que no haya iniciado sesión no puede acceder a datos protegidos.\n- Aunque se introduzca el identificador de otro usuario, no es posible acceder a sus datos.\n- Los datos incorrectos no se guardan y devuelven un error comprensible.\n- Aunque se repita una misma solicitud de pago o escritura, no se procesa por duplicado.\n\n### Paso 5: Desplegar solo hasta staging\n\nPor lo general, es más seguro considerar el despliegue del sprint de 4 horas como una validación en staging y no como la confirmación definitiva para producción. Antes de aceptar usuarios y pagos reales, se deben comprobar por separado la seguridad, la migración de datos, la restauración de copias de seguridad, la monitorización y la respuesta ante incidentes.\n\n## Criterios para decidir si reparar el proyecto existente o rehacerlo\n\n| Situación | Mantener y reparar la estructura existente | Considerar una reimplementación con Rails u otra opción |\n|---|---|---|\n| Funciones principales y pruebas | La mayoría funciona y existen pruebas | Incluso los flujos principales se rompen repetidamente |\n| Datos | Hay muchos datos operativos y el riesgo de migración es alto | No hay datos o el alcance de la migración es pequeño |\n| Estructura | Los límites de responsabilidad y los patrones son mayoritariamente coherentes | Una misma función está duplicada en varias capas |\n| Requisitos del frontend | Son importantes las interacciones complejas y los recursos existentes de React | El trabajo se centra en CRUD del lado del servidor y flujos operativos |\n| Capacidades del equipo | Hay personal capaz de operar la pila actual | Las convenciones de Rails se adaptan mejor a la forma de trabajar del equipo |\n| Integraciones externas | Ya están operativas numerosas integraciones estables | Las integraciones están en una fase inicial o pueden sustituirse |\n\nNo se debe realizar una reescritura completa únicamente porque haya muchos archivos o existan errores. Una reescritura puede hacer que se pierdan casos excepcionales ya resueltos y crear nuevos defectos. Es preferible implementar primero un pequeño flujo vertical de las dos maneras y comparar la velocidad de desarrollo, la capacidad de prueba, la comprensión del código y los riesgos del despliegue.\n\n## Aspectos que deben comprobarse por separado antes del lanzamiento\n\nAunque se cree una base de referencia en 4 horas, pueden quedar pendientes los siguientes aspectos.\n\n- Revisión del modelo de permisos y de la configuración de seguridad de Rails\n- Firma de webhooks de pago, prevención de duplicados y gestión de cancelaciones y reembolsos\n- Migración de datos operativos y verificación del número de registros y los totales\n- Copias de seguridad de la base de datos y prueba real de restauración\n- Seguimiento de errores, conservación de registros y monitorización de disponibilidad\n- Pruebas de carga y estimación de costes\n- Gestión de datos personales, términos de uso y revisión legal relacionada\n- Comprobación de accesibilidad, navegadores y entornos móviles\n- Procedimiento de reversión en caso de incidentes y designación de responsables\n\n## Conclusión\n\nEl estancamiento de los proyectos de programación por vibra en sus etapas finales no puede explicarse únicamente por la capacidad de programación de la IA. Si en una configuración con un alto grado de libertad no se definen reglas, límites de responsabilidad, pruebas y criterios operativos, las soluciones locales creadas por la IA tienden a entrar en conflicto entre sí.\n\nRuby on Rails puede ser una alternativa práctica que reduce ese grado de libertad mediante convenciones y una estructura integrada. Sin embargo, rehacer todos los proyectos con Rails no es la respuesta correcta. Primero se debe investigar la pila actual basándose en pruebas, definir el flujo principal y utilizar las 4 horas **no como tiempo para crear un producto terminado, sino como tiempo para verificar la estructura y establecer una base de referencia recuperable**.","content_html":"\u003cp\u003eLa programación por vibra es una forma de trabajo que utiliza instrucciones en lenguaje natural y herramientas de programación con IA para implementar aplicaciones rápidamente. Al principio, las pantallas y las funciones aumentan con rapidez, pero, a medida que se acerca el lanzamiento, suelen aparecer problemas que atraviesan varias capas, como la autenticación, los datos, los pagos y el despliegue.\u003c/p\u003e\n\u003cp\u003eEste fenómeno no debe explicarse únicamente por defectos de una pila tecnológica concreta o por la capacidad del usuario para crear prompts. Lo fundamental es \u003cstrong\u003equién controla la coherencia estructural\u003c/strong\u003e, \u003cstrong\u003esi las responsabilidades de cada componente están claras\u003c/strong\u003e y \u003cstrong\u003esi existen pruebas que permitan verificar que el trabajo está terminado\u003c/strong\u003e.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#por-qu%C3%A9-los-proyectos-de-programaci%C3%B3n-por-vibra-se-atascan-en-las-etapas-finales\" class=\"anchor\" id=\"por-qué-los-proyectos-de-programación-por-vibra-se-atascan-en-las-etapas-finales\"\u003e\u003c/a\u003ePor qué los proyectos de programación por vibra se atascan en las etapas finales\u003c/h2\u003e\n\u003ch3\u003e\n\u003ca href=\"#completar-la-interfaz-no-equivale-a-completar-el-servicio\" class=\"anchor\" id=\"completar-la-interfaz-no-equivale-a-completar-el-servicio\"\u003e\u003c/a\u003eCompletar la interfaz no equivale a completar el servicio\u003c/h3\u003e\n\u003cp\u003eEn las primeras fases del desarrollo, se crean rápidamente resultados visibles como botones, formularios de entrada y listas. Sin embargo, un servicio real necesita las siguientes condiciones no visibles.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eComprobaciones de permisos para que cada usuario solo pueda acceder a sus propios datos\u003c/li\u003e\n\u003cli\u003eProcesamiento de datos que tolere solicitudes duplicadas y reintentos de red\u003c/li\u003e\n\u003cli\u003eÉxito, fallo, cancelación y reembolso de pagos, además de verificación de webhooks\u003c/li\u003e\n\u003cli\u003eValidación de datos de entrada y recuperación ante errores\u003c/li\u003e\n\u003cli\u003eCambios en la base de datos y migración de los datos existentes\u003c/li\u003e\n\u003cli\u003eGestión de claves secretas, registros, monitorización, copias de seguridad y restauración\u003c/li\u003e\n\u003cli\u003ePruebas automatizadas que garanticen que las funciones principales sigan funcionando después del despliegue\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eEl mero hecho de que la interfaz funcione no significa que se cumplan estas condiciones. Los defectos que se descubren en las etapas finales no han surgido de repente; en muchos casos, se han acumulado desde la implementación inicial sin haber sido verificados.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#la-ia-no-siempre-conserva-la-intenci%C3%B3n-de-dise%C3%B1o-de-todo-el-repositorio\" class=\"anchor\" id=\"la-ia-no-siempre-conserva-la-intención-de-diseño-de-todo-el-repositorio\"\u003e\u003c/a\u003eLa IA no siempre conserva la intención de diseño de todo el repositorio\u003c/h3\u003e\n\u003cp\u003eLas herramientas de programación con IA generan propuestas de cambios a partir de los archivos proporcionados, el contexto de la conversación, el código recuperado y las instrucciones. Si las reglas del proyecto no están documentadas, pueden producirse las siguientes incoherencias.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eImplementar de manera diferente una misma consulta de datos en componentes de servidor, rutas de API y código del navegador\u003c/li\u003e\n\u003cli\u003eGestionar de forma duplicada el estado de autenticación mediante cookies, el estado del cliente y un SDK externo\u003c/li\u003e\n\u003cli\u003eEscribir de manera distinta las mismas reglas de validación en la interfaz y en el servidor\u003c/li\u003e\n\u003cli\u003eAñadir únicamente manejo de excepciones o condicionales sin resolver el error de raíz\u003c/li\u003e\n\u003cli\u003eCrear repetidamente funciones y modelos de datos similares al no encontrar las abstracciones existentes\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eEn esta situación, al corregir un error nuevo, un cambio en una capa puede romper las suposiciones de otra. El usuario siente que la IA da vueltas sobre el mismo punto, pero en realidad puede ocurrir que no exista una única estructura ni criterios de verificación que la IA deba seguir.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#comprender-correctamente-la-combinaci%C3%B3n-de-react-nextjs-y-supabase\" class=\"anchor\" id=\"comprender-correctamente-la-combinación-de-react-nextjs-y-supabase\"\u003e\u003c/a\u003eComprender correctamente la combinación de React, Next.js y Supabase\u003c/h2\u003e\n\u003cp\u003eNo es exacto definir React, Next.js y Supabase simplemente como una mala pila compuesta. Cada tecnología tiene funciones independientes y ventajas ampliamente utilizadas.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eTecnología\u003c/th\u003e\n\u003cth\u003eFunción básica\u003c/th\u003e\n\u003cth\u003eAspectos que deben decidirse en el proyecto\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Tecnología\"\u003eReact\u003c/td\u003e\n\u003ctd data-label=\"Función básica\"\u003eBiblioteca para crear interfaces de usuario\u003c/td\u003e\n\u003ctd data-label=\"Aspectos que deben decidirse en el proyecto\"\u003eGestión del estado, solicitudes de datos, límites de los componentes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Tecnología\"\u003eNext.js\u003c/td\u003e\n\u003ctd data-label=\"Función básica\"\u003eFramework web full stack basado en React\u003c/td\u003e\n\u003ctd data-label=\"Aspectos que deben decidirse en el proyecto\"\u003eMétodo de renderizado, límites entre servidor y cliente, configuración de caché y API\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Tecnología\"\u003eSupabase\u003c/td\u003e\n\u003ctd data-label=\"Función básica\"\u003ePlataforma backend que ofrece PostgreSQL, autenticación, almacenamiento, etc.\u003c/td\u003e\n\u003ctd data-label=\"Aspectos que deben decidirse en el proyecto\"\u003ePolíticas de acceso, modelo de datos, gestión de sesiones, permisos del servicio\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Tecnología\"\u003eRuby on Rails\u003c/td\u003e\n\u003ctd data-label=\"Función básica\"\u003eFramework integrado para aplicaciones web centradas en el servidor\u003c/td\u003e\n\u003ctd data-label=\"Aspectos que deben decidirse en el proyecto\"\u003eModelos, controladores, tareas, correo y configuración del despliegue dentro de las convenciones de Rails\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eNext.js no es una herramienta que se ocupe únicamente de la interfaz, sino que también ofrece funciones de servidor. Supabase tampoco es solo una base de datos, ya que puede incluir autenticación, almacenamiento y otras funciones. El problema surge cuando se utilizan varias funciones sin determinar \u003cstrong\u003edónde reside la responsabilidad final sobre los permisos y las reglas de negocio\u003c/strong\u003e.\u003c/p\u003e\n\u003cp\u003ePor ejemplo, si las reglas para crear pedidos están repartidas entre el código del navegador, las rutas de servidor de Next.js y las políticas de la base de datos de Supabase, resulta difícil rastrear los errores. Por el contrario, si se establece una regla según la cual las operaciones de escritura pasan por la capa de servicios del servidor y las políticas de la base de datos se utilizan como última línea de defensa, la misma pila puede operarse de forma estable.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#por-qu%C3%A9-ruby-on-rails-puede-ser-una-alternativa\" class=\"anchor\" id=\"por-qué-ruby-on-rails-puede-ser-una-alternativa\"\u003e\u003c/a\u003ePor qué Ruby on Rails puede ser una alternativa\u003c/h2\u003e\n\u003ch3\u003e\n\u003ca href=\"#reduce-las-opciones-mediante-la-convenci%C3%B3n-sobre-configuraci%C3%B3n\" class=\"anchor\" id=\"reduce-las-opciones-mediante-la-convención-sobre-configuración\"\u003e\u003c/a\u003eReduce las opciones mediante la convención sobre configuración\u003c/h3\u003e\n\u003cp\u003eLa convención sobre configuración, uno de los principios representativos de Ruby on Rails, unifica mediante las reglas predeterminadas del framework las decisiones estructurales que deben tomarse repetidamente. La ubicación y la forma de conexión de los modelos, controladores, cambios de la base de datos, tareas, correo y pruebas son relativamente predecibles.\u003c/p\u003e\n\u003cp\u003eEsta previsibilidad resulta especialmente útil en la programación con IA. Seguir convenciones claras reduce la posibilidad de que la IA añada nuevas funciones con patrones completamente distintos y también facilita que una persona revise los cambios.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#gestiona-las-funciones-comunes-de-los-servicios-web-dentro-de-un-solo-sistema\" class=\"anchor\" id=\"gestiona-las-funciones-comunes-de-los-servicios-web-dentro-de-un-solo-sistema\"\u003e\u003c/a\u003eGestiona las funciones comunes de los servicios web dentro de un solo sistema\u003c/h3\u003e\n\u003cp\u003eRails ofrece componentes y rutas oficiales para el acceso a la base de datos, el enrutamiento, el renderizado en el servidor, las tareas asíncronas, el correo, la comunicación en tiempo real, las pruebas y el despliegue. Esto permite reducir los puntos de conexión entre herramientas independientes.\u003c/p\u003e\n\u003cp\u003eSin embargo, también presenta limitaciones claras.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePara procesar pagos, sigue siendo necesario un proveedor de pagos externo como Stripe.\u003c/li\u003e\n\u003cli\u003eUna página de administración no se completa automáticamente de forma que satisfaga todos los requisitos.\u003c/li\u003e\n\u003cli\u003eAunque se generen funciones de autenticación o se configuren mediante una biblioteca, el diseño de permisos y la revisión de seguridad son tareas independientes.\u003c/li\u003e\n\u003cli\u003eLas interfaces complejas en tiempo real o las API móviles independientes requieren un diseño adicional.\u003c/li\u003e\n\u003cli\u003eSi el equipo no tiene experiencia con Rails, habrá costes de aprendizaje y contratación.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePor tanto, Rails no es una herramienta que permita que la IA resuelva todos los problemas, sino \u003cstrong\u003euna opción que delimita la ruta básica que deben seguir tanto la IA como las personas\u003c/strong\u003e.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#qu%C3%A9-se-puede-resolver-en-4-horas\" class=\"anchor\" id=\"qué-se-puede-resolver-en-4-horas\"\u003e\u003c/a\u003eQué se puede resolver en 4 horas\u003c/h2\u003e\n\u003cp\u003eNo existe una base universal para afirmar que cualquier servicio que incluya inicio de sesión, pagos, funciones administrativas, migración de datos, revisión de seguridad y despliegue operativo pueda completarse en 4 horas. Los objetivos realistas para 4 horas son los siguientes.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eComprender la estructura actual y los puntos de fallo.\u003c/li\u003e\n\u003cli\u003eElegir entre el mantenimiento y la reimplementación.\u003c/li\u003e\n\u003cli\u003ePoner en funcionamiento un flujo de usuario prioritario.\u003c/li\u003e\n\u003cli\u003eCrear una nueva base de referencia comprobable.\u003c/li\u003e\n\u003cli\u003eDesplegarla, si es posible, en un entorno de staging.\u003c/li\u003e\n\u003cli\u003eDejar una lista de los riesgos restantes y las tareas posteriores.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\n\u003ca href=\"#condiciones-que-permiten-una-reimplementaci%C3%B3n-en-4-horas\" class=\"anchor\" id=\"condiciones-que-permiten-una-reimplementación-en-4-horas\"\u003e\u003c/a\u003eCondiciones que permiten una reimplementación en 4 horas\u003c/h3\u003e\n\u003cp\u003eCuantas más de las siguientes condiciones se cumplan, más viable será una reimplementación rápida.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eLas pantallas y los flujos de usuario necesarios ya están definidos.\u003c/li\u003e\n\u003cli\u003eLos campos de datos principales y sus relaciones están organizados.\u003c/li\u003e\n\u003cli\u003eEs posible tomar como referencia las pantallas existentes sin volver a discutir el diseño.\u003c/li\u003e\n\u003cli\u003eSe puede acceder inmediatamente al repositorio, el dominio, el entorno de despliegue y las cuentas de los servicios externos.\u003c/li\u003e\n\u003cli\u003eSe puede omitir la migración de los datos existentes o trasladar únicamente una muestra pequeña.\u003c/li\u003e\n\u003cli\u003eLos pagos se limitan a un alcance reducido, como el flujo básico de éxito en el entorno de pruebas.\u003c/li\u003e\n\u003cli\u003eUna persona que conozca Rails y el entorno de despliegue revisa los resultados de la IA.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eAquí también reside la razón por la que resulta útil contar con un proyecto existente en el que se ha trabajado durante varios meses. Si durante ese periodo se concretaron los flujos de usuario, los campos obligatorios, los casos de fallo y las prioridades, se reduce el tiempo de exploración. Sin embargo, esto no significa que la planificación se haya vuelto perfecta automáticamente, y solo deben reutilizarse los requisitos validados en el proyecto existente.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#sprint-pr%C3%A1ctico-de-recuperaci%C3%B3n-de-4-horas\" class=\"anchor\" id=\"sprint-práctico-de-recuperación-de-4-horas\"\u003e\u003c/a\u003eSprint práctico de recuperación de 4 horas\u003c/h2\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eTiempo\u003c/th\u003e\n\u003cth\u003eTrabajo\u003c/th\u003e\n\u003cth\u003eEntregable mínimo\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Tiempo\"\u003e0:00~0:30\u003c/td\u003e\n\u003ctd data-label=\"Trabajo\"\u003eConservación del repositorio y del estado operativo, investigación de la pila tecnológica\u003c/td\u003e\n\u003ctd data-label=\"Entregable mínimo\"\u003eCopia de seguridad, lista de componentes, comprobación de exposición de información secreta\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Tiempo\"\u003e0:30~1:00\u003c/td\u003e\n\u003ctd data-label=\"Trabajo\"\u003eDefinición del flujo principal y del modelo de datos, decisión entre reparación y reimplementación\u003c/td\u003e\n\u003ctd data-label=\"Entregable mínimo\"\u003eAlcance en una frase, condiciones de finalización, lista de riesgos\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Tiempo\"\u003e1:00~2:00\u003c/td\u003e\n\u003ctd data-label=\"Trabajo\"\u003eBase de referencia en Rails o modificación estructural del proyecto existente\u003c/td\u003e\n\u003ctd data-label=\"Entregable mínimo\"\u003eAplicación ejecutable, modelo de datos, estructura básica de autenticación\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Tiempo\"\u003e2:00~3:15\u003c/td\u003e\n\u003ctd data-label=\"Trabajo\"\u003eImplementación vertical del flujo de usuario principal\u003c/td\u003e\n\u003ctd data-label=\"Entregable mínimo\"\u003eUn flujo conectado desde la interfaz hasta el almacenamiento de datos y sus pruebas\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Tiempo\"\u003e3:15~3:45\u003c/td\u003e\n\u003ctd data-label=\"Trabajo\"\u003eConfiguración mínima de integraciones externas y despliegue en staging\u003c/td\u003e\n\u003ctd data-label=\"Entregable mínimo\"\u003eIntegración con el entorno de pruebas, URL de despliegue, configuración de variables de entorno\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Tiempo\"\u003e3:45~4:00\u003c/td\u003e\n\u003ctd data-label=\"Trabajo\"\u003ePruebas de humo y traspaso\u003c/td\u003e\n\u003ctd data-label=\"Entregable mínimo\"\u003eResultados de éxito y fallo, elementos pendientes, orden de las siguientes tareas\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003ch3\u003e\n\u003ca href=\"#paso-1-conservar-el-original\" class=\"anchor\" id=\"paso-1-conservar-el-original\"\u003e\u003c/a\u003ePaso 1: Conservar el original\u003c/h3\u003e\n\u003cp\u003eAntes de modificar nada, se crea una rama separada o una copia del repositorio y se realiza una copia de seguridad de la base de datos. No se deben pegar claves de API, contraseñas de bases de datos ni información de identificación personal en las conversaciones con la IA. Si ya se han expuesto, lo más seguro es revocar esos secretos y emitir otros nuevos.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#paso-2-investigar-la-pila-tecnol%C3%B3gica-bas%C3%A1ndose-en-pruebas\" class=\"anchor\" id=\"paso-2-investigar-la-pila-tecnológica-basándose-en-pruebas\"\u003e\u003c/a\u003ePaso 2: Investigar la pila tecnológica basándose en pruebas\u003c/h3\u003e\n\u003cp\u003eEn lugar de pedir a la IA que simplemente adivine la pila tecnológica, hay que exigirle que compruebe los siguientes recursos.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eManifiestos y archivos de bloqueo que registran los paquetes y sus versiones\u003c/li\u003e\n\u003cli\u003eEsquema de la base de datos y migraciones\u003c/li\u003e\n\u003cli\u003eArchivos que gestionan la autenticación y las sesiones\u003c/li\u003e\n\u003cli\u003eRutas de API y funciones del servidor\u003c/li\u003e\n\u003cli\u003eConfiguración de despliegue, nombres de variables de entorno y SDK de servicios externos\u003c/li\u003e\n\u003cli\u003ePruebas automatizadas y configuración de integración continua\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eUn ejemplo de solicitud que puede utilizarse es el siguiente.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eLee el repositorio y organiza en una tabla las herramientas del frontend, el servidor, la base de datos, la autenticación, el almacenamiento, los pagos, el despliegue y las pruebas. Incluye las rutas de los archivos que justifican cada conclusión y señala dónde están duplicadas las reglas de negocio y dónde podría haber infracciones de los límites entre servidor y cliente. No modifiques todavía el código ni muestres valores secretos.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch3\u003e\n\u003ca href=\"#paso-3-elegir-un-solo-flujo-vertical-principal\" class=\"anchor\" id=\"paso-3-elegir-un-solo-flujo-vertical-principal\"\u003e\u003c/a\u003ePaso 3: Elegir un solo flujo vertical principal\u003c/h3\u003e\n\u003cp\u003eUn flujo vertical es una ruta completa que conecta la interfaz con la lógica del servidor y el almacenamiento de datos. Algunos ejemplos son los siguientes.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRegistro → inicio de sesión → consulta del perfil\u003c/li\u003e\n\u003cli\u003eSelección de producto → creación del pedido → aprobación del pago en el entorno de pruebas\u003c/li\u003e\n\u003cli\u003eInicio de sesión del administrador → creación de una publicación → visualización en la página pública\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eEn lugar de crear varias pantallas a la vez, validar un solo flujo principal en condiciones de éxito, falta de permisos y entrada incorrecta permite revelar más rápidamente los riesgos estructurales.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#paso-4-fijar-las-condiciones-de-finalizaci%C3%B3n-mediante-pruebas\" class=\"anchor\" id=\"paso-4-fijar-las-condiciones-de-finalización-mediante-pruebas\"\u003e\u003c/a\u003ePaso 4: Fijar las condiciones de finalización mediante pruebas\u003c/h3\u003e\n\u003cp\u003eSi solo se pide a la IA que implemente una función, puede generar código adaptado al caso de éxito visible en la interfaz. Como mínimo, se deben fijar las siguientes condiciones mediante pruebas automatizadas o una lista de comprobación repetible.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUn usuario válido puede completar la tarea.\u003c/li\u003e\n\u003cli\u003eUn usuario que no haya iniciado sesión no puede acceder a datos protegidos.\u003c/li\u003e\n\u003cli\u003eAunque se introduzca el identificador de otro usuario, no es posible acceder a sus datos.\u003c/li\u003e\n\u003cli\u003eLos datos incorrectos no se guardan y devuelven un error comprensible.\u003c/li\u003e\n\u003cli\u003eAunque se repita una misma solicitud de pago o escritura, no se procesa por duplicado.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\n\u003ca href=\"#paso-5-desplegar-solo-hasta-staging\" class=\"anchor\" id=\"paso-5-desplegar-solo-hasta-staging\"\u003e\u003c/a\u003ePaso 5: Desplegar solo hasta staging\u003c/h3\u003e\n\u003cp\u003ePor lo general, es más seguro considerar el despliegue del sprint de 4 horas como una validación en staging y no como la confirmación definitiva para producción. Antes de aceptar usuarios y pagos reales, se deben comprobar por separado la seguridad, la migración de datos, la restauración de copias de seguridad, la monitorización y la respuesta ante incidentes.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#criterios-para-decidir-si-reparar-el-proyecto-existente-o-rehacerlo\" class=\"anchor\" id=\"criterios-para-decidir-si-reparar-el-proyecto-existente-o-rehacerlo\"\u003e\u003c/a\u003eCriterios para decidir si reparar el proyecto existente o rehacerlo\u003c/h2\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eSituación\u003c/th\u003e\n\u003cth\u003eMantener y reparar la estructura existente\u003c/th\u003e\n\u003cth\u003eConsiderar una reimplementación con Rails u otra opción\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Situación\"\u003eFunciones principales y pruebas\u003c/td\u003e\n\u003ctd data-label=\"Mantener y reparar la estructura existente\"\u003eLa mayoría funciona y existen pruebas\u003c/td\u003e\n\u003ctd data-label=\"Considerar una reimplementación con Rails u otra opción\"\u003eIncluso los flujos principales se rompen repetidamente\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Situación\"\u003eDatos\u003c/td\u003e\n\u003ctd data-label=\"Mantener y reparar la estructura existente\"\u003eHay muchos datos operativos y el riesgo de migración es alto\u003c/td\u003e\n\u003ctd data-label=\"Considerar una reimplementación con Rails u otra opción\"\u003eNo hay datos o el alcance de la migración es pequeño\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Situación\"\u003eEstructura\u003c/td\u003e\n\u003ctd data-label=\"Mantener y reparar la estructura existente\"\u003eLos límites de responsabilidad y los patrones son mayoritariamente coherentes\u003c/td\u003e\n\u003ctd data-label=\"Considerar una reimplementación con Rails u otra opción\"\u003eUna misma función está duplicada en varias capas\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Situación\"\u003eRequisitos del frontend\u003c/td\u003e\n\u003ctd data-label=\"Mantener y reparar la estructura existente\"\u003eSon importantes las interacciones complejas y los recursos existentes de React\u003c/td\u003e\n\u003ctd data-label=\"Considerar una reimplementación con Rails u otra opción\"\u003eEl trabajo se centra en CRUD del lado del servidor y flujos operativos\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Situación\"\u003eCapacidades del equipo\u003c/td\u003e\n\u003ctd data-label=\"Mantener y reparar la estructura existente\"\u003eHay personal capaz de operar la pila actual\u003c/td\u003e\n\u003ctd data-label=\"Considerar una reimplementación con Rails u otra opción\"\u003eLas convenciones de Rails se adaptan mejor a la forma de trabajar del equipo\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Situación\"\u003eIntegraciones externas\u003c/td\u003e\n\u003ctd data-label=\"Mantener y reparar la estructura existente\"\u003eYa están operativas numerosas integraciones estables\u003c/td\u003e\n\u003ctd data-label=\"Considerar una reimplementación con Rails u otra opción\"\u003eLas integraciones están en una fase inicial o pueden sustituirse\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eNo se debe realizar una reescritura completa únicamente porque haya muchos archivos o existan errores. Una reescritura puede hacer que se pierdan casos excepcionales ya resueltos y crear nuevos defectos. Es preferible implementar primero un pequeño flujo vertical de las dos maneras y comparar la velocidad de desarrollo, la capacidad de prueba, la comprensión del código y los riesgos del despliegue.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#aspectos-que-deben-comprobarse-por-separado-antes-del-lanzamiento\" class=\"anchor\" id=\"aspectos-que-deben-comprobarse-por-separado-antes-del-lanzamiento\"\u003e\u003c/a\u003eAspectos que deben comprobarse por separado antes del lanzamiento\u003c/h2\u003e\n\u003cp\u003eAunque se cree una base de referencia en 4 horas, pueden quedar pendientes los siguientes aspectos.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRevisión del modelo de permisos y de la configuración de seguridad de Rails\u003c/li\u003e\n\u003cli\u003eFirma de webhooks de pago, prevención de duplicados y gestión de cancelaciones y reembolsos\u003c/li\u003e\n\u003cli\u003eMigración de datos operativos y verificación del número de registros y los totales\u003c/li\u003e\n\u003cli\u003eCopias de seguridad de la base de datos y prueba real de restauración\u003c/li\u003e\n\u003cli\u003eSeguimiento de errores, conservación de registros y monitorización de disponibilidad\u003c/li\u003e\n\u003cli\u003ePruebas de carga y estimación de costes\u003c/li\u003e\n\u003cli\u003eGestión de datos personales, términos de uso y revisión legal relacionada\u003c/li\u003e\n\u003cli\u003eComprobación de accesibilidad, navegadores y entornos móviles\u003c/li\u003e\n\u003cli\u003eProcedimiento de reversión en caso de incidentes y designación de responsables\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\n\u003ca href=\"#conclusi%C3%B3n\" class=\"anchor\" id=\"conclusión\"\u003e\u003c/a\u003eConclusión\u003c/h2\u003e\n\u003cp\u003eEl estancamiento de los proyectos de programación por vibra en sus etapas finales no puede explicarse únicamente por la capacidad de programación de la IA. Si en una configuración con un alto grado de libertad no se definen reglas, límites de responsabilidad, pruebas y criterios operativos, las soluciones locales creadas por la IA tienden a entrar en conflicto entre sí.\u003c/p\u003e\n\u003cp\u003eRuby on Rails puede ser una alternativa práctica que reduce ese grado de libertad mediante convenciones y una estructura integrada. Sin embargo, rehacer todos los proyectos con Rails no es la respuesta correcta. Primero se debe investigar la pila actual basándose en pruebas, definir el flujo principal y utilizar las 4 horas \u003cstrong\u003eno como tiempo para crear un producto terminado, sino como tiempo para verificar la estructura y establecer una base de referencia recuperable\u003c/strong\u003e.\u003c/p\u003e\n","tags":["Programación con IA","Programación por vibra","Ruby on Rails","Desarrollo web","Recuperación de proyectos"],"faqs":[{"question":"¿Por qué un proyecto de vibe coding avanza rápido al principio y se ralentiza en la fase final?","answer":"Al principio hay muchas tareas destinadas a crear flujos funcionales visibles, pero en la fase final se concentran los problemas que conectan múltiples capas, como los permisos, la consistencia de los datos, la recuperación ante fallos, los pagos, el despliegue y la seguridad. Si no hay reglas estructurales ni pruebas, las modificaciones locales añadidas por la IA pueden entrar en conflicto con el código existente y reducir aún más la velocidad."},{"question":"¿Usar la combinación de React, Next.js y Supabase conduce necesariamente a código espagueti?","answer":"No. Las tres tecnologías son herramientas con funciones claramente definidas, y un equipo experimentado puede crear servicios estables con ellas. El problema surge cuando se implementa la misma funcionalidad de forma redundante en varias capas sin definir las responsabilidades del acceso a los datos, la autenticación, las reglas de negocio y la gestión de errores."},{"question":"¿Cambiar a Ruby on Rails elimina la necesidad de todos los servicios externos?","answer":"No. Rails permite gestionar el acceso a los datos, el procesamiento de tareas, el correo, la comunicación en tiempo real, las pruebas y el despliegue dentro de un sistema coherente, pero aún pueden ser necesarios servicios externos como proveedores de pagos, infraestructura de envío de correo, alojamiento en la nube y monitorización."},{"question":"¿Es realmente posible rehacer toda la aplicación en solo 4 horas?","answer":"No se puede garantizar de forma general. Si los requisitos y el modelo de datos están definidos, el flujo principal tiene un alcance muy limitado, las cuentas externas y el entorno de despliegue están preparados, y una persona experimentada revisa los resultados de la IA, se puede crear una base funcional o un pequeño MVP. La seguridad de nivel operativo, la gestión de excepciones en los pagos, la migración de datos y la respuesta ante incidentes suelen requerir tiempo adicional."},{"question":"¿Qué señales indican que se debe descartar el código existente y reescribirlo?","answer":"Se puede considerar una reimplementación si las reglas de negocio fundamentales están duplicadas en varios lugares, las modificaciones pequeñas siguen rompiendo funciones no relacionadas, no hay pruebas automatizadas y todavía hay pocos datos, por lo que el coste de migración es bajo. Si hay muchos datos operativos e integraciones externas estables, o si la estructura actual cuenta con pruebas, una reparación gradual puede ser más segura."},{"question":"¿Cómo se le debe pedir a la IA que investigue la pila tecnológica del proyecto actual?","answer":"Se le debe pedir que lea los archivos de paquetes, los archivos de bloqueo, el esquema de la base de datos, el código de autenticación, las rutas de la API, la configuración de despliegue y los archivos de pruebas, y que cree una tabla con la función de cada tecnología y los archivos que la justifican. Es recomendable indicarle que no modifique el código de inmediato, que no muestre valores secretos y que también señale las reglas de negocio duplicadas y las posibles infracciones de los límites entre componentes."},{"question":"¿Qué funcionalidad debe implementarse primero en un trabajo de recuperación de 4 horas?","answer":"Se debe elegir un único flujo principal de usuario que represente el valor del servicio. No basta con crear las pantallas: hay que conectarlo con la autenticación, la validación del servidor, el almacenamiento de datos y la gestión de fallos, y probar las condiciones tanto para usuarios legítimos como para usuarios no autorizados, a fin de evaluar rápidamente la validez de la estructura."},{"question":"¿Usar Rails resuelve automáticamente los problemas de seguridad?","answer":"No. Rails proporciona diversos valores predeterminados y mecanismos de protección de seguridad, pero no evita automáticamente la falta de controles de permisos, la exposición de información secreta, las integraciones externas vulnerables ni las configuraciones de despliegue incorrectas. Es necesario seguir la guía de seguridad del framework y revisar por separado los permisos y los flujos de datos específicos de cada aplicación."}],"sources":[{"url":"https://react.dev/learn","title":"Aprende React","type":"source"},{"url":"https://nextjs.org/docs","title":"Documentación de Next.js","type":"source"},{"url":"https://supabase.com/docs","title":"Documentación de Supabase","type":"source"},{"url":"https://rubyonrails.org/doctrine","title":"La doctrina de Rails","type":"source"},{"url":"https://guides.rubyonrails.org/","title":"Guías de Ruby on Rails","type":"source"},{"url":"https://guides.rubyonrails.org/active_job_basics.html","title":"Conceptos básicos de Active Job","type":"source"},{"url":"https://guides.rubyonrails.org/action_mailer_basics.html","title":"Conceptos básicos de Action Mailer","type":"source"},{"url":"https://guides.rubyonrails.org/action_cable_overview.html","title":"Descripción general de Action Cable","type":"source"},{"url":"https://guides.rubyonrails.org/security.html","title":"Guía de seguridad de Ruby on Rails","type":"source"},{"url":"https://guides.rubyonrails.org/testing.html","title":"Guía para probar aplicaciones Rails","type":"source"}],"images":[{"id":359,"url":"https://injoys.com/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDI0OSwicHVyIjoiYmxvYl9pZCJ9fQ==--671c6671ab2b4dd55a12c8db4a32cd95021e1402/ai-ff797ac5.webp","is_representative":true,"generation_method":"ai_image","license":"ai_generated","mime_type":"image/webp","translations":{"ko":{"alt":"얽힌 시스템 연결망과 정돈된 계층 구조 사이에 서 있는 개발자","caption":"복잡하게 얽힌 프로젝트를 명확한 계층 구조로 재정비하는 과정을 보여준다.","description":null},"en":{"alt":"Developer standing between tangled system connections and an orderly layered architecture","caption":"The illustration shows a tangled project being reorganized into a clear layered structure.","description":null},"ja":{"alt":"絡み合うシステム接続と整然とした階層構造の間に立つ開発者","caption":"複雑に絡んだプロジェクトを明確な階層構造へ整理する過程を表している。","description":null},"es":{"alt":"Desarrollador entre conexiones de sistema enredadas y una arquitectura ordenada por capas","caption":"La ilustración muestra un proyecto enredado que se reorganiza en una estructura clara por capas.","description":null},"id":{"alt":"Pengembang berdiri di antara koneksi sistem kusut dan arsitektur berlapis yang rapi","caption":"Ilustrasi ini menunjukkan proyek yang kusut sedang ditata ulang menjadi struktur berlapis yang jelas.","description":null},"pt":{"alt":"Desenvolvedor entre conexões de sistema emaranhadas e uma arquitetura organizada em camadas","caption":"A ilustração mostra um projeto emaranhado sendo reorganizado em uma estrutura clara de camadas.","description":null},"zh-hant":{"alt":"開發者站在糾結的系統連線與井然有序的分層架構之間","caption":"插圖呈現將混亂糾結的專案重新整理為清晰分層架構的過程。","description":null},"de":{"alt":"Entwickler zwischen verworrenen Systemverbindungen und einer geordneten Schichtenarchitektur","caption":"Die Illustration zeigt, wie ein verworrenes Projekt in eine klare Schichtenstruktur überführt wird.","description":null}}},{"id":360,"url":"https://injoys.com/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDI1NSwicHVyIjoiYmxvYl9pZCJ9fQ==--dd1b9b18b3b924f01625710e0b4bafd8fbbd0002/ai-74d32191.webp","is_representative":false,"generation_method":"ai_image","license":"ai_generated","mime_type":"image/webp","translations":{"ko":{"alt":"무너진 절벽과 견고한 플랫폼 사이의 다리를 수리하는 개발자들과 보안·배포 아이콘","caption":"개발자들이 불안정한 프로젝트 구조를 보강해 안정적인 시스템으로 복구하는 과정을 보여준다.","description":null},"en":{"alt":"Developers repairing a bridge between a crumbling cliff and a stable platform, with security and deployment icons","caption":"Developers reinforce a fragile project structure to restore it as a stable system.","description":null},"ja":{"alt":"崩れた崖と安定した基盤を結ぶ橋を修復する開発者と、セキュリティやデプロイのアイコン","caption":"開発者が不安定なプロジェクト構造を補強し、安定したシステムへ復旧する過程を表している。","description":null},"es":{"alt":"Desarrolladores reparan un puente entre un terreno agrietado y una plataforma estable con iconos tecnológicos","caption":"Los desarrolladores refuerzan una estructura frágil para recuperar un sistema estable.","description":null},"id":{"alt":"Pengembang memperbaiki jembatan antara tebing retak dan platform kokoh dengan ikon keamanan dan deployment","caption":"Para pengembang memperkuat struktur proyek yang rapuh untuk memulihkan sistem yang stabil.","description":null},"pt":{"alt":"Desenvolvedores consertam ponte entre penhasco rachado e plataforma estável, cercados por ícones de tecnologia","caption":"Desenvolvedores reforçam uma estrutura frágil para recuperar um sistema estável.","description":null},"zh-hant":{"alt":"開發人員修復連接崩裂懸崖與穩固平台的橋梁，周圍有安全與部署圖示","caption":"開發人員加固脆弱的專案結構，使其恢復為穩定的系統。","description":null},"de":{"alt":"Entwickler reparieren eine Brücke zwischen brüchiger Klippe und stabiler Plattform, umgeben von Technik-Symbolen","caption":"Entwickler verstärken eine fragile Projektstruktur und stellen ein stabiles System wieder her.","description":null}}}],"published_at":"2026-07-30T13:43:49+09:00","updated_at":"2026-07-30T13:43:49+09:00","license":"cc_by","translation_status":"reviewed","available_locales":["ko","en","ja","es"],"data_locales":["ko","en","ja","es","id","pt","zh-hant","de"],"url":"https://injoys.com/es/articles/vibe-coding-project-architecture-and-four-hour-rescue-sprint"}