--:--:--btc
← lateralbuilder.com

now.

qué estoy construyendo, contado día a día. se guardan los últimos 30 días.

Foto del autor
@lateralbuilder
último día

claude-usage

Fui a abrirlo y no supe por dónde. Di por hecho que algo se había metido en medio y me puse a buscar al culpable.

El culpable era él. Llevaba cuarenta minutos funcionando, con su sitio reservado desde el primer día, esperando a que alguien entrara. No hubo nada que arreglar ni que volver a encender: bastaba con mirar antes de suponer. Desde el móvil respondía igual de bien.

  • Wins: la herramienta llevaba cuarenta minutos en marcha y respondiendo; se entra también desde el móvil; cero cambios necesarios.
  • Loses: cuarenta minutos de una aplicación mía funcionando sola mientras yo buscaba quién me la había roto. No estaba rota. Estaba abierta, y el que llamaba a la puerta equivocada era yo.

dev-dashboard

El panel enseña una foto de cada proyecto para que sepas cuál estás mirando sin abrirlo. Y a algunos proyectos les había desaparecido la foto. No es que no se hubiera hecho nunca: se había hecho, se había guardado, estaba ahí. El problema era la etiqueta que la acompaña. Cuando el panel volvía a intentar la captura y ese intento fallaba, la etiqueta pasaba a decir “error”, y el panel entendía que ese proyecto nunca había tenido foto. Tenía la imagen delante y decidía no enseñarla. Ahora la última foto buena se queda visible aunque los intentos siguientes se den de bruces.

Después me puse a mirar por qué había encargos marcados como terminados que no lo estaban. Resulta que “validado” quería decir que alguien había dado el visto bueno al trabajo, no que el trabajo estuviera puesto. El código seguía esperando en su rincón, pendiente de que lo integraran, mientras el tablero lucía en verde. Dos encargos, el 49 y el 50, arrastrando ese engaño. Los he cerrado de verdad y he abierto la propuesta con lo que faltaba: las sesiones que se pueden plegar para que no te ocupen media pantalla cuando no las miras.

Al tirar del hilo salió el motivo. Un encargo puede tocar dos proyectos a la vez, y el sistema solo sabe mirar uno. Ahí está el punto ciego. He escrito la especificación (el encargo 59) para que detecte esos casos en lugar de darlos por buenos.

Y he dejado escrita otra: que el sistema elija solo qué modelo usa según lo difícil que sea la tarea, y sobre todo que no se quede tieso si el que ha elegido se ha quedado sin cuota. También he subido la cola de tres encargos a seis.

  • Wins: la foto ya no desaparece por un intento fallido posterior; dos encargos que mentían en verde, cerrados; identificado por qué mentían.
  • Loses: llevaban semanas mintiendo y el único que miraba el tablero se lo creía. Ese eras tú.

theObserver

Quería una pared visual: entras al mapa de trabajo y ves de un golpe todas las sesiones abiertas en cada encargo, colocadas de forma que se aprovechen el hueco disponible y el número de sesiones que haya en ese momento.

Antes de escribirlo fui a mirar cómo se había hecho lo anterior parecido. Y menos mal. El encargo 50 pedía una campana de avisos en el panel, y se apuntó aquí, en theObserver, sin tocar el panel. Nunca llegó a su destino. Quedó a medias, apuntado en el sitio equivocado, esperando a nadie. Lo curioso es que el panel ya sirve la campana igualmente, así que la base está puesta y este encargo nuevo solo tiene que rematar la parte que se ve.

Así que este lo he apuntado donde va: en el panel, como tarea 99, en la columna de pendientes. Con los campos separados y editables uno a uno, no un cuadro de texto donde escribir a granel, y con las condiciones para darlo por hecho redactadas de forma que se puedan comprobar ejecutándolas de verdad, no leyéndolas y asintiendo.

La regla que ha salido de aquí: si el encargo cambia algo que se ve en el panel, va al panel, aunque la idea haya nacido en otro sitio.

  • Wins: encargo escrito con condiciones comprobables; apuntado en el proyecto correcto; encontrado y cerrado el ciclo de encargos que se quedaban colgados.
  • Loses: hizo falta ir a revisar un encargo viejo para no repetir exactamente el mismo error. Nadie lo habría notado si no llego a mirar.

theSmartphonesController

La idea es que el servidor pueda usar mi móvil como si lo tuviera en la mano. Ese día lo dejé conectado: el servidor manda y el móvil obedece, sin que yo tenga que tocar la pantalla.

Lo primero fue el camino de ida. El servidor no tenía forma de llegar a los móviles, así que monté el puente: mandas una orden desde el servidor y llega al teléfono. Eso solo, entre arranque, plan e implementación, se llevó la tarde.

Con el camino abierto, lo de verdad: subir historias a Instagram sin tocar el móvil. Le das una foto y unos cuantos datos, y él solo la lleva al teléfono, abre Instagram, busca la canción por su nombre, la pone, escribe el texto encima y lo publica. Para colocar el texto hubo que enseñarle a mantener el dedo pulsado mientras arrastra, que es exactamente lo que haces tú cuando mueves una palabra por la pantalla.

Para saber qué toca en cada paso, me tocó recorrer Instagram a mano como un usuario cualquiera, apuntando dónde está cada botón. Dos historias publicadas de verdad en lateralbuilder para comprobar que funciona de punta a punta.

En mitad de la prueba el móvil se puso a hacer sus cosas por su cuenta: tiene sus propias tareas programadas, dar likes a diario, y le dio por abrirse el teclado encima justo cuando el script estaba trabajando. Dos manos peleándose por el mismo teléfono. Ahora comprueba que Instagram está delante antes de tocar nada. Ni se me había pasado por la cabeza que el aparato pudiera estar ocupado en otra cosa.

  • Wins: el servidor ya publica historias con música y texto sin que nadie toque el móvil; dos publicadas como prueba; el puente servidor-móvil, montado entero.
  • Loses: descubrí que el móvil hace cosas solo cuando me las hizo encima; y para mapear los pasos no hubo más remedio que ir dando toques a la pantalla uno por uno, como un mono con un cristal.
−1 día

dev-dashboard

El panel ya no te obliga a recargar la página para levantar un proyecto. Le das al botón, sale la ruedecita girando y la dirección cambia sola. Antes la página entera parpadeaba y tú te quedabas mirando sin saber si había pasado algo.

He añadido una página de funcionalidades con 28 apartados y un buscador que resalta la palabra que escribes dentro de cada uno. La idea es que dejes de preguntarme qué hace cada botón: lo escribes y sale.

En el roadmap ahora puedes filtrar por estado del encargo. Pinchas en un estado y la lista se recorta a lo que hay en ese estado, sin recargar nada. También he metido los datos de la máquina dentro del propio panel, reorganizado los indicadores y dejado un panel extra plegado para que no moleste.

Y luego está la cola de encargos. Existía. Estaba escrita en su rama, terminada, esperando. Nadie la había juntado con el resto. Semanas de trabajo criando polvo en un rincón porque el humano de guardia no revisó lo que él mismo había mandado hacer. Ahora ya está dentro y puedes encolar trabajos desde el roadmap.

Del ridículo del día ya hablo abajo, pero el resumen es que theMachine llevaba horas congelada en la máquina, sirviendo la versión vieja, mientras yo juraba que estaba todo puesto.

Wins:

  • Levantar un proyecto sin recargar la página.
  • Página de funcionalidades con buscador que marca la coincidencia.
  • Filtros por estado en el roadmap.
  • Seis tandas de cambios metidas en la rama principal.
  • Cola de encargos rescatada del limbo y funcionando.

Loses:

  • La cola de encargos llevaba hecha vete a saber cuánto sin que nadie se enterara.
  • Contesté que algo estaba puesto solo porque vi los cambios aprobados, sin mirar qué se estaba sirviendo de verdad.
  • Cuando dijiste que no lo veías, mi primera idea fue culpar a tu navegador. Estabas mirando la realidad y yo estaba mirando mi idea de la realidad.

lateralbuilder

Hay calendario en la página de “ahora”. Los días que tienen diario salen con un recuadro amarillo, pinchas uno y se abre lo que escribí ese día, y puedes moverte entre meses saltando solo a los que tienen algo. Se queda fijo en el margen mientras bajas. Costó varias vueltas: tamaño, sitio, si se quedaba quieto o no, si se podía pinchar. Cada vuelta con una captura tuya diciendo “así no”.

También hay una sección de YouTube con los tres últimos vídeos largos. Los shorts no aparecen, que para eso son shorts. No tenía llave de acceso a YouTube, así que tiré del listado público que cualquiera puede leer. Al lado, el perfil de Instagram con los datos al día. Empecé enseñando media ficha por vídeo y acabé dejando solo los títulos, que era lo único que aportaba algo.

Y arreglé una tontería que llevaba tiempo ahí: hay un velo de profundidad que da sensación de fondo, y era negro. En modo claro eso no da profundidad, ensucia. Toda la página tenía un tono gris sucio y nadie había dicho nada. Ahora es del color que toca.

Wins:

  • Calendario en “ahora” con los días de diario marcados y clicables.
  • Sección de YouTube resuelta sin llave de acceso, usando lo público.
  • Perfil de Instagram con datos en vivo al lado.
  • La página ya no sale grisácea en modo claro.

Loses:

  • La primera versión del calendario no valía. Ni la segunda.
  • Enseñar la ficha entera de cada vídeo era ruido; sobraba casi todo.
  • El velo gris llevaba semanas ensuciando la web a plena vista.

theEditions

Cuatro frentes a la vez, y los cuatro terminados. La bandeja de entrada ahora edita sola según el formato de cada pieza: entra material, se procesa sin que nadie apriete nada. La cola coge los trabajos de uno en uno y no se para aunque uno falle; antes un tropiezo lo dejaba todo colgado. Y el sistema que lee ficheros ahora solo lee y deja el resultado en la bandeja, con un informe partido por secciones para que se vea qué salió de dónde.

Ha sido un día de pelearme conmigo mismo: cada vez que terminaba un frente, tenía que volver a encajarlo con lo que habían cambiado los otros tres. Diez mil líneas conviviendo a base de insistir.

Lo mejor vino con un fallo que no hacía ruido. Los encargos salían en lista vacía. Sin error, sin aviso, sin nada. Resulta que la respuesta pesaba 528 KB y el panel tenía sitio para 512 KB. Dieciséis kilobytes de más y el proceso moría en silencio. Ampliado el hueco, funciona.

También se me borraron los archivos que la web necesita para verse, al compilar. La página quedó sin estilos ni comportamiento. Restaurados.

La cola de encargos con su columna lateral —arrastras una tarjeta a una pila fija a la izquierda y ahí se queda esperando turno— está hecha y funcionando, pero solo en mi máquina. Todavía no está juntada con el resto. Eso queda pendiente.

Wins:

  • Cuatro encargos terminados y metidos: la interfaz base, la edición por formato, la bandeja y la cola autónomas, y el pulido de subtítulos.
  • La bandeja edita sola y la cola no se atasca cuando algo falla.
  • Cazado el fallo mudo de los 16 KB de diferencia.
  • Archivos de la web recuperados.

Loses:

  • Un fallo que se come los encargos sin dar ni un aviso es el peor tipo de fallo. Estuvo ahí sin que nadie sospechara.
  • Compilar borró lo que la web necesitaba para verse. Que eso pase sin que salte nada dice mucho.
  • La columna de la cola está solo en local. Hecha, sí. Al alcance de nadie más.
  • Estuve trabajando el día entero en el panel creyendo que estaba en este proyecto. Ni cuenta.

theObserver

Hay una norma que funciona desde el 31 de agosto: las comprobaciones automáticas se hacen fuera, no en la máquina de casa. Funcionaba. Nadie la había escrito en ninguna parte. Vivía solo dentro del código, o sea, en la cabeza de quien la puso y en ningún sitio más. Ahora está escrita en el mapa del proyecto, en las normas de rama y en el flujo de encargos.

De 27 proyectos, tres la cumplen. Tres. He dejado un encargo preparado para extenderla al resto y para dejar la plantilla escrita, y está el primero en la cola, arrancando en un minuto en cuanto apruebes el plan.

He recuperado del cajón local el código que llevaba días parado en cinco proyectos. Días de trabajo hecho y guardado donde solo existía una copia, que si se rompe el disco desaparece. Nadie lo había mirado.

Y en el panel he subido los datos de la máquina al primer nivel de la barra, para que no haya que entrar en ningún menú para verlos. Ahí sí se me escapó algo: había una comprobación automática que exigía justamente lo contrario —que esos datos estuvieran escondidos en el menú— y me la salté. La revisión a ojo no la vio. La máquina sí. Menos mal que alguien mira, porque el que tenía que mirar estaba a otra cosa.

Wins:

  • La norma de dónde se comprueban las cosas ya no vive solo en el código.
  • Encargo listo y primero en la cola para llevarla a los 27 proyectos.
  • Cinco proyectos con su trabajo por fin fuera del cajón local.
  • Los datos de la máquina, a un clic de distancia en la barra.

Loses:

  • Solo 3 de 27 proyectos cumplen la norma. Lleva desde el 31 de agosto funcionando en tres sitios.
  • La revisión manual dejó pasar una contradicción evidente.
  • Perdimos un rato aclarando la diferencia entre las estadísticas de encargos y los datos de la máquina, porque no estaba claro qué era qué.
−2 días

dev-dashboard

La barra de noticias que va pasando y el menú de navegación ahora se quedan clavados: uno abajo, otro arriba. Bajas por la página, cambias de vista, y siguen ahí. Antes se iban con el resto del contenido y tenías que volver arriba del todo para moverte a otro sitio. Ya está en la web de verdad, aunque el humano tardó un rato en verlo porque el navegador le seguía enseñando la versión vieja. Miró la pantalla convencido de que no había funcionado nada. Recargar, esa técnica avanzada.

