Notas

Blog

Notas sobre ingeniería frontend, SEO, IA, analítica y el trabajo de lanzar productos reales.

42 artículos

31 de agosto de 20267 min de lectura

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.

AVA HostingVPSLinuxCPU stealRendimiento VPS
31 de agosto de 202610 min de lectura

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.

FDCServersVPSLinuxE/S de discoDevOps
31 de agosto de 20268 min de lectura

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.

REGXAVPSLinuxCPU stealvirtualización
28 de agosto de 202613 min de lectura

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.

Bunny StorageNginxCaché de vídeoCache missServidor multimedia
20 de agosto de 202610 min de lectura

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.

AVIFWebPSSIMULACRA2Compresión de imágenesRendimiento web
17 de agosto de 202612 min de lectura

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.

DeepSeekRunwareAPI de LLMInfraestructura de IAModelos open-weight
13 de agosto de 202614 min de lectura

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.

H.264FFmpegMP4WebP animadoGIFAPNGCompresión de vídeoProcesamiento multimedia
13 de agosto de 202615 min de lectura

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.

Monitorización de errores del navegadorObservabilidad frontendErrores JavaScriptMonitorización de producciónNext.jsRendimiento web
13 de agosto de 202621 min de lectura

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.

Next.jsDespliegueDesfase de versionesCaché webFiabilidad del frontendRecursos estáticos
13 de agosto de 202611 min de lectura

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.

FFmpegH.264CFRMarcas de tiempo de vídeoMP4Procesamiento multimedia
13 de agosto de 202613 min de lectura

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.

H.264FFmpegx264Compresión de vídeoRendimiento en líneaOptimización multimedia
16 de abril de 20267 min de lectura

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.

GitaeDiagnóstico webMonitorización webDNSSSLPingTraceroutePuertosHostingSEO
14 de abril de 20266 min de lectura

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.

TypeScriptCodexProgramación con IAEntrega de softwareJavaScriptFlujo de trabajo de desarrollo
6 de abril de 20265 min de lectura

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.

JurfiJurfi.comDocumentos legalesLegalTechSaaSBorradores legalesHerramientas web
5 de abril de 20264 min de lectura

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.

SaaSPrimer ingresoIndie hackerValidación de productoDesarrollo de productoViaje emprendedorExperiencia de desarrollador
3 de abril de 202610 min de lectura

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.

CodexAI codingCode reviewTesting de softwareWorkflow de desarrolloLocalizaciónSEO técnicoProductividad de desarrollador
2 de abril de 20268 min de lectura

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.

CodexChatGPT PlusHerramientas de IA para programarFlujo de trabajo de desarrolladorIngeniería de softwareMigración a TypeScriptLimpieza de ESLintRefactorizaciónlímites de uso de Codexactualización 2026
1 de abril de 202611 min de lectura

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.

SEO con IAIA generativaGoogle SearchContenido a escalaIndexaciónEscritura asistida por IASEO multilingüe
31 de marzo de 20266 min de lectura

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.

MacBookAppleM1Apple SiliconDesarrollo de softwareAnálisis a largo plazoLongevidad del hardware
30 de marzo de 20265 min de lectura

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.

Localización con IASEO multilingüeChatGPTNext.jsSEO internacionalBlogging
27 de marzo de 20265 min de lectura

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.

Generador de códigos QRQrvizLanzamiento de productoSEOProyectos paralelosDesarrollo webDesarrollo de producto
18 de febrero de 20264 min de lectura

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.

Crecimiento SaaSAdquisición de clientesMarketing de productoBootstrappingBuild in publicDistribución
17 de febrero de 20265 min de lectura

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.

SaaSDesarrollo en solitarioLanzamiento de productoPaymentsReliabilityOperación de producto
22 de enero de 20264 min de lectura

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.

YouTube ShortsContent ExperimentsShort-form VideoVideo EditingCapCutCreator Workflow
20 de enero de 20265 min de lectura

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.

CarreraMercado laboral ITFrontendRusiaMoscúContrataciónBúsqueda de empleo
1 de enero de 20265 min de lectura

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.

Node.jsDeepSeekAI CodingDeveloper ProductivitySide ProjectsSoftware Engineering
30 de diciembre de 20256 min de lectura

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.

TikTokProduct MarketingProduct DemosAnalyticsIndie Dev
16 de noviembre de 20256 min de lectura

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.

SEOHTTPDevOpsDominiosRastreo web
14 de noviembre de 20256 min de lectura

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.

DevOpsSEONginxCloudflareRedesInfraestructura
27 de octubre de 20256 min de lectura

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.

SeguridadNext.jsNginxDevOpsHosting estáticoSuperficie de ataque
27 de octubre de 20254 min de lectura

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.

SEOGoogle SearchYandexGoogle Search ConsoleYandex WebmasterSEO técnico
17 de octubre de 20255 min de lectura

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.

SEONext.jsSSGYandexSEO programáticoIndexación
16 de octubre de 20256 min de lectura

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.

SEOAnalítica webTráfico de botsYandex MetricaExperimentos SEO
6 de octubre de 20254 min de lectura

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.

SEONext.jsGoogle SearchYandexSearch ConsoleIndexación
5 de octubre de 20255 min de lectura

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.

Analítica webUXRepetición de sesionesYandex MetricaGoogle AnalyticsGA4
3 de octubre de 20254 min de lectura

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.

SEOYandexSitemapRedirect 308SEO técnicoRastreo
2 de octubre de 20255 min de lectura

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.

SEOGoogle SearchSearch ConsoleTráfico orgánicoSEO técnico
1 de octubre de 20255 min de lectura

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.

SEOYandex WebmasterIndexaciónVisibilidad en buscadoresSEO técnico
11 de julio de 20253 min de lectura

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.

EventosJavaScriptTypeScriptIALangChain.jsComunidadMoscowJS
23 de junio de 20255 min de lectura

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.

PiterJSJavaScriptFrontOpsDockerRendimiento webComunidad
17 de junio de 20256 min de lectura

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.

Next.jsSEOI18nMultilingual SEOGoogle SearchWeb Development
7 de junio de 20253 min de lectura

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.

JavaScriptMoscowJSMeetupsComunidad de desarrolladoresIA