Saltar al contenido
KHEN / ES
Menú
Todos los posts

Publicado 25 set. 2026

Reconstruyendo kennyhorna.com en más o menos una hora

De la idea a una primera versión en más o menos una hora, con agentes de IA. Pulirlo tomó más, y ahora todo corre en Cloudflare sin pagar ni un sol al mes.

La primera versión de este sitio tomó más o menos una hora, desde “debería rehacer mi web” hasta algo que ya se podía navegar. No lo digo para presumir (bueno, un poquito). Lo digo porque la hora no es lo interesante.

Lo que puse yo

Un brief. Quién soy, qué he construido y cómo quería que se sintiera el sitio: brutalista, claro, con algo de humor, pero mostrando resultados. Tres colores. Un chiste de fondo para colgar todo: cada sección responde con un código HTTP, mi carrera es una lista de migraciones de base de datos, los side projects son una tabla de procesos y los que murieron descansan en un cementerio. Y una lista de cosas que nunca se publican, que importa más de lo que parece cuando el que escribe el código es un agente.

Los tres colores no duraron ni la semana. Empezó siendo papel, cacao y ají amarillo. Ahora es papel, oliva y rosado chicle. La misma onda, pero ya nadie me pregunta si el sitio es la carta de una cevichería.

Lo que pusieron los agentes

Velocidad. Astro, Tailwind, dos idiomas con sus propias URLs, SEO, datos estructurados, RSS y una cocina escondida detrás del código Konami. Lo que más me gusta es el retrato: un script me recorta de una foto con el framework Vision de Apple y el build lo hornea dos veces, una tramada con los tres colores del sitio y otra en duotono suave. En tu navegador, una franja de ASCII en vivo lo recorre y cambia una versión por la otra.

La mayor parte de ese código no la escribí yo. La revisé, discutí con ella y decidí qué se quedaba.

Después, pulirlo, que tomó bastante más

Con una hora tienes una primera versión. Después la abres en el celular.

  • El título de un caso de estudio, INTEGRACIONES, era más ancho que la pantalla y arrastraba toda la página hacia un costado. Quince páginas tenían el mismo problema.
  • La línea de tiempo de mi carrera tenía una animación que esperaba a que se viera el 35 % de la lista. En un celular chico la lista es tan alta que eso nunca pasa, así que todos mis trabajos se quedaban en PENDING para siempre. Muy fiel a una migración, no tanto a un CV.
  • Los dos botones del header tenían alturas distintas. Nadie lo habría notado. Yo lo noté.
  • El menú decía HOLA para la página sobre mí, y sonaba raro. Ahora dice SOBRE MÍ.

Nada de eso es difícil. Es el trabajo que solo aparece cuando una persona usa la cosa de verdad, y esa parte sigue siendo mía.

También rescaté lo mejor de mi blog anterior: seis agentes en paralelo, cada uno migrando un post, cada uno sacando las capturas que mostraban la IP real de un servidor o una contraseña, y uno de ellos avisándome con mucha educación que una convención de nombres que publiqué en 2020 estaba mal. (Lo estaba. Las tablas pivote van en orden alfabético.)

Dónde vive: Cloudflare, por cero soles

El kennyhorna.com anterior era una app de Laravel en un servidor. Cuando por fin moví el dominio, ese servidor le respondía a todo con un 525. Muy temático, pero no es el código que yo elegiría para una portada.

El nuevo es una carpeta de archivos estáticos, y Cloudflare lo corre todo en el plan gratuito:

  • Hosting. Los archivos salen de la red de Cloudflare, desde la ciudad que te quede más cerca. No hay servidor, no corre código en cada visita y no hay nada que parchar a las dos de la mañana.
  • Despliegues. Hago push a main, Cloudflare construye el sitio y a los pocos minutos está en vivo. El plan gratuito trae 3000 minutos de build al mes. Yo uso como cuatro.
  • Caché. Todo archivo con huella del build se guarda en caché por un año. El HTML se revalida en cada visita, así que un despliegue se ve al toque. Nada de purgar caché ni de “¿probaste con Ctrl+F5?”.
  • Seguridad. HTTPS en todo, TLS 1.2 como mínimo y ninguna base de datos, panel de admin ni login que atacar. La superficie de ataque es una carpeta de HTML.
  • El dominio. Pasé el registro de Namecheap a Cloudflare, que vende dominios a precio de costo. Hasta ahora el servicio ha sido buenísimo, y la atención al cliente también. Ahora el dominio es lo único que pago, una vez al año.
  • Correo. hello@kennyhorna.com y hola@kennyhorna.com no tienen buzón detrás. Email Routing reenvía los dos a mi correo personal. Mis cuentas de Google Workspace pasaban por Namecheap, y en mi experiencia cambiar la cantidad de licencias era una odisea cada vez. Ahora no hay licencias que cambiar. Es una cuenta de Workspace que no pago, todos los meses, para siempre. Las respuestas llegan igual de rápido que antes, o sea, “ya te escribo”.

El resto de mis dominios los estoy sacando de Namecheap igual, de uno en uno. Sí, como migraciones.

Este es todo el setup de hosting:

wrangler.jsonc
{
"name": "kennyhorna",
"compatibility_date": "2026-09-25",
"assets": {
"directory": "./dist",
"html_handling": "auto-trailing-slash",
"not_found_handling": "404-page"
},
"routes": [
{ "pattern": "kennyhorna.com", "custom_domain": true },
{ "pattern": "www.kennyhorna.com", "custom_domain": true }
]
}

¿Es exagerado usar una red global para un sitio con menos de 50 visitas al mes? Totalmente. Cloudflare podría atender a todo el público mensual de este sitio antes de que termines esta oración. Hola, por cierto. Tú eres parte.

El stack de esta semana

Los agentes son Claude Code y Codex, con fal y ElevenLabs para imágenes y audio. Solo los corre, junto con los servidores de desarrollo y las listas de pendientes que comparten. Un grafo de conocimiento del repo les ahorra releer todo en cada tarea.

Modelos no listo. Para cuando leas esto ya salió uno más nuevo, y mi agente igual va a jurar que el suyo es el último. Las herramientas las elijo al arrancar cada proyecto, según lo que de verdad le sirva ese mes.

Con qué me quedo

La IA achica casi a cero la distancia entre una idea y una primera versión. Eso no hace desaparecer las decisiones: las vuelve todo el trabajo. Qué construir, qué cortar y cuándo está suficientemente bien para salir. La hora la pusieron los agentes. El criterio, y el celular en la mano, los puse yo. Y la cuenta mensual, por una vez, no la paga nadie.