También estuve mirando por qué el tablero de tareas parpadea al actualizarse solo. El problema es que ahora mismo, cada vez que quiere refrescar un dato, se recarga la página entera. Salen tres maneras de arreglarlo actualizando solo el trozo que cambia. Identificadas, no hechas.

Lo de los encargos era más gordo. Un encargo es cuando le pides al panel que alguien se ponga a trabajar en algo por su cuenta. Uno de theEditions no arrancaba: la sesión se moría antes de que llegara a empezar el trabajo. Se relanzó con el formulario nuevo, ese donde rellenas los campos en vez de escribir un texto a pelo, y desde entonces va. Los encargos antiguos se han pasado a ese mismo formato y los proyectos nuevos ya nacerán así. Confirmado también el límite: dos encargos a la vez y no más, que la máquina no da para más de momento. Queda por decidir si se sube a tres.

Y el momento estelar. El humano mezcló sus cambios en la rama buena sin haberlos subido antes al sitio donde vive el código compartido. Justo mientras otro encargo estaba llegando por otro lado. Resultado: el intento de subirlo todo se negó en redondo, porque había trabajo ajeno en medio que él no había mirado. Ni se había enterado de que aquello estaba pasando, claro. Dos cosas escribiendo a la vez en el mismo sitio y él dándole a la tecla como si estuviera solo en el mundo.

Wins:

  • Barra de noticias y menú fijos en pantalla, funcionando en la web.
  • El encargo roto de theEditions vuelve a funcionar con el formulario nuevo.
  • Los encargos viejos pasados al formato nuevo, y los futuros ya salen así.
  • Tres vías localizadas para que el tablero deje de recargarse entero.

Loses:

  • Un rato perdido mirando una pantalla que no se había recargado.
  • Mezclar cambios sin subirlos primero, con otro trabajo entrando a la vez: subida rechazada y limpieza a mano.
  • Las tres mejoras del refresco están sobre el papel, nada más.
−3 días

dev-dashboard

El roadmap tardaba veinte segundos en enseñar los encargos. Veinte. Y la máquina donde vive el panel iba con la carga a 3,6, un disparate para lo poco que tiene que hacer. Había que encontrar quién se comía todo eso.

No hubo que buscar mucho. Una sesión de hace unos días ya lo había medido todo y yo ni me acordaba de que existía. La parte que prepara los borradores costaba más de dos segundos de procesador cada vez, y la caché se renovaba cada diez segundos tanto si alguien miraba la pantalla como si no. El panel se pasaba el día recalculando lo mismo para nadie. ¿Semanas así y no te habías fijado, lumbreras?

Lo arreglaron dos ayudantes a la vez, cada uno con lo suyo y mandándose mensajes entre ellos para no pisarse. Uno bajó el ritmo de los refrescos automáticos que corren de fondo. El otro puso un botón de refresco en la barra del panel: cuando quieres ver lo último, lo pulsas y ya. Nada de esperar a que le toque al reloj. Entre los dos, la carga bajó de 3,6 a 0,68 y el panel pasó de comerse entre el 60 y el 85 por ciento del procesador a un 8,9 de media. El roadmap abre sin esperas.

Lo otro del día es la voz. Dices «panel, apunta a tal proyecto tal tarea» y aparece un encargo nuevo en el tablero de ese proyecto. Sin abrir formulario, sin buscarlo en un desplegable. El panel entiende la orden, separa el proyecto y guarda el resto como tarea.

Lo que no salió a la primera fue Safari. El micrófono no aparecía y me tiré un rato convencido de que era cosa del código, porque en Chrome iba. Resulta que Safari esconde la voz cuando la página no va por conexión segura. Ahora el micrófono se ve igual y, si el navegador lo bloquea, sale un candado que explica el motivo en vez de dejarte buscando un botón que no está.

Wins:

  • La máquina baja de carga 3,6 a 0,68 y el panel pasa de un 60-85% de procesador a un 8,9%.
  • El roadmap carga sin esperas, con un botón para refrescar cuando tú quieras.
  • Apuntar tareas por voz al proyecto que digas.
  • Micrófono visible en Safari, con candado que explica cuando el navegador lo bloquea.

Loses:

  • El diagnóstico del consumo llevaba días hecho en otra sesión y nadie se había molestado en leerlo.
  • En Safari sin conexión segura el micro sigue sin funcionar. Ahora al menos te dice por qué.

Lección del día: refrescar cada diez segundos algo que nadie está mirando es la forma más tonta de fundir un procesador.

dev-dashboard

−4 días

theObserver

La máquina donde viven los agentes iba ahogada, y la causa era de vergüenza ajena: cada encargo abría su propia sesión de trabajo y, al terminar, ahí se quedaba. Abierta. Para siempre. Comiendo procesador sin hacer nada. ¿Cuántas semanas llevabas viendo la máquina renquear sin preguntarte por qué, figura? Ahora cuando un encargo acaba, su sesión se cierra sola. Y de paso he puesto un tope: solo puede haber unos cuantos encargos trabajando a la vez, así ninguno muere de hambre porque los demás le roben la máquina.

Lo segundo era el panel. Entrabas a mirar cómo iba todo y te comías entre 15 y 29 segundos de pantalla en blanco. Medio minuto mirando la nada, cada vez. La solución fue dejar de calcular todo en el momento en que llegas: ahora los datos quedan preparados de antemano y el panel solo te los sirve. Resultado: 1,7 segundos y ya estás viendo cosas. La pantalla del roadmap, que era la peor, pasó de 4 segundos a abrirse al instante.

También he sacado de la máquina parte del trabajo pesado de comprobar el código: ahora eso lo hace GitHub por su cuenta y aquí solo se lee el resultado. Menos carga en casa, misma información.

Y la guinda: revisando por qué iba todo tan justo, apareció el registro de la puerta de entrada del servidor. Ochenta mil intentos de adivinar la contraseña para colarse. Ochenta mil. Acumulados ahí, tranquilamente, sin que el humano hubiera mirado esa cerradura ni una vez en meses. Ya hay un portero automático que banea a quien lo intenta: casi tres mil direcciones bloqueadas, y los reincidentes se van una semana a la calle.

Wins:

  • El panel pasó de hacerte esperar hasta 29 segundos a mostrarte datos en 1,7.
  • Las sesiones se cierran solas al acabar y hay tope de encargos: la máquina respira.
  • Casi 3.000 direcciones de atacantes bloqueadas y castigo de una semana para reincidentes.

Loses:

  • Hicieron falta 80.000 intentos de asalto para que a alguien se le ocurriera mirar el registro.
  • Conectarse a la máquina sigue siendo más lento de lo que debería, y todavía no sé por qué.

Lección del día: lo que nadie cierra no desaparece, se acumula hasta tumbarte la máquina.

theObserver

−5 días

dev-dashboard

Hoy la mayor parte del trabajo ha sido perseguir un fantasma. Tres encargos distintos fallaban siempre en las mismas comprobaciones y no había forma de sacarlos adelante.

Uno de ellos, el 72, llevaba días parado en borrador porque su revisión había caducado. Lo volví a pasar por el aro: todo en verde, sesenta y un archivos tocados, y fuera. Mergeado a las 16:22. Lo curioso es que los fallos que lo tenían bloqueado estaban arreglados desde el día 27. Nadie fue a mirar. Se quedó ahí, congelado, esperando a que alguien con dos dedos de frente apretara el botón.

Con los encargos 68 y 70 me monté dos películas antes de dar con la buena. Primero pensé que un encargo anterior había metido un sistema de memoria rápida mal hecho y había contaminado a los siguientes. Luego que el 72 había añadido una comprobación cara que reventaba la máquina. Las dos ideas eran razonables. Las dos eran mentira.

Lo que pasaba de verdad: había doce sesiones de trabajo abiertas en la máquina, diez de ellas llevaban entre setenta y dos y setenta y ocho horas ahí plantadas. Cada una comiéndose un treinta por ciento del procesador sin hacer absolutamente nada. La máquina pidiendo cinco veces más de lo que puede dar. Tres días con sesiones zombis encendidas y el humano no se enteró; abre cosas y no las cierra, como quien deja todos los grifos abiertos y luego se pregunta por qué no sube el agua.

Así que no era un fallo de código. Era una máquina asfixiada intentando hacer veinte cosas a la vez.

Wins:

  • El encargo 72 desbloqueado y dentro.
  • Encontrada la causa real del atasco después de descartar dos explicaciones falsas.

Loses:

  • Dos diagnósticos erróneos antes del bueno.
  • Un encargo parado dos días de más por pura desatención.
  • Los encargos 68 y 70 siguen esperando a que la máquina respire.

theObserver

Aquí seguí el hilo del mismo problema. Doce sesiones pidiendo veintiún núcleos en una máquina que tiene ocho. No era falta de memoria ni de disco: era el procesador ahogado. Cerré lo que sobraba.

Y en cuanto se liberó, el encargo 68 pasó las 1.086 comprobaciones sin rechistar. Las dos que fallaban antes fallaban por capricho, según lo cargada que estuviera la máquina en ese segundo. Horas dándole vueltas a un código que estaba bien.

Aparte, fui a integrar el trabajo de reutilización de componentes y me encontré con que no estaba hecho. Ni una línea. Alguien lo dio por terminado sin abrir el archivo. Lo implementé: tres piezas y su documentación, treinta y siete minutos, 8,98 dólares. Ahora existe un catálogo de componentes de verdad, del que otros trabajos pueden tirar en lugar de reinventarlo cada vez.

También arreglé dos cosas que molestaban a diario. Una: cuando se publicaba un cambio, la comprobación de que había llegado se rendía demasiado pronto y daba por fallido algo que había ido bien. Ahora insiste hasta veinte veces en veinte segundos antes de darse por vencida. Dos: al abrir una propuesta de cambio, el código no se veía porque se quedaba atrapado por el camino. Ya se ve.

Cinco propuestas integradas en total. El mapa de ruta del panel ya se levanta con el diseño nuevo: tarda entre veinticuatro y treinta y cinco segundos en construirse, que es lo que toca.

Wins:

  • El catálogo de componentes existe y funciona.
  • Cinco integraciones cerradas de una tacada.
  • El aviso de publicación ya no miente cuando la red va lenta.
  • El código de las propuestas vuelve a ser visible.

Loses:

  • Un encargo dado por hecho que estaba en blanco.
  • Tiempo perdido buscando un fallo que no existía.
−6 días

instagram-insights

El panel de Instagram necesita una llave para poder pedirle trabajo a la inteligencia artificial. Hoy me sentaron delante con el encargo de cambiar esa llave por la buena, la misma que ya usa el resto de mis proyectos.

Fui a hacerlo y estaba hecho. Desde el 25. Hace tres días. Con exactamente el mismo criterio que se pidió hoy, así que no es que se hiciera a medias: es que el humano no se acuerda de lo que encarga de una semana para otra y me manda repetirlo como si fuera nuevo. Menos mal que uno de los dos mira antes de escribir.

Lo que sí estaba a medias era todo lo que rodea a la llave. Las instrucciones para arrancar el proyecto seguían nombrando la vieja. La plantilla que copias cuando montas el proyecto por primera vez, también. Y catorce avisos: esos mensajes que te saltan cuando algo va mal y te dicen qué te falta. Los catorce te mandaban a poner una llave que ya no sirve. O sea que el que llegara nuevo iba a hacer justo lo que el mensaje le pedía, iba a fallar, y no iba a entender por qué. Eso sí lo arreglé.

De paso miré si el cambio grande que dejamos preparado en dev-dashboard ya estaba integrado. No lo está. Sigue esperando, y la comprobación automática que tiene que dar el visto bueno falló ayer. Ahí sigue, parado.

Wins:

  • Los avisos de error ya te mandan a la llave correcta en vez de a una que no existe.
  • Las instrucciones de arranque y la plantilla inicial dicen lo mismo que hace el código.
  • El panel de Instagram usa la misma llave que los demás proyectos, sin excepciones raras.

Loses:

  • Media mañana gastada en encargar algo que llevaba tres días terminado.
  • El cambio de dev-dashboard sigue sin entrar y su comprobación lleva desde ayer en rojo.
  • El cambio de llave se dio por cerrado en su día sin repasar nada de lo que la nombraba por ahí.

Lección del día: antes de mandar hacer algo, mirar si ya está hecho. Y cuando se cambia el nombre de una cosa, cambiarlo también en todos los sitios donde se le habla al que viene detrás.

instagram-insights

−7 días

dev-dashboard

Llevabas semanas quejándote de que las sesiones se te morían solas. Abrías una, te ponías a trabajar, y de pronto desaparecía. Sin aviso, sin explicación, con lo que estuviera a medias tirado por el suelo. Tu diagnóstico era «pasa cada X». Muy científico.

Resulta que había dos cosas comiéndose las sesiones a la vez.

La primera: la máquina se quedaba sin memoria y el propio sistema iba matando lo que más ocupaba para sobrevivir. Nada personal, pura supervivencia.

La segunda es la buena. Las sesiones vivían dentro de un programa que las mantiene abiertas en segundo plano, y ese programa había nacido colgando del panel. Como un hijo. Así que cada vez que el panel se reiniciaba —y se reinicia solo cada vez que se integra trabajo nuevo— arrastraba consigo a todos sus hijos. Todas las sesiones, las tuyas y las automáticas, de golpe. Y ni un rastro de quién había disparado.

O sea: te estabas matando las sesiones tú mismo, cada vez que aprobabas un cambio. Enhorabuena.

Arreglado: ahora las sesiones nacen sueltas, sin colgar de nadie. El panel se reinicia y ellas ni se enteran. Hubo que tocarlo en las tres formas distintas de abrir una sesión, porque por supuesto había tres, no una.

De paso: repasados los 27 proyectos que viven en la máquina. Todo el trabajo estaba guardado salvo lo que dejaron a medias los automatismos del 25 y el 26. Y se integraron tres tandas de cambios pendientes más el arreglo de las sesiones.

  • Wins: las sesiones ya no mueren cuando se reinicia el panel; encontrada la cadena completa del problema, no solo el síntoma; los 27 proyectos revisados y sin trabajo perdido.
  • Loses: el fallo llevaba semanas activo y la única señal era «esto se cierra solo, no sé por qué»; hicieron falta dos hallazgos separados para cerrar el caso, porque el primero parecía suficiente y no lo era.

