Notas
Blog
Notas sobre ingeniería frontend, SEO, IA, analítica y el trabajo de lanzar productos reales.
42 artículos
Mi VPS de AVA Hosting promedió un 32,73 % de CPU steal pese a «Recursos garantizados — sin compartir»
Mi VPS KVM de AVA Hosting registró un 32,73 % de CPU steal de media, 0 % de CPU idle y cerca de un 99 % de presión de CPU con tráfico real de producción. No es una reseña negativa, sino el relato técnico de lo que Linux mostró realmente dentro de la máquina virtual.
Mi VPS de FDCServers funcionó bien con más de 3 TB de tráfico. Después, las lecturas de disco empezaron a tardar 18 segundos
Mi VPS de FDCServers manejó tráfico real con normalidad y transfirió más de 3 TB de datos antes de que aparecieran los problemas. Después, una carga normal empezó a provocar bloqueos graves del disco virtual: el CPU iowait llegó al 100%, la presión de I/O de Linux rozó el 100%, las lecturas alcanzaron 18,7 segundos y los flush superaron los 53 segundos.
Mi VPS de REGXA mostró un 94 % de CPU steal incluso sin tráfico
Al investigar graves problemas de rendimiento en un VPS KVM de REGXA encontré un 92–94 % de CPU steal, solicitudes a localhost que tardaban segundos, colas de conexiones crecientes y respuestas HTTP 504 de más de dos minutos. Tras retirar todo el tráfico de producción, el CPU steal subió al 94,17 %, y REGXA terminó atribuyéndolo a contención de recursos en su infraestructura compartida.
Dos meses con Bunny Storage detrás de Nginx: por qué moví imágenes, vídeo y audio a un servidor multimedia propio
Durante dos meses usé Bunny Storage como origen privado detrás de mi propia caché Nginx, no a través de Bunny CDN. Los logs de producción mostraron latencias extremas y timeouts en contenido frío, además de un problema independiente en MP4 con Nginx Slice y ETag inconsistentes; terminé migrando a un origen multimedia privado y mucho más simple.
SSIMULACRA2 al convertir WebP a AVIF: por qué uso 60 para fuentes y 65 para derivados con pérdida
Cuando genero AVIF a partir de un WebP que ya fue comprimido con pérdida, SSIMULACRA2 solo mide la segunda generación de degradación. Por eso uso 60/58 para fuentes limpias y 65/63 para derivados con pérdida conocidos.
DeepSeek subió sus precios — encontré el mismo V4 Flash más barato que su tarifa antigua
El 17 de agosto vi que mi gasto en la API de DeepSeek había subido a aproximadamente cinco veces lo habitual. Después encontré y probé otro proveedor que ofrece el mismo checkpoint DeepSeek-V4-Flash-0731 a precios cerca de un 45% inferiores incluso a las antiguas tarifas de DeepSeek.
Cómo convierto WebP animados, GIF y APNG a H.264 MP4 sin romper los fotogramas ni la temporización
Mi flujo de producción reconstruye los fotogramas completos que realmente ve el usuario, conserva la temporización original, elige un único CFR para cada MP4 final, calcula el lienzo común más pequeño sin ampliar, codifica segmentos H.264 compatibles, los concatena sin una segunda codificación con pérdida y valida tanto el archivo como su entrega por HTTP. En una ejecución medida, 217 WebP animados que sumaban 1,49 GB se convirtieron en un único MP4 H.264 de 78,49 MB.
Alertaba por todo: cómo convertí el ruido de errores del navegador en monitorización útil de producción
Mi sistema de reporte del frontend trataba igual los bloqueos de anuncios, los fallos de GTM, AbortError, los Script error opacos y los fallos reales de chunks de Next.js. Reorganicé las alertas según la propiedad del recurso, el impacto en el usuario, la calidad de la evidencia, la correlación y la recuperación.
Por qué las pestañas antiguas de Next.js se rompen después de un despliegue: HTML obsoleto, chunks ausentes y desfase de versiones
Después de un despliegue, mi monitorización de producción registró el fallo de carga de un chunk propio de Next.js. El registro demostraba el fallo, no su causa. A partir de ese incidente, el artículo explica las pestañas antiguas, el HTML obsoleto, los recursos /_next/static ausentes, el desfase de versiones, la retención, deploymentId, el orden de despliegue, la monitorización y la recuperación controlada.
El tick que rompió mi CFR: por qué 5580 no era 5625 y 3751 no era 3750
Mi validador rechazó repetidamente un MP4 a 16 fps porque un paquete duraba 5580 ticks en lugar de 5625; más tarde encontró 3751 donde 24 fps exigían exactamente 3750. Los dos fallos me obligaron a separar el tiempo de origen, la cuantización CFR, la base de tiempo de MP4, PTS/DTS, el multiplexado y la validación a nivel de paquete.
Cómo reduje un vídeo de producción de ~280 MB a ~50 MB con H.264
Un vídeo real del sistema en producción pasó de unos 280 MB a unos 50 MB después de rehacer la configuración H.264 alrededor de CRF 28, x264 veryslow, un límite de resolución de clase 720p, frecuencias de imagen útiles y requisitos moderados para el decodificador. En una etapa anterior, el mismo ejemplo ya había bajado de unos 350 a 238 MB, y una auditoría de la biblioteca antigua mostró que eran habituales los H.264 de varios megabits por segundo.
Construí Gitae para diagnosticar caídas web más allá de «online o offline»
Construí Gitae para responder una pregunta práctica: ¿el sitio está realmente caído o el fallo es local? Combina comprobaciones desde VDS externos en Moscú y Helsinki con DNS, HTTPS/TLS, puertos, routing, IP, hosting y señales de CMS, tratando cada resultado como evidencia y no como una sentencia definitiva.
Por qué TypeScript funciona tan bien con Codex para software de producción
En producción, TypeScript le da a Codex algo que un buen prompt no puede sustituir: contratos verificables por máquina, feedback rápido del compilador y un camino más seguro para los refactors grandes.
Construí Jurfi.com: un estudio en el navegador para borradores legales estructurados
Construí Jurfi.com para convertir formularios y plantillas en borradores legales de trabajo estructurados dentro del navegador, guardar borradores localmente y mantener la revisión como parte explícita del proceso, sin afirmar que el software sustituye a un abogado.
Mis primeros ingresos SaaS: lo que realmente demostró un solo pago
Mi primer pago por un producto SaaS que había construido yo mismo fue pequeño, pero cambió la calidad de la evidencia que tenía. Esto es lo que una sola transacción puede validar, lo que no puede demostrar y por qué la repetición importa más que el hito.
Cómo uso Codex para revisar 15 proyectos sin ceder el control manual
Revisar 15 proyectos de software antes significaba ahogarme en comprobaciones repetitivas. Codex me ayuda a investigar bugs, tests, SEO, traducciones, localización y consistencia mucho más rápido, pero sigo tratando cada hallazgo de la IA como una pista, no como un veredicto, y cada cambio como algo que debo verificar.
Por qué uso el último 3–5 % de mi límite de Codex en ChatGPT Plus para grandes tareas de ingeniería — Actualización: dejó de funcionar en el verano de 2026
Actualización: para el verano de 2026 este flujo dejó de ser fiable en mi caso. Desapareció de mi cuenta el contador de 5 horas, quedó visible el límite semanal y una tarea larga podía detenerse al agotarlo.
Publiqué 10.000 artículos SEO con IA y mi sitio acabó con cero páginas indexadas en Google
Publicar contenido con IA a escala parecía un atajo: Google rastreó las 10.000 URLs de artículos generados, pero solo unas 1.000 páginas llegaron realmente al índice, aparecieron en Search y generaron tráfico. Después también desaparecieron, hasta que todo el sitio llegó a cero páginas indexadas. Esto es lo que aprendí sobre IA, SEO, traducción y control editorial.
Cinco años con un MacBook M1 de 8/256 GB: por qué todavía no lo he reemplazado
Compré el MacBook M1 base con 8 GB de memoria y SSD de 256 GB por unos 1.000 dólares y lo usé alrededor de 15 horas al día para desarrollo, trabajo multimedia, escritura, aprendizaje y proyectos personales. Cinco años después veo claramente sus límites, pero pienso en actualizar porque mi carga de trabajo creció, no porque el equipo haya dejado de ser útil.
Traduje mi blog a 20 idiomas con ChatGPT y empecé a recibir tráfico de búsqueda de todo el mundo
La IA cambió por completo la economía de publicar en varios idiomas. Pasé de un blog en un solo idioma a publicar cada artículo hasta en 20 idiomas, creando nuevas entradas orgánicas desde buscadores.
Lancé QRViz como generador gratuito de QR estáticos y aposté la distribución al SEO
QRViz es un generador de códigos QR estáticos basado en el navegador, no una plataforma de campañas. Lancé qrviz.com como un generador de códigos QR gratuito, sin presupuesto publicitario, adquisición pagada ni embudo de monetización. Dependo por completo del SEO, así que la distribución sigue siendo la mayor incógnita del proyecto.
Por qué conseguir clientes me resultó más difícil que construir un SaaS
Una lección de primera mano construyendo un SaaS: la ingeniería me daba feedback claro y verificable; distribución, posicionamiento, mensaje y retención exigían un ciclo distinto y mucho menos predecible.
Construí solo un producto SaaS. Activar los pagos cambió el trabajo
Construí este producto yo solo, por las noches, los fines de semana y en días festivos. Cuando activé los pagos, los bugs, el onboarding, la moderación, la retención y la confianza dejaron de ser problemas para más adelante y pasaron a formar parte de operar un producto real.
I Got 550 Views from One Image, Voiceover, and Subtitles: What Three Shorts Tests Actually Taught Me
A simple YouTube Short built from one static image, a voiceover, and subtitles reached 550 views. After three early tests, the useful lesson was not a proven formula, but a repeatable way to experiment without confusing a promising signal with proof.
Vi casi 6.000 candidaturas en una vacante frontend de Moscú. Lo que eso dice —y no dice— del mercado IT ruso
A finales de 2023, reclutadores me decían que 300–500 candidatos por vacante ya era mucho. El 20 de enero de 2026 vi una posición frontend mid-level en Moscú acercarse a 6.000 candidaturas en pocas horas. Esta es mi lectura de lo que esa cifra señala, lo que no demuestra y cómo la interpretaría hoy como candidato.
Cómo DeepSeek cambió mi flujo con Node.js: más de 4.000 commits en seis meses
Mi gráfica de GitHub de 2025 pasó de estar casi vacía a superar los 4.000 commits en la segunda mitad del año. Este artículo explica cómo el coding con AI cambió mi workflow de side projects con Node.js, dónde me ahorró tiempo, dónde falló y por qué verificar siguió siendo más importante que generar rápido.
My First TikTok at 28: What a Vertical Product Demo Taught Me About Traffic
At 28, I posted my first TikTok and cross-posted the same product demo to Reels and Shorts. The useful lesson was not the view count: it was how much a 9:16 frame changes a desktop interface, and how to measure short-form traffic without confusing reach with acquisition.
Compré un dominio de 25 años y recibí 1.000+ solicitudes diarias a URLs muertas
Tras lanzar un sitio en un dominio registrado por primera vez en 2000, vi más de 1.000 solicitudes diarias a URLs antiguas y más de 900 errores en Yandex Webmaster durante una sola noche. Explico qué pude demostrar, por qué usé 410 de forma selectiva y cómo auditaría hoy un dominio antiguo.
Yandex había indexado 12.500 páginas, pero casi no recibía tráfico desde Rusia: el problema de Cloudflare que pasé por alto
Yandex había indexado 12.500 páginas, pero el tráfico desde Rusia era casi cero. Aislé el problema en la ruta de red, desactivé el proxy de Cloudflare, trasladé caché, compresión y protección básica a Nginx en mi VDS y recuperé la accesibilidad.
Mi sitio estático con Next.js recibe miles de escaneos de vulnerabilidades al día. Nginx apenas lo nota
Mis logs están llenos de sondas que buscan WordPress, backdoors PHP, .env y .git/config. En mi sitio estático con Next.js + Nginx, la mayoría acaba en misses baratos y 404, mientras la carga de CPU se mantuvo igual. Esto es lo que esa experiencia dice realmente sobre la seguridad de un sitio estático.
Yandex llevó tráfico a mi sitio nuevo mientras Google apenas se movía
En el mismo proyecto nuevo, Google acumuló solo unos 300 clics durante un periodo largo, mientras Yandex Webmaster mostraba una subida clara, incluido un +500% en clics. La clave es separar lo que esos datos demuestran de lo que solo podemos inferir.
Yandex indexó 4.278 de mis páginas de Next.js en una noche: lo que realmente demostró
Yandex incorporó de golpe 4.278 de mis páginas generadas estáticamente con Next.js. Fue un hito técnico real, pero no una prueba de rankings ni de tráfico. Esto es lo que el resultado sí decía sobre SSG y el SEO programático, y lo que no.
Mi primer mes de SEO: 632 visitantes orgánicos y una comprobación sobre tráfico de bots
Usé un proyecto personal para prepararme para una iniciativa SEO más grande en el trabajo. Tras un mes tenía 632 visitantes orgánicos, pero un día con 83 visitantes me recordó lo fácil que es confundir tráfico sospechoso o artefactos de analítica con crecimiento real.
Casi ignoré Yandex Webmaster. Dos semanas después, me enviaba más tráfico que Google
Creé un side project con Next.js para practicar antes de un proyecto laboral donde el SEO sería crítico. En las primeras dos semanas registré 58 visitantes desde Google y 200 desde Yandex, y aprendí a separar tráfico, indexación y diagnósticos.
Yandex Metrica vs. Google Analytics: por qué preferí Metrica después de una semana
Usé Google Analytics y Yandex Metrica en paralelo durante una semana en un proyecto nuevo. Metrica terminó siendo mi herramienta preferida por Webvisor y sus repeticiones de sesión, pero eso describe mi flujo de trabajo: no demuestra que una plataforma sea mejor para todo el mundo.
Yandex rastreó mi blog sin /en. Los redirects 308 evitaron una avalancha de 404
Después de añadir unas 3.000 páginas /en/blog/... al sitemap, vi a Yandex intentar acceder a las rutas equivalentes /blog/.... Los redirects 308 que ya tenía configurados evitaron que esas peticiones terminaran en 404. La lección útil no fue que Yandex “rompiera” mi sitemap, sino el valor de una capa de redirecciones bien diseñada.
Dos sitios nuevos despegaron en Google y, días después, el tráfico cayó 10 veces
En dos lanzamientos seguidos vi un fuerte pico de impresiones en Google y, pocos días después, una caída aproximada de diez veces en el tráfico. El patrón fue real; lo que no puedo demostrar es que se deba a una supuesta “luna de miel” de Google.
2.000 páginas desaparecieron de la búsqueda de Yandex de la noche a la mañana. Esto es lo que realmente pude concluir
Abrí Yandex Webmaster y vi que 2.000 de unas 8.000 páginas habían dejado de participar en la búsqueda. La caída del 25 % era llamativa, pero la lección importante fue no confundir un cambio observado en el estado de búsqueda con una causa demostrada.
Hice más de 10 preguntas en MoscowJS 66 y gané dos premios
En MoscowJS 66 hice más de 10 preguntas durante charlas sobre bots de Telegram, LangChain.js, la arquitectura de un constructor de sitios y pruebas de tipos en TypeScript. Dos fueron elegidas como las mejores preguntas y me llevé dos premios.
Lo que me llevé de PiterJS #79: monolitos legacy, FrontOps, rendimiento web y mejores preguntas
PiterJS #79 en San Petersburgo se centró en mantener sistemas que ya existen: un monolito legacy, FrontOps y métricas de rendimiento web. Salí con notas prácticas, dos premios del Q&A y un recordatorio de por qué los meetups presenciales valen más cuando participas.
I Launched a Next.js Blog in 21 Languages. Here’s What 439 Google Impressions Actually Told Me
In its first week, my 21-language Next.js blog recorded 439 Google impressions and 5 clicks. Later, 436 of 471 pages were indexed. The useful lesson was learning to separate visibility, indexing, and actual search performance.
MoscowJS 65 después de seis años con JavaScript: por qué sigo yendo a meetups locales
El 5 de junio de 2025 asistí a MoscowJS 65 en T Bank. Sus cuatro charlas abordaron la IA desde ángulos distintos, pero mi principal conclusión fue más sencilla: los meetups locales todavía me aportan algo que la documentación y las grabaciones no pueden sustituir por completo.