He pensado en este blog durante dos años.
Decir “querer” no es del todo exacto, es más bien una obsesión. En los primeros tiempos, cuando aún no sabía programar front‑end ni back‑end y tampoco código embebido, surgió esa necesidad. Estaba jugando con electrónica y, por casualidad, descubrí el video de B‑Station y el sitio web de @ushio; me pareció muy divertido y quise probarlo también. Después pasé medio año aprendiendo desde cero C y un poco de JS/CSS, y usando Hexet creé un blog estático que desplegué en GitHub Pages, lo que puede considerarse mi pequeño espacio propio.


再后来,看到了 @Innei 的小站,设计很精致、功能也很全,当时的我看了一眼我就想要,甚至还赞助支持了,虽然后面没用上但是这钱也花的不怨 因为我摸到了 React 源码,就和我最初看到 C 一样,不过就是代码嘛,有什么大不了的,总有一天我要自己写一个。

Después, descubrí el pequeño sitio de @Innei; su diseño es muy refinado y sus funciones están muy completas. En el momento lo miré y me lo quise al instante, incluso lo patrociné. Aunque luego no lo utilicé, no me arrepiento del dinero gastado porque pude acceder al código fuente de React, lo que me recordó a la primera vez que vi C: al fin y al cabo es solo código, nada de gran cosa. Estoy seguro de que algún día escribiré el mío propio.
Bosque tranquilo
Eso fue en el año 2024, luego 24, 25, 26 años hasta ahora
Desde entonces no puede detenerse.
Fuera de control
Al principio solo quería añadir un interruptor claro/oscuro al tema Hexo Nlvi de @colmugx. Pegué un JavaScript al estilo Dark Reader, quedó feo y no me satisfizo. Después aprendí CSS @media, pasé a un cambio SPA con JS, probé la clase .dark de TailwindCSS, luego el SSR con next‑theme y, al final, armé manualmente un script inline de Cookie + Head Sync para eliminar el parpadeo FOUC. Terminé probando entre cuatro y cinco soluciones.

Pero eso es solo la punta del iceberg. Tras descubrir React, pasé de la era de piedra de Hexo y Vanilla JS a Next.js 13 Page Router, luego me volqué a Vue, estudié el enrutamiento SPA, comprendí el fallback de index.html y creé innumerables proyectos nuevos. Compré un servidor, jugué con Docker, Nginx, NAS; al considerar feo a 1Panel, escribí a mano el panel Canopy, investigué arreglos de almacenamiento NAS y escribí RFS. Al manejar SSL, el entorno local hacía que acme.sh fuera tan frustrante que terminé escribiendo un proxy inverso en Rust: Vane & Lazyacme. Lo que empezó como un proyecto de ocho‑cientos líneas escrito en tres horas una noche se transformó, tras el impulso de un amigo, en cuatro meses de trabajo, empaquetando HTTP/3, Zero‑Copy, el modelo Layer y el motor Flow. Más adelante está también Seam, un framework full‑stack que es otro verdadero quebradero de cabeza; lo dejaré para otra ocasión.
Sobreingeniería
Entonces llegó la era de la IA, y la ansiedad se duplicó.
Lo más irónico es que estas cosas debían hacerse después de crear un blog, registrándolas mientras se trabajaba en ellas. Pero el blog fue abandonado una y otra vez, las ideas se fueron acumulando y no había ningún lugar donde anotarlas. Por un lado mi interior me reprocha; prometí terminar Vane, pero no pude, tuve que detenerme. Por otro lado siento una creciente impotencia a medida que me alejo cada vez más. Siempre recuerdo lo que quiero hacer, pero simplemente no lo consigo. Si lo pienso bien, hace mucho que no me siento a escribir nada. Al mirar atrás, todo apunta a lo mismo: el sobre‑ingeniería.
En ese momento, en realidad no sentía que me estuviera desviando. ¿Vane? De todos modos, el blog tendrá que desplegarse más adelante, así que necesitaré un proxy inverso. ¿Seam? Dado que tarde o temprano tendré que escribir una aplicación full‑stack, mejor montar primero el framework que imagino. Cada paso tiene una razón, cada paso es « útil en el futuro ». Pero el problema es que « en el futuro » nunca llega, porque nunca he empezado…
Fallo
Hacer un blog en realidad no requiere un proxy inverso ni un framework propio. Sin embargo, en aquel momento los consideraba como condiciones previas, como una excusa siempre bloqueante pero razonable, aunque nunca lo fueron. La única condición previa real es una sola: sentarte y escribir el primer artículo.
En realidad, el blog no está sin tocar; al contrario, lo he hecho tres veces.

La primera vez fue cuando todavía estaba el Next.js 13 Page Router. En ese momento apenas entendía qué era una SPA, y los conceptos SSR, SSG, ISR no los tenía claros en absoluto, pero como los demás decían que el SSR era bueno, yo también quise usarlo. A medida que escribía, descubrí que realmente no comprendía qué problemas resolvían esas arquitecturas y no podía seguir. Después cambié a una SPA pura con Vue 2. ¿Por qué Vue? La verdad es que me gustó el nombre, parecía nuevo, así que lo probé. No duró mucho. La tercera vez volví a React, empezando con JSX simple, aprendí TypeScript, dominé TSX, entendí la diferencia entre CJS y ESM, me enamoré de la programación reactiva y comencé a usar Lucide, Framer Motion, Radix UI, bibliotecas de las que ahora no puedo prescindir; esta vez finalmente tenía algo con forma. Pero aun así fracasé, porque en esencia solo estaba imitando: tomaba lo que otros usaban, parecía estar bien, pero en realidad no entendía por qué se hacía de esa manera. Además, con las alucinaciones de la IA, se podía montar un MVP, pero al escalar todo era una mina de problemas.