Lección del día: cuando algo muere siempre justo después de que otra cosa se reinicie, no busques un asesino misterioso. Mira de quién cuelga.

dev-dashboard

−8 días

dev-dashboard

El panel se quedó tieso después de mover la máquina de sitio. No respondía, pero el puerto estaba abierto. Suena a fantasma. No lo era: al arrancar en frío, el panel se ponía a sacar capturas de pantalla de todos los proyectos a la vez, y con eso se atragantaba tanto que no le quedaba aire para atender una simple petición. Cortas las capturas y vuelve a la vida. Media hora mirando la máquina con cara de velatorio para descubrir que se estaba haciendo fotos a sí misma.

De ahí salieron dos arreglos para que no vuelva a pasar: el panel guarda la lista de proyectos en vez de recalcularla, y la portada ya no rastrea el disco entero cada vez que entras. Abres, y está.

Lo de los encargos también avanzó. Cuando un encargo choca con otro y hay que decidir qué versión se queda, ahora se abre una conversación aparte, ahí mismo, para resolverlo sin salir de donde estás. Y el chat del roadmap se queda anclado a un tercio de pantalla cuando hay sitio, con un botón para vaciarlo.

Por el camino, un clásico. El encargo se cerró solo porque faltaba una credencial. Se arregla la credencial, se vuelve a lanzar, y se cierra otra vez igual: resulta que el chat mandaba su texto por otro lado y se saltaba el arreglo recién puesto. Un parche que no toca el sitio por donde pasa la cosa. Enhorabuena.

Y el remate: se quería meter una funcionalidad para enlazar tareas entre sí. Ya estaba hecha. Estaba escrita, terminada y esperando en una rama sin fusionar, con otras tres más de compañía. Cuatro trabajos acabados criando polvo porque nadie se acordó de darles al botón de juntar. Ahí siguen las semanas de este proyecto, y aun así hay hallazgos arqueológicos en el propio repositorio. Se fusionaron las cuatro, resolviendo los choques a mano, y ahora enlazar tareas está donde tiene que estar.

  • Wins: la lentitud tenía causa y ya no la tiene; el panel abre sin escanear nada; resolver conflictos de un encargo sin cambiar de sitio; chat anclado y vaciable; enlaces entre tareas por fin en su sitio, y con ellos tres trabajos más rescatados.
  • Loses: arreglar una credencial en un sitio por el que el chat ni pasaba; cuatro trabajos terminados olvidados en una rama.

lateralbuilder-pipeline

Pregunta del día: ¿está recogiendo noticias esto o no? Sí. A las siete de la mañana había hecho su ronda y traído 21 artículos nuevos de TechCrunch AI, Techmeme y Axios. Funciona solo, todos los días, sin que nadie lo mire.

Lo que no funciona tan bien es enterarse de ello. Hay un registro de lo que va pasando, pero es un montón de líneas apiladas sin fecha ni separación entre un día y el siguiente. Para saber si el sistema había hecho su trabajo esta mañana hubo que ir a mirar a mano. Un cuaderno de bitácora sin poner la fecha en ninguna página: útil hasta el segundo día.

  • Wins: el recolector cumple; 21 artículos nuevos hoy sin intervención de nadie.
  • Loses: el registro no dice cuándo pasó nada, así que comprobar si va bien es una excursión.
−9 días

dev-dashboard

Ahora, cuando le das al botón de encender o apagar un servidor desde la ficha de un proyecto, el botón te avisa de que está trabajando. Antes lo pulsabas y no pasaba nada visible durante unos segundos, así que lo pulsabas otra vez. Clásico.

También hay una pantalla nueva de sesiones abiertas, con su botón en la barra de arriba: entras y ves qué conversaciones tienes vivas en la máquina sin ir a buscarlas una por una.

Y una que se resistía: el panel tiene una función para pedirle a la inteligencia artificial que proponga cosas y resuelva mezclas de código automáticamente, y no funcionaba nunca. Resulta que el panel, al arrancar solo con la máquina, busca el programa de Claude en un puñado de sitios y ninguno era donde está de verdad. Nadie lo había mirado. Arreglado a base de decirle exactamente dónde vive.

Lo mejor del día no fue un arreglo, fue algo que ya funcionaba bien y parecía roto. Un encargo estaba dado por terminado y aun así se quedó veinte horas marcado como «en curso». No es un fallo: el panel distingue entre «lo has escrito» y «está funcionando de verdad delante de ti». Hasta que no está sirviendo, no cuenta. Que es justo lo que hace falta cuando quien trabaja tiene la costumbre de dar cosas por hechas antes de tiempo.

De paso, la pantalla nueva se quedó a medio hacer y sin guardar mientras se traían cinco cambios pendientes de la rama principal. Se salvó por los pelos apartando el trabajo a un lado, trayendo lo de fuera y volviéndolo a poner encima. Un poco más de despiste y adiós tarde.

Wins:

  • El botón de encender y apagar ya te dice que está haciendo algo.
  • Pantalla de sesiones abiertas, accesible desde la barra de navegación.
  • La función de proponer con inteligencia artificial por fin arranca.
  • Tres encargos cerrados y todo el trabajo guardado y sincronizado.

Loses:

  • Llevaba semanas creyendo que lo de la inteligencia artificial fallaba por otra cosa.
  • Media pantalla nueva sin guardar mientras se tocaba la rama principal. Rozando el desastre.

theObserver

La máquina iba justa de memoria. Había tres servidores encendidos que no servían a nadie, olvidados ahí de sesiones anteriores. Apagarlos liberó unos 730 MB: de 3,3 GB libres a 3,9 GB. Nada de ingeniería fina, simplemente apagar lo que nadie usa. A alguien se le había olvidado.

Ya está en marcha la pantalla de estadísticas: entras y ves cuánto tiempo se queda cada encargo en cada etapa y lo que ha costado. Sirve para saber dónde se atasca el trabajo de verdad, en vez de por intuición.

Y las tareas que dependen unas de otras ahora se ven. Cada cadena de dependencias tiene su color propio, y ese mismo color aparece en las dos tareas enlazadas, así que de un vistazo sabes qué va con qué. Si pasas el ratón por encima, te explica de qué va el enlace.

Ahí llegó el momento bochornoso del día. Una tarea aparecía con su borde de color pero sin enlace visible por ningún lado. Me pasé un buen rato defendiendo que el enlace estaba en los datos, que tenía que estar, que lo había comprobado. Hasta que el humano hizo lo obvio, quitarlo y ver qué pasaba: era basura de una prueba anterior de la propia sesión que montó esto. O sea, mía. Nadie había creado ese enlace nunca.

Wins:

  • 730 MB de memoria recuperados apagando lo que sobraba.
  • Pantalla de estadísticas funcionando: tiempos por etapa y costes.
  • Enlaces entre tareas con color propio por cadena y explicación al pasar el ratón.

Loses:

  • Un archivo se hinchó hasta 46 MB con un cambio que se repetía dentro de sí mismo. Alguien no miró.
  • Insistí en que un enlace existía cuando lo había dejado yo en una prueba.
  • Para dar por validada la pantalla de estadísticas hubo que saltarse una regla del propio sistema: marcar algo como «error» lo deja en un callejón sin salida del que no se puede avanzar.
  • Al retirar el trabajo terminado, el registro se queda a medias y hay que tocarlo a mano.
−10 días

dev-dashboard

Tenía un encargo atascado en el panel: el número 45. Un encargo es una tarea que dejo apuntada para que la IA la haga sola. Este arrancaba, aguantaba 24 segundos y se moría. El culpable estaba en la pieza de theObserver que ejecuta los encargos: una comprobación mal hecha daba por malo un encargo que estaba perfectamente bien. Corregida la comprobación, el 45 pasó entero y sin quejarse.

Luego, el error que más rabia daba. Terminabas de revisar un encargo, pulsabas el visto bueno y la pantalla soltaba un “load failed”, como si algo hubiera petado. No había petado nada. Lo que pasaba es que, al aprobar, el sistema se reiniciaba para aplicar el cambio y colgaba el teléfono antes de decirte “recibido”. Ahora primero contesta y luego se reinicia: pulsas, ves la confirmación y a otra cosa.

De paso miré el tablero y me encontré cuatro tareas terminadas criando polvo en la columna de “En curso”. Terminadas, revisadas y ahí plantadas, porque el humano encargado de moverlas —un servidor— por lo visto tiene el tablero de adorno. ¿Para qué monto un panel de estado si luego el estado lo pongo al día cuando me acuerdo? Movidas a “Hecho”. Ahora el tablero dice la verdad: solo queda una cosa de verdad en marcha.

Y una mejora menos vistosa pero que me importa más. Estuve mirando cómo lee la IA los encargos que le escribo, y la conclusión es incómoda: cuando no entiende uno, casi nunca es porque falte una casilla en el formulario. Es porque la mitad de la información se quedó en mi cabeza y no la escribí, convencido de que “se entiende solo”. Así que en vez de llenar la plantilla de campos obligatorios, la retoqué para que lo importante sea sacar ese contexto que doy por sabido. Para las semanas que lleva el sistema en pie, que el cuello de botella sea yo explicándome mal tiene su gracia.

Wins:

  • El encargo 45, desatascado y terminado.
  • El susto del “load failed” al dar el visto bueno, eliminado: ahora confirma antes de reiniciarse.
  • Tablero limpio: cuatro tareas pasadas a “Hecho”.
  • Plantilla de encargos retocada para capturar lo que se me olvida contar.

Loses:

  • Cuatro tareas llevaban días terminadas sin que nadie las moviera. Nadie soy yo.
  • El error del visto bueno llevaba tiempo asustando sin motivo y hasta hoy no me paré a mirar por qué.

Lección del día: cuando la IA no entiende un encargo, no suele faltar un campo en el formulario; falta lo que se quedó en mi cabeza sin escribir.

dev-dashboard

−11 días

dev-dashboard

Tenía dos encargos aprobados que no acababan de cerrarse nunca. Mi teoría era que se me había olvidado algún paso. Peor: el sistema intentaba juntar ese trabajo con el resto, se encontraba con que dos cambios tocaban el mismo sitio, y se quedaba parado esperando a que alguien decidiera. Y no había nadie. Resulta que despedíamos al asistente ANTES de intentar juntar nada, así que cuando el cierre fallaba ya no quedaba nadie con quien resolverlo. El trabajo moría en silencio y yo seguía aprobando cosas tan ancho, sin comprobar jamás si de verdad se cerraban. Días abriendo el panel a diario con dos cadáveres debajo y ni los olí. Menuda revisión la mía.

Hoy resolví los dos choques a mano y esos encargos quedaron cerrados por fin. Y cambié el flujo para que no vuelva a pasar: ahora, cuando entras a validar un encargo, el panel te enseña antes de decidir si ese trabajo choca con otros cambios. Y si aun así apruebas y el cierre falla, la consola sigue abierta: le pides allí mismo que arregle el choque, en vez de quedarte hablando con una silla. En total, cuatro encargos cerrados en el día.

Wins:

  • Los dos encargos atascados, resueltos y cerrados.
  • El panel avisa de los choques antes de aprobar, no después del desastre.
  • Si el cierre falla, queda alguien al otro lado para arreglarlo.
  • Cuatro encargos cerrados hoy.

Loses:

  • El fallo estaba a la vista cada día y el humano al mando, o sea yo, sin enterarse de nada.

lateralbuilder-pipeline

Descubrimiento humillante. Este sistema vive de recoger noticias cada día para convertirlas en contenido. Pues llevaba desde el día 19 sin recoger nada, porque la recogida automática que las instrucciones del proyecto daban por puesta en marcha… no se puso nunca. Estaba escrita, prometida y sin existir. Tres días con el grifo cerrado y aquí nadie miró. ¿Tú para qué tienes ojos exactamente?

De propina, encontré que las tres últimas recogidas que sí se lanzaron murieron las tres a la vez, en el mismo segundo, cortadas por el propio asistente. Ni una llegó a terminar.

Hoy la dejé funcionando de verdad: la recogida corre sola cada mañana a las 7:00, sin que nadie tenga que acordarse. Comprobé que las fuentes siguen vivas y entraron 26 artículos nuevos.

Wins:

  • La recogida diaria por fin existe: cada mañana a las 7:00, sola.
  • 26 artículos nuevos y las fuentes comprobadas, vivas.

Loses:

  • Tres días sin recoger nada y el humano sin notarlo.
  • Lo que figuraba como automático desde hace semanas nunca lo fue.
−12 días

dev-dashboard

Le he dado un buen repaso a la parte donde apunto lo que queda por hacer. Ahora, cuando escribo un pendiente largo, la cajita crece conmigo en vez de esconder el texto. Las tarjetas tienen sombra al pasar el ratón por encima, y los botones de cada tarea solo aparecen cuando los necesitas: pasas el cursor y ahí están, quitas el cursor y desaparecen (salvo si la tarea está en marcha, que se quedan fijos).

También he arreglado un problema de convivencia: si mando dos encargos al mismo proyecto a la vez, antes podían terminar a la vez y pisarse el trabajo el uno al otro. Ahora hacen cola y entran de uno en uno, como personas civilizadas. Y de paso, cada encargo estrena su propio número desde el principio, porque dos encargos simultáneos podían acabar con el mismo nombre y montarse un lío.

Lo mejor del día fue lo de la consola. Añadí una consola dentro del detalle de cada encargo, para ver qué está pasando mientras se cocina. La añadí, refresqué, nada. Refresqué otra vez, nada. Pues resulta que el panel llevaba 40 minutos enseñándome una versión vieja: la consola funcionaba desde hacía horas y yo ahí, dándole a recargar como si eso fuera a cambiar algo. Menudo detective estoy hecho.

  • Wins: cajita que crece al escribir, botones al pasar el ratón, cola de encargos por proyecto, números de encargo sin colisiones, consola dentro de cada encargo.
  • Loses: 40 minutos mirando una versión vieja sin sospechar nada.

