- ProblemaSubí a producción la aplicación que hicieron los agentes, encontré lo que su despliegue dejaba abierto y cobré las primeras cuotas.
En el primer capítulo comprobé que cuatro técnicos pagaban una plaza de fundador por un portal de avisos para sus clientes, y en el segundo lo construí con agentes hasta tenerlo completo en mi máquina, con 48 horas ya gastadas de las 60 que me había dado. Este capítulo cubre las dos semanas de sacarla de casa y ponerla delante de internet, y los primeros quince días cobrando a gente de verdad. Era la parte que más miedo me daba. Con razón.
De la idea a cobrando en un día
La promesa aquí es de las más repetidas: «de la idea a publicada y cobrando en un día». En los vídeos, el final es un botón de «desplegar», una dirección que ya funciona y una notificación de pago con sonido de caja registradora. Lo de detrás no sale.
Yo creía tener ventaja. Tengo seis VPS funcionando desde hace años y una rutina para configurar uno nuevo. La aplicación iba a uno de los dos que ya llevan servicios de clientes, con su cortafuegos, sus copias y todo lo básico en su sitio. Solo había que meterla dentro.
Siguiendo solo las instrucciones del agente
Hice una prueba a propósito: le pedí al agente que preparara todo para desplegar la aplicación en un servidor Ubuntu con Docker, y una guía paso a paso para mí. La seguí tal cual. Docker es una forma de empaquetar una aplicación con todo lo que necesita para que funcione igual en cualquier máquina. En teoría.
La guía tenía once pasos claros: copiar el proyecto, crear la configuración, levantar la aplicación y la base de datos, poner delante el servidor web con su certificado. A la segunda noche la aplicación estaba en marcha en su dirección, con candado y todo. Casi la promesa.
Hasta que me senté a revisarlo con mi propia lista.
Lo que el despliegue dejaba abierto
Secretos en el código. La clave secreta de la aplicación, la contraseña de la base de datos, la de la cuenta de correo y la clave de la pasarela de pago estaban en el fichero de configuración, guardado en el historial del repositorio. Un secreto es cualquier dato que da acceso a algo, y no debe estar nunca en el código, porque el código se copia y se comparte.
El modo de depuración encendido. La aplicación seguía en el modo pensado para programar, que cuando falla enseña rutas, versiones y trozos de código. Útil en casa; un regalo para cualquiera que husmee en un servidor público.
Permisos de más. El contenedor corría como administrador, el usuario de la base de datos podía borrarla entera y la carpeta de adjuntos la podía escribir cualquiera. Nada de eso hacía falta; estaba así porque es como menos cosas fallan mientras pruebas.
La base de datos abierta a internet. El susto de verdad. Desde otro de mis VPS lancé un escaneo de puertos, como hago siempre, y apareció el de PostgreSQL abierto al mundo. Mi cortafuegos lo tenía cerrado, pero cuando Docker publica un puerto escribe sus propias reglas de red, que pasan por delante del cortafuegos sencillo que uso en Ubuntu. La guía lo publicaba «por si necesitas conectarte desde fuera». Estuvo abierto unas treinta horas; en el registro había intentos de conexión fallidos desde direcciones desconocidas. Ninguno entró, que yo sepa. Otra vez ese «que yo sepa» que ya salió en por dónde me vinieron los golpes al publicar la web.
Lo que solo funcionaba en mi máquina. Rutas de ficheros escritas al estilo de Windows, las horas de los avisos con dos horas de diferencia porque el servidor va en hora universal, y la aplicación sin estilos al apagar el modo de depuración.
Con el agente ayudando en el código y yo haciendo lo del servidor, en cuatro tardes quedó cerrado: secretos fuera del repositorio y todos cambiados, depuración apagada, la base de datos sin puertos publicados, cada usuario con los permisos justos, rutas y zona horaria corregidas con tres pruebas nuevas para que no vuelvan, y la copia diaria de la base de datos dentro de la copia nocturna que baja a casa, con una restauración de prueba hecha. El agente no tuvo en ningún momento acceso al VPS: preparó ficheros y guías en mi máquina y los pasos en el servidor los di yo, como conté en qué corre en cada una de mis máquinas.
El pago que se activaba sin pagar
Faltaba lo que no tenía el despliegue de una herramienta interna: el cobro. Y ahí estaba el fallo más feo del reto.
Probando la pasarela en modo de prueba, todo iba bien: el técnico elegía la suscripción, pagaba con una tarjeta de pruebas y volvía a la aplicación con la cuenta activada. Pero, siguiendo mi costumbre de pedirle a una segunda sesión del agente que revisara lo delicado, me señaló algo: la cuenta se activaba al llegar a la página de «pago completado», no cuando la pasarela confirmaba el cobro. Cualquiera que conociera esa dirección podía activarse la suscripción sin pagar.
La forma correcta es que sea la pasarela la que avise a tu servidor, con un mensaje firmado, de que el cobro se ha hecho, y que la aplicación compruebe esa firma antes de activar nada. Lo rehízo así, y añadimos pruebas para tres casos: pago correcto, pago fallido y alguien que llega a la página de éxito sin haber pagado. De paso salió que tampoco gestionaba las bajas: una suscripción cancelada seguía activa para siempre.
Ninguno de esos dos fallos se ve usando la aplicación. Todo funcionaba. Justo por eso son de los problemas de los agentes que más me preocupan: el agente hizo lo que le pedí, que cobrara, y no lo que no le pedí, que no se pudiera no cobrar.
Los papeles
Cobrar a otros técnicos por guardar los avisos de sus clientes tiene una parte que no es código. Con Claude redacté las condiciones del servicio, la política de privacidad y un contrato de encargo del tratamiento, porque trato datos de clientes que no son míos, y lo llevé a la gestoría, como hice con el negocio. Me devolvió tres cosas que cambiar, entre ellas cuánto tiempo guardo los avisos cuando un técnico se da de baja. Lo general sobre esto lo tengo en es legal lo que hago con la inteligencia artificial; lo mío, sin revisar por un abogado, lo marco como lo que es.
Los primeros usuarios de pago
Siete semanas después de cobrar las plazas de fundador, una antes del plazo que me había dado, di de alta a los fundadores. Una hora con cada uno, por teléfono, para dar de alta a sus clientes.
- Tres empezaron a usarla esa misma semana.
- El cuarto me pidió la devolución: mientras esperaba, había empezado a usar una herramienta gratuita y no quería cambiar otra vez. Se la devolví entera, como había prometido.
- Un técnico que había visto la página y no había reservado se apuntó a la prueba gratuita de catorce días y, al acabarla, pagó la primera cuota de 12 euros. El primer cliente que no me conocía de antes. Lo celebré más de lo que admito aquí.
Antes de abrir la puerta pasé mi lista de despliegue, la que escribí esa semana y que ahora aplico a todo:
- Ningún secreto en el código ni en el historial.
- Modo de depuración apagado.
- Escaneo de puertos desde fuera: solo abiertos los de la web y el acceso remoto.
- Nada corre como administrador sin necesidad.
- Zona horaria, rutas y ficheros estáticos comprobados en el servidor.
- Copias programadas y una restauración probada.
- Pruebas automáticas ejecutadas en el servidor antes de abrir.
- Probado con dos cuentas de técnico: cada una ve solo lo suyo.
- El pago solo se activa con la confirmación firmada de la pasarela, y las bajas se gestionan.
La seguridad de una página web no se hereda del servidor: una aplicación insegura en un servidor bien cerrado sigue siendo insegura.
Veredicto del lanzamiento
¿De la idea a cobrando en un día? Publicada, sí, en dos noches. Publicable y cobrable, no. Lo que me dio el agente era un despliegue pensado para funcionar, no para resistir, y un cobro pensado para cobrar, no para no dejarse engañar. Tiene sentido: es lo que le pedí.
Qué delego ahora en el paso a producción: preparar ficheros, guías y la revisión de mi configuración. Qué no: los secretos, los permisos, lo que queda abierto a internet, cómo se activa un pago y la decisión de abrir la puerta. Lo amplío en lo que no le dejo tocar a un agente de programación.
Cuentas del capítulo: 22 horas: 11 de despliegue y arreglos en el servidor, 5 de pagos y su revisión, 3 de papeles y 3 dando de alta a los fundadores. Acumulado desde la primera línea de código: 70 horas, frente a las 60 que me propuse. Clientes de pago: cuatro, tres fundadores y uno de cuota mensual. Quedaba ver cuánto dinero dejaba todo esto.
Alternativas de la comunidad 0
Todavía nadie ha propuesto una alternativa a este caso. Puedes ser quien empiece.
Proponer una alternativa