Más tarde también aprendí React (Remix) Router Loader, Next.js 15 App Router y RSC, pero en ese momento mi vida diaria ya estaba muy ocupada, apenas tenía tiempo para programar y ni siquiera tuve la oportunidad de fallar por cuarta vez. Ahora que lo recuerdo, mi sitio pasó de Next.js 13 a Next.js 15; acababa de terminar la migración y, antes de lanzarlo, salió Next.js 16 beta‑1.
Dejar ir
Decir "想开了" en realidad no es preciso; es que estoy cansado/a.

El ritmo de la era de la IA es demasiado rápido. Los modelos se iteran uno tras otro, nuevas tecnologías aparecen una tras otra, y cada vez estoy más ansioso, como si detenerme significara ser superado. En mi momento más loco escribí 16 pequeños fragmentos de código en un día; los tokens podían quemar 1,9 k USD en un día (aproximadamente en febrero), y estaba al borde del colapso. Pero lo que hizo que todo se detuviera no fue alguna revelación, simplemente el cansancio puro. En un ritmo cada vez más acelerado, la última paja cayó y, al contrario, me sentí aliviado, me abrí, abandoné la lucha; de esa forma, está bastante bien.
He empezado a soltar. He dejado atrás las cosas a las que antes me aferraba, he aprendido a detenerme a tiempo, y lo de mañana lo dejo para mañana. ¿Vane no está terminado? Lo dejo por ahora. ¿Seam todavía está lejos? Lo haré después. ¿El blog no es perfecto? Primero lo pongo en línea. Empieza a hacer Vibe Coding por completo; si no hay problema no lo toques, si lo hay, lo abordarás después.
Curiosamente, la calidad no empeoró después de soltar el control. Supongo que se debe a que esos días de programación « 古法 » no fueron en vano; ya en la era de GPT‑2 comencé a usar IA, pero entonces todavía escribía cada línea de código con dedicación y comprendía cada concepto. Esa experiencia me dio una base, y más que llamarlo Vibe Coding después, debería llamarse Context Coding; la capacidad de juicio necesaria sigue ahí, y dejar ir no provocó errores básicos ni accidentes.
Todas las luchas anteriores me dieron el capital para poder soltar ahora.
Origen
La solución final es en realidad muy sencilla: All in Cloudflare. Almacenamiento de objetos R2, base de datos D1 Edge, KV para caché, Worker ejecuta SSR, todo es serverless, no hay servidores.

¿Esta respuesta es sarcástica? Muy sarcástica. Porque antes de llegar a este punto “simple”, di una vuelta completa dando rodeos. En su momento planeé montar todo por mi cuenta, por lo que tuve que administrar el servidor, trastear con Docker y gestionar los contenedores, así que escribí Canopy como panel de gestión, Lazycert para los certificados, Vane como proxy inverso y Twig para los puntos de monitoreo de recursos. Un montón de proyectos, solo para atender a un servidor de chatarra.
El almacenamiento es igual. Como me parece caro el almacenamiento de objetos, quise usar los discos duros de mi propio servidor, así que escribí RFS, un VFS para la deduplicación atómica y la fusión de archivos únicos, incluso reviviendo el concepto de registro de los años 80‑90, y finalmente lo monté a través de FUSE. ¿El resultado? Pasé más tiempo construyendo una rueda que no era muy buena, el servidor estuvo inactivo durante un año, y fue un negocio completamente perdedor.

Al final, después de dar muchas vueltas, termino volviendo al serverless. El concepto de Vercel es bueno, pero no me gusta Next.js; además, Vercel tiene demasiada “magia” y el diseño del middleware que se compila por adelantado para ejecutarse en el Edge termina fragmentado, incluso provocando varios CVE. Sería mejor que todo estuviera en el origen. Por otro lado, Cloudflare Workers es excelente, alcanzando otro extremo: compilar productos de menos de 10 MB a WASM permite ejecutar lógica de negocio real en el Edge, que es justo lo que quiero. Aparte del gasto, no tiene verdaderos defectos, aunque técnicamente no es un defecto, ya que el tiempo ahorrado equivale a dinero.
Menos es más
He escuchado esta frase innumerables veces, pero me tomó dos años comprender verdaderamente su significado.
La esencia de volver a la ingeniería es: “Make it function, make it correct, then make it exceptional.” Finalmente encontré el camino correcto y lo hice functional. ¿Mi blog es sencillo? Sí, sencillo. ¿Incompleto? Sí, incompleto. Pero sigue siendo mejor que nada. Si ni siquiera tienes una versión en línea y sigues trabajando en algo que es “quizá necesario”, persiguiendo una perfección invisible, acabarás sin nada que mostrar. No es una concesión, es una elección de ingeniería. En fin, lo he aceptado. Así que lo he aceptado. Ya no me aferro a un detalle y, en cambio, salí. Mi galería del móvil lleva mucho tiempo sin fotos al aire libre, así que tomé rápidamente una foto del borde de la carretera—hace mucho que no salgo.

Al mirar atrás los desvíos que tomé antes, ¿lo lamento? No, no lo lamento. Algunas cosas, si no las intentas tú mismo, quizás nunca las entenderás. Más aún, en la era de la IA, intentar seguir el camino antiguo que yo recorría ya no es prácticamente posible; demasiados flujos de trabajo ya se han transformado. Además, este proyecto es Taki, 100 % codificación con IA, pero eso no significa que no pueda mantenerse a largo plazo, ni que carezca de un toque humano. En realidad, si hay IA o no no es importante; además, lo que me gusta no es tanto escribir código en sí, sino crear algo…