instagram-insights

Ya está dentro el apartado de Lecciones. La idea: el sistema analiza mis vídeos y va apuntando lo que aprende de ellos. Yo entro al apartado, leo las lecciones una a una, y si alguna dice una tontería, la corrijo con un botón. También puedo buscar entre ellas escribiendo directamente. Vamos, que el panel ya no solo enseña números: empieza a acumular criterio.

El trabajo quedó unido a la versión principal y lo di por terminado. Terminadísimo. Salvo por un detalle: el panel que yo miro no enseñaba nada de todo esto, porque la copia que lo alimenta se había quedado ocho cambios por detrás. O sea, que celebré la meta sin comprobar si el balón había entrado. Se arregló poniendo la copia al día, pero el ridículo ya estaba hecho.

  • Wins: apartado de Lecciones funcionando, con corrección por botón y búsqueda.
  • Loses: dar algo por terminado sin mirar si yo mismo podía verlo.

lateralbuilder

El blog se leía mal: columna estrecha y letra pequeña. Llevaba semanas escribiendo entradas y por lo visto ninguna me la había leído yo en condiciones, porque si no me habría dado cuenta antes de que aquello parecía un prospecto de farmacia. Ya está corregido: más ancho y letra más grande. Eso sí, el cambio todavía no está publicado en la web que ve todo el mundo; de momento solo lo veo yo.

También perseguí un error que decía que no se podía acceder al sitio. Media hora investigando para descubrir que la configuración estaba bien desde el principio: el aviso venía de un servidor viejo que seguía por ahí encendido. Un fantasma. Asustado por un fantasma, así estamos.

  • Wins: blog más ancho y legible (pendiente de publicar).
  • Loses: media hora cazando un error que no existía, y unas semanas sin leerme mi propio blog.

theObserver

Tres de mis proyectos no se podían usar desde el móvil: abrías la página y se quedaba cargando para siempre, sin error ni explicación. Ya está arreglado en los tres; ahora se abren desde el móvil como cualquier web normal.

Y una decisión que viene directa del ridículo de instagram-insights: a partir de hoy, un encargo no se da por cerrado cuando el código queda guardado en su sitio, sino cuando el cambio se puede ver funcionando donde yo lo uso. Porque guardado-pero-invisible es exactamente la trampa en la que caí esta mañana, y no pienso caer dos veces. Bueno, no pienso caer dos veces esta semana.

  • Wins: tres proyectos usables desde el móvil, y una definición de “terminado” que por fin significa terminado.
  • Loses: haber necesitado tropezar para redefinir lo obvio.
−13 días

instagram-insights

Hasta ahora el panel te decía cuántos likes tuvo cada publicación. Bien, ¿y qué? Un número suelto no te dice si la cosa va bien o mal. Así que ahora hay una página nueva, la de la semana: entras y te encuentras un texto escrito que compara lo que publicaste estos siete días contra todo lo que llevas publicado. No “este reel tuvo 400 likes”, sino “este reel funcionó por encima de tu media, este otro se quedó corto”.

Por el camino hubo que tirar la primera idea a la basura. El sistema que ya existía para sacar conclusiones necesitaba al menos tres publicaciones parecidas para comparar entre sí. Y una semana normal tiene cinco publicaciones en total, de tipos distintos. No daba. Hubo que darle la vuelta: en lugar de comparar unas con otras, comparar cada una contra tu propio histórico.

El otro cambio bueno fue decidir que la semana va de lunes a domingo y punto. Antes se contaban “los últimos siete días” desde el momento en que mirases. Suena inofensivo hasta que ves el resultado: un reel publicado el domingo por la noche entraba en el informe con dos horas de vida, y ahí quedaba, al lado de otro que llevaba seis días recogiendo visitas. Parecía un fracaso y no lo era. Semanas midiendo mal por un detalle que nadie se paró a pensar.

También, cuando el texto menciona un vídeo, pasas el ratón por encima y aparece la miniatura con su título. No tienes que irte a buscar de cuál te está hablando.

Y a las 16:24, casi de salida, alguien cayó en que todo esto había que ejecutarlo cada lunes por su cuenta. Dos minutos costó dejarlo montado. Dos minutos, después de un día entero. Está programado para dispararse los lunes a las 08:30, pero apagado: falta que un humano idiota le dé al interruptor.

Wins:

  • Página de la semana funcionando: análisis escrito de cada publicación contra tu histórico.
  • Ventana fija lunes-domingo, se acabó comparar peras con reels de dos horas.
  • Miniatura al pasar el ratón sobre un vídeo mencionado.
  • Ejecución semanal automática lista y programada.

Loses:

  • El motor de conclusiones que ya existía no servía para volúmenes semanales. A rehacer.
  • 36 de 48 tareas hechas. Quedan doce colgando.
  • La automatización sigue desactivada porque a nadie le dio por encenderla.

lateralbuilder

La portada estaba presidida por una consola de ordenador falsa. Fuera. Ahora hay una bienvenida, una descripción de qué es esto y enlaces en dorado a la bitácora y a la página de en qué ando. Cosas que se leen en lugar de cosas que parecen de hacker.

El blog y la página de “ahora” tenían anchos distintos de texto. Detalle mínimo, pero se notaba al saltar de una a otra: la lectura se descolocaba. Ahora miden lo mismo.

Lo mejor del día es la barra de actividad. Ya mostraba cuánto se trabaja cada día, pero todo era el mismo bloque indistinguible. Ahora está partida por colores: código en dorado, contenido, documentación. De un vistazo ves si un día fue de programar o de escribir, con su leyenda al lado.

Y ahí hubo un fallo divertido. Cuando un día tenía muy poquito de algo, su trocito de color medía uno o dos píxeles. O sea: invisible. Estaba pintado, existía, y no lo veía nadie. Ahora cada trozo tiene un mínimo de cuatro píxeles para que se distinga.

Y sí, esta vez el trabajo se hizo en una rama aparte en lugar de escribir directamente sobre lo que hay publicado. Aplausos por hacer lo que se debería hacer siempre.

Wins:

  • Portada con texto de verdad en lugar de una consola decorativa.
  • Blog y “ahora” con la misma anchura: se lee igual en las dos.
  • Barra de actividad con colores por tipo de trabajo y leyenda.
  • Trabajo aislado en una rama, sin pisar nada ajeno.

Loses:

  • Segmentos de uno o dos píxeles, o sea invisibles, hasta que se corrigió.
  • Seis rediseños seguidos hasta dar con algo presentable. Al ojo le costó.

lateralbuilder-pipeline

Esto convierte noticias en piezas para Instagram y X. Tenía un problema de fondo: la primera imagen del carrusel repetía datos sueltos sin decir de qué iba la cosa. El que pasa el dedo por Instagram no tiene contexto, y si en la primera pantalla no entiende qué ha pasado, sigue de largo. Ahora esa primera imagen cuenta la historia entera en una frase: qué ha pasado, quién y de dónde sale el dato.

Al final de cada carrusel había una imagen genérica de “fin”. Inútil. Ahora hay una tarjeta con la foto de la cara recortada en círculo, el nombre de la cuenta y dos botones: seguir y guardar. Lo lógico, vaya, cuando alguien acaba de leerse tu contenido entero.

Las historias ya no salen como imágenes quietas: salen como vídeos con movimiento. Costó, porque al principio arrancaban con un fogonazo blanco y las animaciones iban a trompicones. Arreglado.

Y lo más entretenido: las noticias vienen con gráficos que no son tuyos, y publicarlos tal cual es meter la mano donde no debes. La solución fue no copiarlos. El sistema mira el gráfico original, entiende qué dice, y lo vuelve a dibujar desde cero a bolígrafo con datos reales. Catorce gráficos redibujados así, en trece noticias. Todo con la misma pinta, todo propio.

Wins:

  • Primera imagen del carrusel: ahora se entiende la noticia sin haberla leído antes.
  • Tarjeta de perfil con foto y botones de seguir y guardar al cierre de los trece carruseles.
  • Historias en vídeo con movimiento, sin fogonazo blanco ni tirones.
  • Catorce gráficos redibujados a mano en estilo propio, sin usar los ajenos.

Loses:

  • La primera versión del carrusel llevaba tiempo enseñando datos sin contar la noticia. Nadie lo miró desde fuera.
  • La exportación en vídeo salió rota a la primera y hubo que pelearse con ella.

theObserver

Este era el que iba a limitarse a guardar registros de lo que hacía la máquina. Ha acabado siendo otra cosa: un tablero donde encargas trabajo y lo ves avanzar.

El recorrido completo ya funciona. Escribes qué quieres, la máquina propone cómo hacerlo, tú lo apruebas o no, se implementa, lo revisas y se incorpora. Tú decides en cada paso, desde el tablero, sin tocar nada más.

Lo más útil es el filtro de entrada. Antes toda petición pasaba por la fase de “pensar cómo hacerlo”, incluso las tontas. Cambiar una palabra en un botón no necesita reunión de ideación. Ahora se mira primero si la tarea es trivial y, si lo es, se hace directamente. Se salta el paso.

El tablero además se explica solo: cada tarea tiene su color según en qué punto está, los iconos cambian, y hay explicaciones al pasar por encima. Eso costó bastantes vueltas hasta quedar decente.

Wins:

  • El ciclo entero funciona de principio a fin, con aprobación tuya en cada paso.
  • Filtro que detecta tareas triviales y las hace sin dar rodeos.
  • Tablero legible: colores por estado, iconos que cambian, explicaciones al pasar el ratón.

Loses:

  • La interfaz necesitó ronda tras ronda de retoques. A la primera, nada.
  • Se descubrió que había un control rechazando el fichero de estado; hubo que rodearlo.
−14 días

instagram-insights

Cambié la contraseña de Instagram sin pensarlo dos segundos y con eso invalidé el permiso que le deja al panel pedir sus propias estadísticas. Lo regeneré. Y ya que estaba, el panel enseña ahora, arriba del todo, cuántos días le quedan a ese permiso antes de caducar. Entras, lo ves, y sabes si toca renovarlo esta semana o el mes que viene. Hasta hoy la forma de enterarse era que un día dejara de bajar datos y ponerse a investigar por qué.

El agente que busca inspiración ya no se limita a mirar lo mío. Le pides ideas y ahora también trae vídeos de otras cuentas, de ese formato de gente hablando a cámara sin más. Sirve para poner al lado lo tuyo y lo suyo y ver qué hacen ellos que tú no.

También dejé la sesión apuntando por fin a la cuenta correcta, la de albasallow. Lista, colocada, sin estrenar: no llegué a lanzar ni una petición con ella porque tenía el tráfico en pausa. Preparar la herramienta y guardarla sin usarla, todo un clásico.

Y el momento estelar: toqué los estilos, abrí la página, seguía igual de rota. Un rato mirando la pantalla convencido de que el código estaba maldito, hasta caer en que lo que tenía delante era la versión anterior. Enhorabuena. Lo de los seguidores, que tampoco aparecen, sí que no es culpa del código: es que la sesión está comprometida.

  • Wins: contador de días de vida del permiso en el panel; agente de inspiración recogiendo vídeos ajenos para comparar; sesión de la cuenta buena preparada.
  • Loses: rompí el acceso yo solito cambiando la contraseña; media hora peleándome con unos estilos que ya estaban bien; la sesión nueva sigue sin usarse.

lateralbuilder

Abrí el proyecto a ver qué quedaba pendiente y lo primero fue buscar un fichero de tareas que no existe. Ahí sigo, buscando cosas donde no están.

Lo que sí funcionó: el recopilador que repasa mis repositorios y publica el resumen del trabajo del día. Del 19 salieron 39 cambios y 5.569 líneas nuevas repartidas en 5 repositorios. La recopilación entera barre 553 cambios de 22 repositorios sin quejarse. Publiqué el resumen del día, y otro más al cerrar.

Y una idea que quiero meterle: distinguir en ese resumen lo que es escribir documentación de lo que es escribir código. Lo pregunté esperando que fuera un lío y resulta que sale gratis, porque el recopilador ya se descarga qué ficheros toqué y cuántas líneas de cada tipo. Estaba ahí, delante de mí, sin usar.

  • Wins: resumen del día publicado dos veces sin un solo fallo; confirmado que separar documentación de código no cuesta trabajo extra.
  • Loses: perdí el arranque buscando un fichero de tareas inexistente; la separación documentación/código sigue siendo una idea, no una función.

lateralbuilder-pipeline

Este es el que convierte noticias en piezas listas para publicar, y hoy es el día en que por fin cierra el círculo entero. Entra una noticia por un lado y sale algo publicable por el otro, sin saltos a mano en medio.

La pieza que faltaba era sacar las imágenes. Ahora, desde la misma pantalla donde repaso y apruebo noticias, hay un botón que te descarga las historias y los carruseles ya convertidos en imágenes, todo junto en un archivo comprimido. Antes eran diseños que vivían dentro de la web y no había forma de llevárselos a Instagram. Al lado quedó una lista con todo lo que has descargado, ordenado por fecha, que se acuerda de lo que había cuando vuelves a entrar.

Le eché encima las noticias de inteligencia artificial de la última semana: 39 pasaron por el proceso y 3 salieron convertidas en artículo completo, con su traducción, reescritura, ilustración y maquetado. Coste del día: 0,16 $ de los 5 $ que me doy de margen. Un despilfarro.

También arreglé la navegación, que era un desastre: cada página tenía su menú a su aire, con tamaños distintos y sitios distintos. Ahora es el mismo en todas menos en una, universo, que se quedó fuera. Y cambié cómo se titulan los carruseles: antes el título era un adorno, ahora tiene que contarte de qué va la pieza antes de que decidas seguir leyendo.

  • Wins: el círculo completo de noticia a pieza publicable; descarga de historias y carruseles como imágenes desde la propia pantalla de curación; 3 artículos terminados; menú por fin igual en todas partes; títulos que informan.
  • Loses: universo se quedó sin menú; otro error de estilos en el exportador que tuve que perseguir; de 39 noticias solo 3 llegaron a artículo.

theObserver

Día de escribir el plan, no de picar. La idea: poder lanzar varios encargos a la vez, que trabajen solos en paralelo, y que yo pueda entrar a ver cómo van. Quedó descrito de punta a punta y partido en 57 tareas repartidas en 7 fases. También describí la pantalla donde validaré cada encargo: los pasos que ha dado, qué tiene que cumplir para darlo por bueno, y un enlace directo para abrirlo y verlo funcionando con mis propios ojos.

Lo importante del día fue un agujero que descubrí a media conversación. El Cosechador, que es lo que recoge todo lo que pasa en mis sesiones de trabajo, no habría visto ni uno solo de estos encargos. Ninguno. Porque cada encargo trabaja en su propia carpeta aparte, y el Cosechador solo mira donde viven mis proyectos de siempre. Habría lanzado tareas autónomas durante semanas convencido de que se estaban registrando, y por dentro, silencio absoluto. Salió hablando, no revisando: si no llego a preguntarlo en voz alta, se queda ahí escondido.

Quedó anotado para arreglar, junto con el resto: el orquestador que reparte los encargos ya está hecho, y confirmé que puede llevar varios encargos a la vez sobre un mismo proyecto sin pisarse. 41 cambios subidos en la rama del ciclo de encargos. Eso sí, la rama principal lleva 15 sin subir. Ahí siguen, criando polvo en mi máquina, porque el humano que maneja esto se olvida de cerrar lo que abre.

  • Wins: ciclo de encargos descrito entero y partido en 57 tareas; pantalla de validación especificada; orquestador funcionando y varios encargos simultáneos confirmados; agujero del Cosechador detectado antes de construir encima.
  • Loses: el Cosechador es ciego a los encargos y sigue siéndolo; 15 cambios de la rama principal sin subir; cero código nuevo del ciclo más allá del núcleo.
−15 días

dev-dashboard

Tengo un panel en el navegador que enseña todos los proyectos que viven en la misma máquina, con sus sesiones abiertas. Hoy quería entrar a una sesión que llevaba tres días viva trabajando en instagram-insights. La sesión estaba ahí, funcionando, respondiendo. Pero desde el panel, nada.

Investigando el porqué salió la joya del día: de los tres botones de control del panel, dos son decorados. Le das, parece que pasa algo, y lo único que hacen es copiarte el comando al portapapeles. No lo ejecutan. Están ahí desde hace meses fingiendo. Y el humano encantado, dándole a botones que no hacen nada y sin enterarse de que lo que él creía “abrir la sesión” era en realidad “copiar un texto”. ¿No te habías dado cuenta, zoquete? Se ve que revisar lo que uno mismo construye es para otros.

Lo demás está bien: el panel se ve, el acceso remoto funciona, la máquina responde. El problema no era la sesión, era el panel mintiendo con cara de póker. Ah, y por el camino la sesión de instagram-insights desapareció de la lista sin dar explicaciones.

  • Win: identificado por qué no se podía abrir nada desde el panel.
  • Win: descartado que el fallo estuviera en la sesión de trabajo, que seguía viva y coleando.
  • Lose: dos de tres botones son puro atrezzo desde vete tú a saber cuándo.
  • Lose: una sesión se esfumó de la lista y nadie sabe por qué.

instagram-insights

Este panel baja las estadísticas reales de mi cuenta de Instagram —cuánta gente ve cada cosa, cuántos guardan, cuántos comentan— y las guarda en casa para poder mirarlas con calma.

Ayer la cuenta se bloqueó. La sospecha inmediata: el proceso que sale a mirar vídeos de otras cuentas para coger ideas se había pasado de listo y Instagram lo había tomado por un robot. Así que primero cortar y luego preguntar: apagué ese proceso entero, tanto el temporizador que lo lanza solo como un interruptor general que deja las cinco funciones de rastreo muertas por dentro. Los temporizadores de mi propia cuenta siguen funcionando igual, esos no molestan a nadie.

Con la hemorragia parada, a mirar el registro. Once horas seguidas de errores de permisos, desde las 22:05 del 16 hasta las 09:05 del 17. Y aquí es donde el culpable se cae: la última vez que ese proceso salió a mirar vídeos ajenos fue el 15 a las 17:21. Un día entero sin hacer nada, y el bloqueo llega después. Las cuentas no salen. Sospechoso equivocado.

Aun así se queda apagado, que para eso está apagado. Y cuando vuelva a encenderse será con otra cuenta, no con la principal. Aprender a no jugarse la cuenta buena, aunque sea a base de bloqueos.

  • Win: rastreo cortado en dos sitios distintos, sin depender de que uno de los dos falle.
  • Win: descartado el sospechoso obvio mirando el reloj en vez de suponiendo.
  • Lose: cuenta bloqueada y todavía sin saber por qué.
  • Lose: se estaba usando la cuenta principal para esto. Ahora ya sabemos que era mala idea.

lateralbuilder

Este es mi sitio personal, el escaparate y la bitácora. Y llevaba meses con un agujero tonto: en GitHub hay un cuadradito por día que se pone verde cuando trabajas. El mío estaba en blanco. Todo el trabajo hecho, todos los días currando, y el calendario diciendo que no había tocado un teclado.

El motivo, cuando salió, es de sonrojo: los commits iban firmados con un correo que no es el mío. Iban a nombre del asistente. Meses de trabajo atribuidos a otro por no mirar una línea de configuración una vez. Genio absoluto. El humano ahí, produciendo a destajo para que el mérito se lo llevara literalmente el ordenador.

Arreglado eso, me puse con el recuento de líneas escritas. Antes solo miraba la rama principal de cada proyecto, así que todo lo que se hace en paralelo —que es casi todo— no contaba. Ahora recorre todas las ramas de todos los repos, y si uno falla lo reintenta en vez de rendirse; si aun así no puede, lo salta y avisa en vez de dar un número falso.

Y luego lo que quería: que esto se haga solo cada noche a las 23:58, sin que yo tenga que acordarme. Se calcula, se prepara el cambio, se aprueba y se publica sin manos.

La prueba de fuego llegó sola. Justo cuando iba a lanzarlo, GitHub se cayó. Dos horas y media largas sin responder. Lo fácil era abortar y volver mañana. En vez de eso dejé un par de vigilantes preguntando cada dos o tres minutos si ya había vuelto. A las 18:19 GitHub resucitó y todo el proceso arrancó solo, sin que yo tocara nada. Resultado: 523 commits de 22 repos recontados, y los días que faltaban —del 14 al 17— ya aparecen en la web.

También decidí algo de contenido: no habrá una página listando mis repos, no encaja con lo que quiero que sea esto. Las herramientas de otros las comentaré en Instagram, que es donde tiene sentido.

  • Win: los commits ya cuentan como míos, después de meses regalándoselos a un correo ajeno.
  • Win: el recuento mira todas las ramas, no solo una, y aguanta fallos sueltos sin mentir.
  • Win: el proceso nocturno sobrevivió a una caída de GitHub de dos horas y media y se ejecutó solo al volver.
  • Lose: el fallo del correo llevaba meses ahí, a la vista, y nadie lo miró.
  • Lose: hasta hoy los números de líneas escritas se quedaban cortos y me los creía tal cual.
−16 días

instagram-insights

Los índices de puntuación son números sueltos: un 7, un 43, un 82. Y hasta hoy no te decían nada. Ni si eso es bueno, ni de dónde sale.

Ahora, cada índice sale con color. Verde, ámbar, rojo: de un vistazo sabes si vas bien sin pararte a pensar. Y si dejas el ratón encima, se abre un cartelito que te explica qué mide ese número exactamente. Está en los nueve sitios donde aparecen puntuaciones: el panel principal, la lista de vídeos, el plan de rodaje, los borradores y las fichas de publicación. Antes cada pantalla lo pintaba a su manera; ahora es el mismo componente en todas, así que se ve igual en todas partes.

La ficha del plan de rodaje también dice ahora por qué algo puede funcionar. No solo «graba esto», sino el motivo. Que es lo que uno quiere saber cuando se planta delante de la cámara.

Y hay una cosa que sigue sin hacerse: el temporizador de ideas. La idea es que cada mañana a las ocho la app tenga ideas nuevas esperándote, sin que tú pidas nada. Ahora mismo funciona solo cuando alguien se acuerda de darle al botón. Que es justo el problema: depende de que el humano se acuerde, y ya sabemos cómo va eso.

  • Wins: los índices se entienden solos, con color y explicación, y por fin igual en las nueve pantallas. El plan de rodaje razona sus recomendaciones.
  • Loses: el temporizador de las 08:00 sigue en la lista de pendientes. Identificado, descrito, y sin escribir una sola línea.

theObserver

Hasta hoy, para apuntar una tarea en el tablero de un proyecto había que abrir una terminal y escribir un comando. Con su sintaxis, sus comillas y sus errores de dedo. Un filtro de entrada absurdo para algo tan tonto como «recuerda que hay que arreglar esto».

Ahora entras al roadmap en el navegador, rellenas quince campos en un formulario y le das a guardar. La tarea aparece en el proyecto que le hayas dicho. Sin terminal, sin memorizar nada.

Lo interesante está debajo. No hay base de datos. Cuando guardas desde la web, lo que se escribe es directamente el fichero de estado del proyecto, el mismo que se lee desde la terminal y el mismo que ves si abres el proyecto a mano. Un solo sitio donde vive la verdad. Nada de un tablero por un lado y un fichero por otro que se van separando poco a poco hasta que ninguno de los dos es fiable.

  • Wins: el tablero se gestiona igual desde la web que desde la terminal, y ambos escriben en el mismo sitio. Cero sincronización que pueda romperse.
  • Loses: quince campos en un formulario son quince campos. Nadie los ha mirado con ojo de «esto lo va a rellenar una persona real un martes por la tarde», y a alguien le va a dar pereza a la tercera tarea.
−17 días

dev-dashboard

Ahora cada proyecto tiene en su tarjeta un botón rojo de apagado. Lo pinchas y se cierran de golpe todas las sesiones de Claude que ese proyecto tenga abiertas, en las dos máquinas donde trabajo, sin abrir una terminal ni acordarme de cómo se llamaba cada sesión. Antes eso era ir máquina por máquina buscando procesos con una linterna.

Lo otro es más aburrido y hacía más falta: las cuatro pantallas del panel (el tablero, la lista de proyectos, el roadmap y el mapa del ecosistema) eran cuatro islas. Entrabas en una y para volver, atrás del navegador. Ahora las cuatro llevan la misma barra arriba, en el mismo sitio, con los mismos enlaces. Tardé tres intentos en dejarla quieta en el mismo punto de las cuatro páginas, que es exactamente el tipo de cosa que un humano competente clava a la primera.

También toqué integrar el trabajo que venía de otra rama sin cargarme la reordenación de pendientes que tenía a medias. Salió limpio, cinco cambios entraron sin pelearse.

  • Wins: cerrar todas las sesiones de un proyecto con un clic; navegación igual en las cuatro vistas; integración de la rama sin perder nada por el camino.
  • Loses: la barra de navegación necesitó varias pasadas para quedarse donde debía.

instagram-insights

Aquí el momento del día. La herramienta dibuja bocetos de las escenas de un vídeo antes de grabarlo, y llevaba tiempo escupiendo ocho escenas prácticamente idénticas. Yo culpando al que dibuja. Pues no: el fallo estaba en la lista de posiciones de cámara que le paso. No incluía “pantalla partida”. Y cuando le pides algo que no está en su lista, no protesta: elige lo más parecido que encuentra y sigue tan tranquilo. Ocho veces lo mismo. No te habías enterado en semanas, campeón.

Lo arreglé, volví a probar, y seguía dibujando mal. Así que marcha atrás a la versión anterior, que era peor sobre el papel y mejor en la práctica.

También miré traerme de otro proyecto la parte de descargarse un reel y transcribir lo que se dice en él. Está escrito en otro lenguaje, así que no es copiar y pegar: hay que rehacerlo.

Y dejé escrito el plan completo del sistema que propondrá ideas para borradores solo: qué tiene que hacer, qué datos guarda, en qué orden se construye, nueve pasos. Escrito, no hecho. Subí 62 ficheros y más de ocho mil líneas de las cuales cero hacen nada todavía. Documentación pura.

  • Wins: encontrada la causa real de los bocetos repetidos; especificación entera del sistema de ideas lista para implementar.
  • Loses: el arreglo del vocabulario no bastó y hubo que revertir; la descarga de reels no se puede reutilizar tal cual; el sistema de ideas sigue sin existir.

theObserver

Llevo meses queriendo un formato único para escribir encargos, y resulta que ya existía y se llama spec-kit. Primero se define qué se construye, luego el plan, luego el desglose en tareas, luego se implementa. Punto. Lo he montado aquí y lo adopto como método estándar para todo.

Con eso encima, la plantilla de encargo se ha quedado en cinco campos obligatorios: objetivo, qué espero y cómo sabré que está bien de verdad, no “a ojo”.

Y lo más útil: ahora, desde cualquier proyecto en el que esté, puedo escribir una tarea nueva en el tablero o editar una existente sin abrir el tablero. Escribes el encargo donde estás trabajando y aparece allí. Por dentro reutiliza el pintado que ya tenía otro proyecto en vez de copiarlo, así que si mejora allí, mejora aquí solo.

  • Wins: método de trabajo unificado para todo el ecosistema; crear y editar tareas del tablero desde donde sea; sin código duplicado.
  • Loses: nada roto hoy, lo cual es sospechoso.

trazo

Abrí el monitor de actividad por otra cosa y me encontré 68 procesos vivos comiéndose 1,4 gigas de memoria. Treinta y tres cadenas completas. La más antigua llevaba cinco días y cuatro horas ahí, sin hacer absolutamente nada.

El motivo es de manual. Cuando reiniciaba el servidor de la pizarra, mataba el proceso que atiende las peticiones y me quedaba tan ancho, porque el puerto quedaba libre. Pero por encima de ese hay otros tres vigilándolo, y esos ni se enteran de que su hijo ha muerto. Cada reinicio dejaba un cadáver con tres cuidadores. Cinco días haciéndolo.

¿Y por qué lo hacía así? Porque lo ponía en las instrucciones del propio proyecto. Instrucciones que escribí yo, que fueron ciertas en su momento, y que dejaron de serlo cuando cambié cómo arranca el servidor y no me molesté en actualizarlas. Todo matado, memoria recuperada y la nota reescrita para que diga lo que hay que hacer de verdad.

De paso me bajé gentle-ai para ver qué es: un configurador que te monta el entorno de trabajo con agentes de IA y detecta los que ya tienes puestos.

  • Wins: 68 procesos fantasma eliminados y 1,4 GB recuperados; causa entendida, no parcheada; instrucciones del proyecto corregidas.
  • Loses: cinco días acumulando basura sin enterarme; la documentación que lo provocó llevaba meses mintiendo y la había escrito yo.
−18 días

dev-dashboard

El panel que muestra todos los proyectos de una máquina de un vistazo ya tenía acceso directo a proyectos. Hoy le he colgado debajo las últimas cinco sesiones de trabajo: haces clic y se copia solo lo necesario para retomarla donde la dejaste. Nada de buscar a mano cuál era.

También he puesto un buscador que no hay que pinchar. Empiezas a escribir en cualquier parte de la página y filtra. Sin atajos que memorizar, sin poner el cursor en la cajita. Lo hice, no se veía, me pasé un rato mirando la pantalla como un pasmarote hasta caer en que seguía cargando la versión de ayer. Genio.

Luego repaso de documentación: había cuatro números en la franja superior (procesador, memoria, disco y carga) que llevaban ahí un tiempo sin estar documentados en ningún sitio. Nadie sabía qué eran. Ahora sí. Y de paso descubrí que dos cosas que figuraban como pendientes ya estaban hechas desde hace tiempo. ¿No te habías enterado, zoquete? Pues eso.

Lo mejor del día fue detectivesco: el registro de errores mostraba fallos de las tareas automáticas sin fecha, y todo apuntaba a que era cosa de hoy. Crucé ese registro con los archivos del día y resultó que los fallos fueron el 11 de agosto a la una y media de la tarde. Tres días muerto y ni te enteraste. Registro vaciado.

Wins:

  • Acceso directo a las últimas cinco sesiones, con reanudación en un clic
  • Buscador que filtra escribiendo, sin enfoque previo
  • Documentación puesta al día con lo que el código hace de verdad
  • Fallos antiguos fechados con precisión y registro limpio

Loses:

  • Un rato perdido mirando una pantalla que cargaba la versión de ayer
  • Dos funcionalidades terminadas seguían figurando como pendientes

elCosechador

La herramienta que convierte el trabajo diario en un diario escrito tenía un agujero: si un proyecto estaba en privado, sus días no salían. Y cuando lo pasabas a público, esos días ya no volvían. La decisión de publicar o no se tomaba una sola vez y no había vuelta atrás. El material no se perdía, se quedaba guardado esperando a nadie.

Hoy he hecho la repesca: cuando un proyecto pasa a público, se recuperan los días anteriores y se meten en el diario. Y de paso resuelve otro problema más general, el de añadir información a un texto ya aprobado sin tener que rehacerlo entero.

La parte que me gusta de cómo quedó: el modelo solo escribe el bloque nuevo. Lo demás es cortar y pegar. Así los bloques que ya diste por buenos quedan idénticos, no por confianza sino porque no hay forma de que cambien. El texto vuelve a aprobación con el contexto entero.

Salió un fallo al validar contra un día real: el panel mostraba una cifra rota porque estaba contando como entrada de diario un archivo que no lo es. Corregido.

Wins:

  • Repesca retroactiva funcionando y validada contra un día de verdad
  • Los bloques ya aprobados quedan intactos por construcción, no por buena fe
  • Cifra rota del panel arreglada
  • Especificación escrita antes de tocar código y conforme a los principios del proyecto

Loses:

  • El fallo del panel llevaba ahí desde antes y solo apareció al probar con datos reales

instagram-insights

Quería transcribir el audio de mis vídeos para poder analizar lo que digo, no solo los números. Respuesta: no se puede. Muestreé doce vídeos y todos vienen marcados como sin audio, incluso los siete que llevan sonido original. Instagram los entrega mudos. No es un fallo mío, es que no está. Anotado como pendiente por si algún día cambia.

Lo que sí salió: comparativa entre vídeos con datos hora a hora, como hace YouTube. Antes veía el resultado final de un vídeo pero no cómo había arrancado. Ahora sí, y puedo poner dos vídeos uno al lado del otro y ver dónde uno despega y el otro se queda plano.

Y un chat lateral para planificar vídeos con el histórico delante. Le cuentas la idea y te responde con lo que ya sabe de tus últimos diez vídeos, enlazándolos. En vez de escribir a ciegas y descubrir tres días después que esa idea ya la habías hecho peor.

También he vinculado los borradores con los vídeos publicados, para contrastar lo que creía que iba a pasar con lo que pasó. Spoiler: no acertarás. Pero al menos quedará escrito.

El momento bueno: publiqué un vídeo a las 18:40 y el sistema lo capturó en la hora cero. Es el primero con la curva de arranque completa desde el minuto uno.

Wins:

  • Comparativa de vídeos hora a hora, funcionando
  • Primer vídeo capturado desde el minuto uno de publicación
  • Chat de planificación con contexto de los últimos diez vídeos
  • Borradores vinculados a lo publicado para contrastar predicción y realidad
  • Cambio de nombre de cuenta completado sin romper nada

Loses:

  • La transcripción de audio está bloqueada por Instagram, no hay forma de sacarla
  • Intenté automatizar mensajes y me topé con los límites de la interfaz oficial de Meta

lateralbuilder

Mi web tenía una portada de cuando no había nada más: una consola con físicas que decía “estoy construyendo, juega”. Ahora que existen la página de en qué ando y el blog, esa portada ya no encajaba. Estaba vendiendo un sitio que ya no era ese.

Antes de tocar nada hice lluvia de ideas con tres opciones y elegí la tercera: foto y presentación arriba, la lección que aprendí hoy en medio, y abajo lo que funcionó y lo que no. Prueba de vida, básicamente. La idea es dejar de ser un escaparate de “estoy trabajando en algo” y pasar a ser un portafolio de cómo pienso.

La parte que menos trabajo dio y más me gusta: la lección del día y los aciertos y fallos no los escribo dos veces. Se sacan solos de la página de en qué ando. Escribo una vez, aparece en dos sitios.

La portada vieja no la he tirado. La he congelado con sus treinta y seis imágenes, guardada como fósil, sin enlace desde ningún sitio. Todo esto está hecho, pero todavía no es lo que ve la gente: la portada de siempre sigue en su sitio. Falta que un humano idiota lo revise antes de darle al botón.

Wins:

  • Portada nueva construida entera, con todas las rutas respondiendo
  • Lección y aciertos/fallos se sacan solos de la página de en qué ando
  • Portada vieja conservada como fósil con sus treinta y seis imágenes
  • Redefinición clara: de “juega con la consola” a portafolio de pensamiento

Loses:

  • La portada nueva sigue sin ser la que ve la gente, pendiente de revisión humana

theObserver

El mapa del ecosistema mostraba cómo se relacionan los proyectos entre sí, pero era pequeño y no contaba nada de cada pieza. Ahora se puede ampliar a pantalla completa: mapa a la izquierda, información del proyecto seleccionado a la derecha. Nada más. Salió funcionando en una hora.

Con el mapa grande apareció el problema de verdad: no se leían los nombres. Al principio pensé que era falta de contraste. No era eso: eran las líneas que unen proyectos pasando por encima del texto y tachándolo. Le he puesto un halo de fondo a cada nombre y ya se leen las ciento cuarenta y dos relaciones sin bizquear.

Repasando pendientes descubrí que una de las cosas que iba a apuntar como nueva —fichas explicativas de cada proyecto para gente no técnica— ya estaba medio hecha en elCosechador. Otra vez apuntando como pendiente algo que ya existe. Igual convendría mirar antes de escribir.

La otra la tenía mal colocada: los requisitos de un chatbot no son una funcionalidad que se implementa, son una norma de la casa. Se han movido a las normas, con una condición: cada regla tiene que traer el comando que permite comprobar desde fuera si se cumple. Si no se puede verificar, no es una norma, es una opinión. Y las opiniones no entran.

Todo esto, de momento, no es lo que ve la gente: los cambios siguen sin juntarse con el resto. Bloqueado ahí.

Wins:

  • Mapa del ecosistema ampliable con ficha del proyecto seleccionado
  • Ciento cuarenta y dos relaciones visibles y nombres por fin legibles
  • Los requisitos de chatbot reubicados como norma verificable, no como funcionalidad suelta

Loses:

  • Apunté como pendiente algo que ya existía a medias en otro proyecto
  • Los cambios de hoy siguen sin llegar a lo que ve la gente
  • Diagnostiqué mal el problema de legibilidad antes de acertar
−19 días

dev-dashboard

Ollama, la pieza que resumía mis jornadas dentro de mi propia máquina sin mandar nada fuera, ha desaparecido del servidor. Nadie sabe cómo. Sospechoso principal: el humano que administra esa máquina, o sea yo, que ni me había enterado de que faltaba hasta que la cosecha de elCosechador apareció rota. Ahora hay dos salidas y no son equivalentes: reinstalarlo (todo sigue en privado, nadie nota nada) o pasar el resumen a un servicio externo (funciona, pero mis datos salen de casa). La decisión queda en mi tejado, y ya sabéis lo que tarda ese señor en decidir.

Mientras tanto, la vista de roadmap del panel ya funciona de verdad: busca proyectos por nombre y por contenido, los ordena por prioridad de trabajo y manda al final los que no tienen nada pendiente. Y todos los frentes abiertos quedaron documentados en un único sitio, con su contexto y las trampas de cada opción, para que el humano no pueda decir que no sabía.

Wins:

  • Roadmap funcional: búsqueda, orden por prioridad y los proyectos parados al fondo.
  • Todos los pendientes abiertos documentados en un solo sitio, con contexto.

Loses:

  • La cosecha sigue rota hasta que un humano idiota (yo) decida qué hacer con Ollama.

instagram-insights

La búsqueda de creadores cruzó el charco: dos agentes rastreando Estados Unidos trajeron 33 cuentas nuevas con 816 vídeos, 29 de ellos muy relevantes. La base ya suma 149 cuentas, 3.668 vídeos y 129 candidatos de alta relevancia, frente a los 90 de ayer.

La otra pata del día fue el sistema de producción de contenido: le das un vídeo de tu habitación (uno de más de medio giga, sin despeinarse), lo trocea en fotogramas, evalúa las escenas y te propone mejoras, con un chat lateral para dirigirlo. Además, ya se pueden subir archivos de hasta 3 gigas con barra de progreso, que antes cualquier vídeo gordo se atragantaba.

El tropiezo: quise analizar 141 vídeos de Instagram y resulta que Instagram no entrega el audio cuando descargas un reel. Sin audio no hay transcripción, y sin transcripción no hay análisis. No es culpa mía, para variar.

Wins:

  • 33 cuentas nuevas de Estados Unidos y 129 candidatos de alta relevancia (ayer eran 90).
  • Sistema de producción completo: del vídeo en bruto a propuestas de escena, con chat para dirigirlo.
  • Subidas de hasta 3 gigas con progreso visual.

Loses:

  • 141 vídeos sin analizar porque Instagram no suelta el audio de los reels descargados.

lateralbuilder

Arrancó image-forge: un único sitio desde el que generar imágenes tirando de varios proveedores, en vez de pelearme con cada uno por separado. La primera fase ya está viva: genera imágenes de verdad y apunta cada una en un registro, todo sin necesitar todavía ninguna clave de pago.

Y el bochorno del día: el contador de actividad de la web decía que ayer hubo 7 aportaciones cuando en realidad fueron 30. ¿El motivo? Un filtro que descartaba todo lo que no firmara el humano en persona, o sea, casi todo, porque el humano hace meses que no es quien más teclea aquí. ¿Y quién configuró ese filtro sin revisarlo? El mismo humano. No te habías enterado, ¿eh, zoquete? Ya está arreglado: ahora cuenta todo el trabajo, lo firme quien lo firme.

También quedó sobre la mesa una propuesta para reorganizar los estilos de imagen en tres ejes y que no exploten las combinaciones. Pendiente de que la revise un humano, así que rezad.

Wins:

  • image-forge genera imágenes reales y lleva registro de cada una, sin gastar un céntimo aún.
  • El contador de actividad dice la verdad por fin: 30, no 7.

Loses:

  • Meses con el contador mintiendo porque nadie revisó un filtro puesto a lo loco.
  • El rediseño de estilos duerme hasta que el humano se digne a revisarlo.

lateralbuilder-pipeline

Día de poner orden en el sistema que convierte noticias en piezas para redes. Primero, documentación: ahora hay un texto que explica qué sabe hacer exactamente el pipeline, porque hasta hoy eso vivía solo en mi cabeza, que es un sitio poco fiable. Segundo, un arreglo molesto: al reescribir una pieza de blog, el exportador la duplicaba en vez de sustituirla; ya no.

Y tercero, la integración gorda: llevaba dos ramas de trabajo acumulando cambios sin juntar, más de una docena de tandas. Todo el trabajo de los carruseles tipados entró en la línea principal de un tirón, 49 ficheros actualizados y ni un solo conflicto. Cuando pasa eso, mejor no preguntar y seguir andando.

Wins:

  • El pipeline por fin tiene documentado qué sabe hacer.
  • Exportador sin duplicados al reescribir piezas.
  • Los carruseles tipados integrados de una pieza, sin conflictos.

Loses:

  • Doce tandas de cambios acumuladas sin integrar durante días; eso no debería pasar.

scrapper-negocios

Novela negra matinal: la máquina iba ahogada de memoria y el acusado era el scrapper. Investigamos y resulta que el scrapper ni siquiera estaba encendido. Estaba caído. Llevaba quién sabe cuánto muerto y el humano acusándolo con el dedo. El verdadero glotón era el entorno de desarrollo de la web, zampándose dos gigas y medio él solito. Moraleja: antes de acusar a alguien de comerse la nevera, comprueba que esté en casa.

De paso, limpieza de seguridad: había una clave de pago suelta en la configuración, de esas que si se escapan te cuestan dinero. Fuera. Queda solo el acceso por suscripción. ¿Cuánto tiempo llevaba ahí a la vista? Mejor no calcularlo.

La Operación 214 (el plan de vender webs a negocios de la zona) queda lista para la siguiente fase: los packs documentados, la página de venta terminada y el siguiente paso es contactar agencias. Los pendientes están apuntados con costes estimados: entre 35 y 45 dólares para cubrir 8 ciudades.

Wins:

  • Misterio de la memoria resuelto: el culpable era el entorno de desarrollo, no el scrapper.
  • Clave de pago fuera de la configuración; solo queda la suscripción.
  • Operación 214 lista para salir a vender: packs, página y próximos pasos con costes.

Loses:

  • El scrapper llevaba tiempo caído y nadie (yo) se había dado cuenta. Vigilancia de chichinabo.

theObserver

El proyecto que vigila a todos los demás estrenó nombre: ya no se llama como se llamaba, ahora es theObserver. ¿Y sabéis qué pasa cuando renombras la carpeta de un proyecto con trabajo a medias dentro? Que la sesión que estaba trabajando muere en el acto, con todo a medio hacer. ¿Y quién dio la orden de renombrar en el peor momento posible? El humano, claro, que no distingue una operación inocente de una granada sin anilla. Lección grabada a fuego.

Fuera del drama, el día fue productivo: el mapa del ecosistema quedó completo, con 29 entradas y sus relaciones declaradas como datos, no como dibujito decorativo. Y lo mejor: un auditor independiente que comprueba las normas del mapa sin creerse nada de lo que le cuentan. Si algo no cuadra, canta. Desconfiar de los datos por sistema: más proyectos deberían hacerlo, y más humanos también.

Queda pendiente que el humano valide el mapa. Sí, el mismo de la granada. Paciencia.

Wins:

  • Mapa completo del ecosistema: 29 entradas con sus relaciones declaradas.
  • Auditor independiente que verifica las normas sin fiarse de nadie.

Loses:

  • Una sesión asesinada a mitad de faena por un renombrado a destiempo. Culpable confeso: yo.
  • El mapa espera validación humana, o sea, espera.

trazo

La pizarra que dibuja sola lo que voy explicando tuvo día triple. Por la mañana, arreglos: seis tipos de gráfico que se rompían con datos raros ya aguantan el tipo (barras que se desbordaban, líneas de tendencia que se iban de madre, ejes que no obedecían). Por la tarde, orden: se juntaron las ramas de componentes y se estrenó un menú de histórico, así que ahora puedo recuperar cualquier cosa que haya pedido antes y ver con qué datos se creó. Y al exportar una imagen sale solo el componente elegido, no toda la pizarra entera como hasta ahora.

Lo grande llegó al final: el sistema de temas. Primero se separaron los colores y trazos en piezas reutilizables, luego dos pieles completas para toda la pizarra (una de neón, otra de trazo manuscrito) y el remate: el agente ya no se limita a cambiar entre pieles existentes, se inventa pieles nuevas desde cero cuando se lo pides. Le pides una estética y te la fabrica.

Wins:

  • Seis tipos de gráfico que ya no se rompen con datos difíciles.
  • Histórico de peticiones: cada cosa creada se puede retomar y consultar.
  • El agente genera pieles visuales nuevas desde cero, no solo cambia entre las que hay.

Loses:

  • Nueve ramas viejas acumuladas que hubo que barrer; la limpieza también cuenta como retraso.
−20 días

dev-dashboard

El panel que me deja ver de un vistazo todos los proyectos que conviven en la misma máquina ha dado un salto grande.

Lo primero fue quitarme piedras del zapato. Las sesiones de terminal solo dejaban ver un trocito del historial: ahora se puede subir hasta el principio y navegar con el ratón. También arreglé el reinicio de servicios, que antes pedía contraseña cada vez.

Después vino lo que más me interesaba: saber cuánta memoria se está comiendo cada proyecto. Ahora se muestra en porcentaje del total de la máquina, y si abro un proyecto veo qué procesos concretos están tirando de ella. Cuando algo se descontrola, se ve.

El asistente del panel también cambió de motor. Antes usaba un modelo que corría en la propia máquina; ahora usa Claude Haiku. Responde mejor y me quité 8,9 GB de encima al desinstalar lo anterior.

Y luego, mil detalles de uso: el panel ocupa todo el ancho, los proyectos se ordenan solos por actividad reciente, hay una barra con los 7 proyectos que más toco para ir directo, y el bloque de procesos sueltos ocupa mucho menos sitio.

Me gusta que el diseño se sostiene sobre dos reglas que escribí al principio y que sigo respetando: el panel siempre lee el estado real en el momento en que se lo pides, y nunca hay nada corrigiendo cosas por detrás sin que yo lo sepa.

Wins:

  • Historial completo de las terminales y navegación con ratón
  • Memoria por proyecto en porcentaje, con desglose de procesos
  • Asistente más capaz y 8,9 GB liberados
  • Interfaz más compacta, ordenación automática y acceso directo a favoritos

Loses:

  • Nada reseñable hoy

elCosechador

Este proyecto es el que convierte mi trabajo diario en este diario que estás leyendo. Ayer no salió nada, y quería saber por qué.

La causa: el modelo que resumía el día corría en mi propio servidor y se quedó sin memoria a mitad. Falló y no hubo diario.

En vez de parchearlo, lo cambié. Ahora el resumen lo hace Claude Haiku. El razonamiento fue sencillo: esos textos ya habían pasado por Claude durante la jornada, así que no estoy cruzando ninguna frontera nueva con mis datos. Y a cambio gano velocidad y coste. Lo probé rehaciendo el día 11: diez minutos, frente a los cuarenta y dos de antes.

También descubrí un fallo latente: los diarios se estaban guardando en dos sitios distintos, y podían acabar diciendo cosas diferentes. Ahora se escriben en el repositorio del propio proyecto y desde ahí se copian al histórico. Una sola fuente.

Y dediqué un rato a explicar cómo funciona todo esto para alguien que no programa: un diagrama paso a paso, mucho más simple que el técnico que ya tenía.

Wins:

  • Encontrada la causa del día en blanco: falta de memoria en el servidor
  • Resumen 4 veces más rápido y más barato
  • Diarios con una única fuente de verdad
  • Explicación paso a paso para gente no técnica

Loses:

  • Un día de diario perdido antes de detectar el problema

instagram-insights

Este es el panel que se descarga las estadísticas reales de mi cuenta de Instagram para poder mirarlas con calma. Hoy pasó de mostrar datos a ayudarme a decidir.

Primero, el resumen de vídeos. Ahora veo de un vistazo cuántos han funcionado bien y cuántos mal, con porcentajes por período y una gráfica de los últimos 7 días que va acumulando los buenos. También monté una escala de niveles —bien, muy bien, excelente, viral— que se revisa sola cada semana según cómo hayan ido las publicaciones anteriores.

Lo segundo es más ambicioso: analizar un borrador antes de publicarlo. El sistema da un veredicto de cómo espera que funcione, basado en la distribución real de lo que ya he publicado, y me enseña los vídeos parecidos para que pueda ir a mirarlos.

Y lo tercero es un motor de inspiración: busca creadores que hacen algo parecido a lo mío y propone vídeos de los que aprender. Van tres procesos en paralelo: uno descubre cuentas, otro las filtra y otro escribe las fichas. De momento hay 89 cuentas validadas y 1.941 vídeos de 78 creadores esperando revisión.

Aquí me llevé el susto del día. Al ir a comprobar los perfiles descubrí que el sistema anterior se los estaba inventando: proponía nombres de cuenta de memoria y más de la mitad no existían. Lo cambié para cruzar tres fuentes independientes antes de dar por bueno un perfil. Una cifra bonita que no se puede verificar no vale nada.

Wins:

  • Resumen de vídeos con 7 tarjetas de métricas y gráfica de tendencia
  • Escala de niveles que se recalibra sola cada semana
  • Análisis de borradores con veredicto y vídeos comparables
  • Motor de inspiración funcionando: 89 cuentas y 1.941 vídeos

Loses:

  • El buscador de perfiles anterior se inventaba más de la mitad de las cuentas
  • Me quedé sin cuota de la API de Instagram a media tarde

lateralbuilder

La web va más suave. Ese era el objetivo del día.

Empecé arreglando un conteo que estaba mal: los cambios que hago con ayuda de Claude no se estaban contando en mis estadísticas, porque el filtro que usaba buscaba mi nombre. Ahora salen todos.

Luego, el móvil. Añadí un menú fijo justo debajo de la marquesina, para no tener que buscar dónde ir.

Y lo que más se nota: al pasar de una página a otra ya no se recarga nada. La marquesina se queda en su sitio y el resto cambia por debajo. Cuesta explicarlo y se nota al segundo de usarlo.

De camino resolví varios problemas de rendimiento. El más tonto: la librería de gráficas se cargaba en todas las páginas aunque no hubiera ninguna gráfica que mostrar. Ahora solo se carga en las fichas de detalle, y en la portada dibujo la minigráfica a mano.

Wins:

  • Estadísticas de cambios completas por fin
  • Menú fijo en móvil
  • Navegación sin recargas entre páginas
  • Portada mucho más ligera

Loses:

  • Buena parte de la tarde se fue en errores de entorno, no en construir

scrapper-negocios

Este busca empresas por tipo y zona en Osona y Granollers, y les propone una web mejor. Hoy hubo un cambio de estrategia importante.

Hasta ahora recreaba cada página una por una. Eso no escala. Así que documenté los 14 nichos que salen de los 134 tipos de negocio que tengo en la base de datos, y definí para cada uno cómo debe estar montada la página: los restaurantes llevan la reserva justo debajo de la cabecera, los talleres llevan catálogo, las clínicas llevan datos técnicos.

La idea que me convence: la estructura se fija por sector, pero el estilo visual sigue siendo único de cada negocio. Se industrializa lo que se puede industrializar y se cuida lo que no.

También cambié cómo se contacta. Fuera formularios: WhatsApp, llamada o cita directa. Y las galerías ahora se abren en ventanas cuidadas en vez de sacarte de la página.

Añadí algo que me hacía ilusión: el sistema mira las animaciones de la web original del negocio y hereda su espíritu, traducido a técnica actual. No copia, se inspira.

Tres diseños validados con fotos reales: Núria Costa, Bar Beuló y Maquinária Reig.

Wins:

  • Estructura estándar por sector, estilo único por negocio
  • 14 nichos documentados a partir de 134 tipos de negocio
  • Contacto directo sin formularios y galerías en ventana
  • Tres diseños validados con fotos reales

Loses:

  • El buscador consume una cantidad de memoria que no me cuadra, y sigue sin resolverse

trazo

Trazo es una pizarra que dibuja sola lo que voy explicando en voz alta. Hoy toqué las dos mitades: lo que dibuja y lo que escucha.

Del lado del dibujo, añadí las listas por niveles, esas donde ordenas cosas de mejor a peor por filas. Están montadas de forma que el sistema sabe qué es, valida que tenga sentido y las coloca solo. Y admiten iconos en imagen, que me lo pidieron nada más verlo.

Del lado de la escucha, la historia del día. El micrófono funcionaba en mi ordenador pero no fuera de él. Fueron varias capas de problema, y la última me tuvo entretenido: Safari me devolvía el audio al triple de la velocidad que yo le había pedido, sin avisar de nada. Resultado: la voz llegaba acelerada y el sistema nunca daba una frase por terminada. Ahora se lee la velocidad real en vez de fiarse de la que pedí.

Lo último es pequeño pero se agradece: cuando algo falla al construirse en la pizarra, ahora puedo hacer clic en el bloque y ver todo lo que pasó, no solo las últimas líneas.

Wins:

  • Listas por niveles funcionando, con iconos en imagen
  • Micrófono operativo fuera de mi ordenador
  • Cazado el fallo de velocidad de audio en Safari
  • Registro completo de errores accesible con un clic

Loses:

  • Nada reseñable hoy
−21 días

dev-dashboard

El panel donde veo todos mis proyectos de un vistazo tenía un problema: era funcional pero feo, y cada proyecto mío tenía su propio look. Le apliqué la misma paleta, tipografía y estilo que lateralbuilder. Ahora todo lo que hago se parece entre sí, que es como debería haber empezado.

Además le puse estadísticas en tiempo real de la máquina, un filtro y una sección de actividad reciente. Y un lanzador: desde el panel abro una sesión de trabajo con Claude en el proyecto que quiera, tanto en el ordenador de casa como en el servidor. En Mac se abre la terminal sola.

Lo que más me ha divertido es la versión 2. Quiero un panel que se maneje con gestos de la mano delante de la cámara, sin tocar nada. Así que investigué cómo detectar las manos y monté una interfaz tipo carrusel de PlayStation: los proyectos pasan de lado, en fila, y saltas de uno a otro con un gesto. El carrusel ya funciona; falta conectarle las manos.

elCosechador

Este es el proyecto que escribe esto que estás leyendo. Convierte mi trabajo del día en un diario, para no tener que sentarme a redactarlo.

Hoy le hice la parte que faltaba: una web donde reviso y corrijo lo que ha entendido de mi jornada. Puedo editar el resumen de cada proyecto, decir cuál era el objetivo real, y dejar comentarios distintos según dónde vaya a publicarse, porque un texto para el blog no es el mismo que uno para X o Instagram. Los desplegables van cerrados por defecto: si tienes cinco proyectos abiertos y todo se despliega a la vez, no se lee nada. También puedo dictar por voz en lugar de escribir.

La pieza de la que estoy más contento: un sistema que aprende de mis correcciones. Antes, si le decía “esta frase suena a relleno”, lo arreglaba solo para ese día. Ahora, cuando dejo un comentario, hay algo que decide si eso merece convertirse en una norma permanente. Si la merece, se guarda y todos los borradores futuros la cumplen sin que yo vuelva a decir nada. Cada vez que corrijo, el sistema mejora.

Ejemplo real de norma que salió de ahí: nada de aperturas vacías tipo “hoy tocó un poco de todo”. Regeneré los diarios del 9 y el 10 con el formato nuevo y se nota.

También separé los borradores por canal y por día, para que cada red tenga su texto propio en lugar de un texto único recortado. Y añadí una lista de pendientes e ideas, editable, ordenada por antigüedad, para que lo viejo no se me quede enterrado. La primera anotación es para mañana: mejorar los posts de X e Instagram.

instagram-insights

Analicé el reel que publiqué hoy. En unas siete horas: 2.412 reproducciones, 44 me gusta, 3 comentarios, 1.586 cuentas alcanzadas. La gente ve de media el 61% del vídeo, que dura 11,5 segundos. 82 interacciones en total.

Me interesaba saber también qué música llevaba, así que me puse a investigar cómo sacar ese dato: “Anomaly”, de Unfound, synthwave. Sin diálogos, solo imagen y música.

Todo esto es para lo que quiero construir de verdad: algo que mire mis vídeos, separe los que funcionan de los que no, y los agrupe por tipo (planos de ambiente, vídeos en primera persona, vídeos de trabajar duro). Y que por cada tipo que funciona me dé una ficha con tres ideas de vídeos parecidos. Dejar de mirar números y empezar a recibir sugerencias. Hoy solo lo dejé descrito, sin empezar a construirlo.

lateralbuilder

Hice una página que muestra en qué ando cada día, alimentada con lo que aprueba elCosechador. Es la ventana pública de mi trabajo diario, y ya está en marcha.

Con el menú de navegación estuve dando vueltas. Empecé con una etiqueta flotante que sigue al cursor y acabé con atajos de una sola tecla: una letra te lleva a la página de progreso, otra al blog. Es una idea de terminal metida en una web, y me gusta cómo queda. También se navega con el teclado sin tocar el ratón.

En la página de progreso quité toda la narrativa que le había puesto encima. Sobraba. Ahora se pincha para desplegar y ya está. Y rediseñé la marquesina para que enseñe datos en vez de decorar: un gráfico pequeño con los últimos siete días y el total de líneas escritas.

scrapper-negocios

Aquí pasó lo importante del día. Este proyecto busca empresas de mi zona y guarda lo que encuentra. Iba bien: lancé varios procesos en paralelo y el análisis de webs pasó a 457 por hora, ocho veces más rápido que antes. Voy por 62.242 empresas y el 76% de las ciudades revisadas.

Entonces vi la factura: 214 dólares en servicios de Google. Paré en seco la parte más cara y me hice la pregunta incómoda: ¿esto para qué me sirve?

La respuesta cambió el proyecto entero. Tenía pensado vender listas de empresas a agencias, en paquetes por comarca, entre 99 y 500 dólares. Pero de esas 62.242 empresas, unas 23.000 no tienen web. Y una web hecha vale desde 800 dólares. Vender la lista es vender el mapa; hacer la web es hacer el viaje.

Así que construí un motor que genera páginas web a medida de forma automática: coge un negocio, captura cómo se ve su web actual si la tiene, y monta una versión nueva en tres a cinco minutos. Ya procesé tres casos de prueba con el antes y el después listo para enseñar.

−22 días

lateralbuilder

Quería un estilo nuevo para las piezas que salen de las noticias: algo minimalista, más limpio que lo que tenía. Monté la cuarta iteración, una versión “minimal metálica”, y al revisar los resultados apareció el fallo: las historias salían con el estilo nuevo, pero el carrusel seguía usando el antiguo. Lo corregí y generé nuevas tandas de historias y animaciones, ya todas coherentes.

También procesé las imágenes con OpenAI para el contenido visual de las piezas, y aproveché para corregir fallos del modelo de imagen. La calidad de lo generado subió.

El obstáculo gordo del día fue otro: problemas con la clave que uso para el servicio de inteligencia artificial principal. Para no quedarme parado, dejé configurado un modelo alternativo más ligero como plan B. Si la clave principal falla, el sistema sigue funcionando solo.

elCosechador

El objetivo era cortar el cordón umbilical: hasta ahora el sistema dependía de que yo estuviera delante de mi ordenador para recoger los datos. Hoy eso se acabó. Activé la recogida remota y el sistema ya recoge el trabajo del Mac por su cuenta, sin duplicar nada. Por el camino arreglé un fallo feo: dos recogidas podían ejecutarse a la vez sobre los mismos datos y pisarse entre ellas.

Con la cosecha completa de ayer —13 proyectos— regeneré los diarios y amplié el panel: ahora cada sesión de trabajo muestra su resumen y la conversación completa, y quité los detalles técnicos que sobraban. También creé fichas de proyecto: qué es cada uno, en qué estado está y hacia dónde va. Tanto dev-dashboard como el propio elCosechador ya tienen la suya.

Los títulos de las sesiones me dieron guerra. Salían genéricos, y al corregirlo la inteligencia artificial se quedaba pegada a los dos ejemplos que le había puesto en las instrucciones. Tres arreglos para el mismo síntoma. Habrá que vigilar si el tercero aguanta.

Por la tarde-noche automaticé el resto: el resumen de sesiones y la generación del panel ya se ejecutan solos cada noche. Fui lanzando tandas —46 sesiones resumidas a media tarde, 79 resúmenes lanzados en total— y al cierre el panel mostraba 105 de 107 sesiones resumidas, con todo el histórico visible por fin en conjunto.

Queda un hueco importante: al listar los proyectos vi que hay sesiones de trabajo personal que el sistema no está teniendo en cuenta.

scrapper-negocios

Amplié el catálogo de tipos de negocio que la herramienta sabe buscar en Osona y Granollers: unos 51 tipos más. Cuantos más tipos conoce, más empresas encuentra.

El día tuvo su atasco: un problema con una de las conexiones externas y con la parte que busca a las personas que deciden en cada empresa. Una vez resuelto, pude implementar lo que quería: un agente que vigila el progreso de los procesos lanzados, para saber en todo momento qué está corriendo y cómo va, sin tener que mirarlo a mano.

También añadí el análisis de la web y del LinkedIn a las empresas que todavía estaban sin procesar, y dejé unificado todo el trabajo de la rama de decisores, incluido un arreglo del chat que había quedado pendiente.

extendedNotes

Tres mejoras para que las notas se lean y se manejen mejor. La primera, y la que más aporta: el texto de las listas ahora cambia de color según el nivel de sangría. De un vistazo se ve qué cuelga de qué, y la jerarquía deja de ser un muro de texto.

La segunda: un menú rápido que se abre escribiendo una barra, con desplegables para agregar y editar notas sin levantar las manos del teclado. De paso arreglé un atajo de cerrar que la ventana tenía secuestrado y que cerraba cosas que no debía.

La tercera: checkboxes de verdad en las listas de tareas, en vez de simples marcas de texto. Junto con eso, una chuleta de órdenes de voz que aparece al encender la escucha, para no tener que memorizarlas.

El control por voz también avanzó: ya se puede decir “nueva sección” y el sistema espera el nombre y pide confirmación abajo, sin abrir diálogos que corten el flujo. Las órdenes con argumento se resistieron un poco, pero quedaron funcionando. Lo único que se atragantó fue el espaciado entre bloques de lista: probé a dar aire a todos y quedaba mal; al final solo separan los grupos de primer nivel.

dev-dashboard

Empecé por lo fácil: un filtro para ver solo los proyectos activos, y de paso quité una sección de actividad reciente que no aportaba. También escribí la guía de usuario, para que el panel no dependa de que yo explique cómo funciona.

El resto del día fue pelearme con el chatbot del panel. No entendía proyectos escritos con espacios, se rendía con frases a medio formular, mostraba texto interno que el usuario no debería ver, y un simple “cierra X” se quedaba colgado dos minutos. Fui encadenando arreglos uno a uno, y añadí un registro de conversaciones para poder diagnosticar los casos en que “no hace nada”. También conseguí que los proyectos arrancados desde el panel dejaran de morirse cada vez que el propio panel se reiniciaba.

Pero el problema de fondo no tiene arreglo por ahora: investigando encontré que el sistema operativo estaba matando el modelo de inteligencia artificial del chat porque la máquina se queda corta de memoria. Intenté cargar una alternativa más ligera y tampoco pudo con ella. El chatbot se queda como está, identificado el porqué pero sin solución. Es posible que haya que replantearlo.

−23 días

lateralbuilder

Retomé lateralbuilder, mi sistema que convierte noticias en piezas listas para publicar en redes. Llevaba un tiempo parado y lo primero fue eso: arrancar de nuevo el servidor que selecciona las noticias, que estaba caído. Revisé todo lo que había dejado hecho y salí con una idea mucho más clara de hacia dónde va esto.

Con el terreno despejado, monté algo que tenía ganas de probar: un sistema de aprendizaje de titulares. Por cada pieza genera tres titulares candidatos en vez de uno, para poder elegir el mejor y que el sistema vaya aprendiendo qué funciona. Lo estrené con la noticia del modelo chino. También definí los tipos de animaciones para historias y carruseles, investigué qué se está haciendo ahora mismo en carruseles y apliqué esas tendencias a la misma noticia.

Al cerrar el día: 23 noticias nuevas generadas, 60 propuestas esperando a que las revise, y el contenido para Instagram y X procesado y preparado.

elCosechador

Proyecto nuevo, y uno especial: elCosechador convierte mi trabajo diario programando en un diario escrito, sin que yo tenga que escribirlo a mano. El porqué es simple: quiero contar lo que hago cada día, pero escribirlo me cuesta más que hacerlo. Y una condición innegociable: coste cero, que saque la información de mis sesiones sin pagar nada por ello.

Empecé por el camino ordenado: escribí los principios del proyecto —privacidad, coste cero, simplicidad, entre otros—, la especificación de qué construyo, el plan técnico y el desglose en 26 tareas. Y entonces cambié de rumbo: en vez de seguir ese plan paso a paso, implementé todo el sistema de golpe en una tarde. Fuentes, destilado, redacción y salidas, todo de una sentada.

Lo mejor vino después, con los dos fallos que más me enseñaron. Uno: al resumir el día, el sistema perdía el final de la jornada, que es justo lo más importante. Dos: el cosechador se cosechaba a sí mismo, recogiendo sus propias redacciones como si fueran trabajo mío. Los dos están corregidos y convertidos en reglas del sistema. Cerré validándolo contra un día real y dejándolo funcionando en automático.

video-large-to-shorts

El objetivo con video-large-to-shorts, la herramienta que trocea vídeos largos en shorts verticales, era sacarlo de mi ordenador y dejarlo desplegado en mi servidor, funcionando de verdad. El primer intento quedó a medias: el código sí subió al repositorio privado, pero el proyecto siguió viviendo en local.

Antes de insistir, revisé la autenticación para confirmar que no exponía nada que no tocara. Todo limpio. La clave de acceso privada quedó fuera del repositorio a propósito: no hace falta para que funcione. Normalicé los datos y volví a intentar el despliegue, esta vez sin fricción. Probé el acceso desde el portátil y desde el móvil, y ambos funcionan. De todo el día, esto fue lo que mejor sabor dejó: la herramienta ya no depende de que mi ordenador esté encendido.

instagram-insights

Con instagram-insights busco entender de una vez cómo rinde mi contenido en Instagram, con datos fiables y no con sensaciones. Hoy tocaba verificar que toda la cadena de datos funcionaba, y antes de poder mirar nada me choqué con dos frenos: el nombre de la cuenta y la autenticación.

Superado eso, ajustando las métricas apareció algo interesante: visualizaciones y alcance no son lo mismo, y el panel las mezclaba. Las separé en todo el panel y ahora cada una se actualiza por su lado, correctamente. También documenté cómo está desplegado todo, para no depender de mi memoria la próxima vez, y protegí el panel con login y contraseña.

El pero del día: al terminar descubrí que el servidor que sirve el panel seguía con el código viejo. El login está hecho, pero aún no está en el aire. Pendiente para mañana.

extendedNotes

Día de fontanería en extendedNotes, mi sistema de notas ampliadas. La idea era poder desarrollar la app directamente desde el servidor, sin depender de mi máquina, y comprobar que los cambios se reflejaban bien en local. Le expliqué a Claude cómo funciona mi sistema de sincronización, subí todo el código al repositorio, lo cloné en el servidor y verifiqué que servidor, local y GitHub apuntan exactamente a la misma versión del código. Poco vistoso, pero deja el terreno preparado para trabajar desde cualquier sitio.

dev-dashboard

El día más productivo fue en dev-dashboard, el panel que muestra de un vistazo todos los proyectos que viven en mi máquina. El objetivo era doble: cerrar la integración del chatbot y desplegar las funciones nuevas, comprobando que todo funciona de verdad y no solo en mi ordenador.

Cayeron muchas piezas. Un botón de arranque para cada proyecto. Clasificación automática de cada proyecto según su tipo: web, iOS, backend o terminal. Capturas de la portada de cada proyecto en marcha, con miniaturas y un filtro por tipo para encontrar las cosas rápido. Un interruptor que difumina los dominios, para poder enseñar el panel sin exponer direcciones. Arreglé también los enlaces de algunos proyectos, que apuntaban mal.

Y el broche: el chat que maneja el dashboard ahora habla español normal. Casi mil líneas de código para que la conversación sea natural. Todo implementado y desplegado en producción, con un modelo pequeño que lo hace viable.

no hay más días guardados.