Elffuss Elffuss CodeProyecto del día
Proyecto del día

Proyecto del día

El IDE con IA local en el navegador. Un caso nuevo cada día, contando lo que se puede hacer con IA que vive dentro de tu navegador.

26 de octubre de 2026

La 1.10 salía como más antigua que la 1.9, y el aviso de actualización se quedó callado

Lucía hizo un comparador de versiones de veinte líneas para el aviso de «hay una versión nueva» de una herramienta interna. Funcionó hasta que llegó la 1.10. Así lo arregló con la IA en el navegador, sin sacar de su máquina unas etiquetas de versión que todavía no eran públicas.

Leer el caso →
25 de octubre de 2026

Mi slugify convertía «Año nuevo en Málaga» en «ao-nuevo-en-mlaga»

Una utilidad de cinco líneas para generar URLs, un regex que se comía las letras con tilde y un modelo local que ayudó a arreglarlo sin que el código saliera del navegador.

Leer el caso →
24 de octubre de 2026

Mi regex de DNI daba por bueno 12345678A, y la letra correcta es la Z

Un validador de DNI y NIE de veinte líneas, hecho en el IDE del navegador con la IA en local. La regex comprobaba el formato, pero la letra de control no la comprobaba nadie.

Leer el caso →
23 de octubre de 2026

El 29 de diciembre caía en la semana 1 de 2026 y mi informe semanal lo partía en dos

Una utilidad de 15 líneas para numerar semanas, un lunes de diciembre que pertenece al año siguiente y un asistente local que ayudó a encontrar el fallo sin que el código saliera del navegador.

Leer el caso →
21 de octubre de 2026

La copia de las 2:30 iba a ejecutarse dos veces este domingo

Elena cambió el cron de la gestoría por una utilidad en JavaScript y la primera versión aguantaba bien hasta el cambio de hora. Con el asistente local encontró los dos agujeros de esa noche: una hora que se repite y otra que no existe.

Leer el caso →
20 de octubre de 2026

El alquiler era de 1.500 euros y mi app de gastos lo apuntó como 1,5

Lucía se hizo una utilidad para repartir los gastos del piso. Sumaba bien todo menos el importe más grande, y el arreglo evidente estropeaba los demás.

Leer el caso →
19 de octubre de 2026

Pulsé deshacer y la tarea volvió, pero sin sus etiquetas

Inés añadió Ctrl+Z a un tablero de soporte con una copia del estado de toda la vida. Funcionó en todas las pruebas hasta que una tarea marcada como «urgente» volvió del historial sin ninguna marca.

Leer el caso →
18 de octubre de 2026

Álvarez salía detrás de Zamora, y al arreglarlo Peña y Pena se volvieron la misma nadadora

Lucía solo quería sacar ordenada por apellido la lista de dorsales del club de natación. El primer arreglo ordenó bien la lista y, de paso, hizo desaparecer a una niña cuando se abría en un navegador en inglés.

Leer el caso →
17 de octubre de 2026

Recorté la vista previa a 80 caracteres y al emoji de la familia le faltaba la hija

Una función de diez líneas para truncar mensajes, tres arreglos que parecían definitivos y una lección sobre lo que JavaScript llama «carácter». Con mensajes reales de un club de montaña como banco de pruebas.

Leer el caso →
16 de octubre de 2026

El comando llevaba una tubería y la tabla de Markdown se partió justo ahí

Lucía montó en una tarde una vista previa para las tablas de sus runbooks. El primer arreglo dejaba la tabla bonita y equivocada: no se parecía a la que publicaba GitHub.

Leer el caso →
15 de octubre de 2026

El pomodoro marcaba 25 minutos y sonó a los 31

Marta se hizo un temporizador en una tarde. Mientras lo miraba iba perfecto; cuando se iba a otra pestaña a trabajar, empezaba a llegar tarde. El fallo no estaba en la cuenta, sino en lo que estaba contando.

Leer el caso →
13 de octubre de 2026

Punteros en C, en C++ y en C#: tres artículos y una sola URL

Marta escribió un generador de slugs en diez líneas. Funcionaba con tildes y eñes, hasta que tres títulos distintos acabaron en la misma dirección y el último se comió a los otros dos.

Leer el caso →
11 de octubre de 2026

Sumé un mes al 31 de enero y la renovación cayó el 3 de marzo

Una utilidad de fechas de veinte líneas para calcular renovaciones de cuotas. Funcionaba todos los días del año, menos los que acaban en 29, 30 y 31.

Leer el caso →
10 de octubre de 2026

La caché fallaba con las llamadas repetidas y acertaba con dos que no lo eran

Un memoize de nueve líneas con la clave hecha a base de JSON.stringify. Cero aciertos cuando tocaba acertar, y un acierto silencioso cuando tocaba fallar.

Leer el caso →
9 de octubre de 2026

El «copiar como cURL» contestaba 200 y se dejaba los apóstrofos por el camino

Un botón de dos líneas para pegar peticiones en la terminal. El comando se ejecutaba sin una queja, el servidor decía que todo bien y el nombre llegaba sin apóstrofo.

Leer el caso →
8 de octubre de 2026

La gráfica caía a cero todos los sábados y no había caído nada

Un componente de línea casero, treinta días de datos y un dientes de sierra perfecto que me creí dos días. El hueco del fin de semana se estaba dibujando como un cero.

Leer el caso →
7 de octubre de 2026

La contraseña llevaba una almohadilla y mi parser de .env la cortaba justo ahí

Un 401 en preproducción, un fichero de variables y una utilidad de diagnóstico que mentía. Lo curioso: el bug solo aparecía con el fichero real, el que no puedes pegar en ningún sitio.

Leer el caso →
6 de octubre de 2026

Después de formatear, la consulta seguía siendo válida y devolvía cero filas

Un formateador de SQL de una tarde, escrito en el IDE del navegador. El fallo no daba error: colaba un salto de línea dentro de un literal y cambiaba lo que la consulta buscaba.

Leer el caso →
5 de octubre de 2026

El CSV tenía 1.200 filas y mi parser contaba 1.237

Un export de clientes con direcciones y notas internas rompió el parser más simple del mundo: el que parte por saltos de línea. Lo arreglé en el IDE del navegador, sin que el fichero saliera del portátil.

Leer el caso →
4 de octubre de 2026

Grabé el atajo, el editor lo mostró bien y nunca volvió a disparar

Un grabador de atajos de teclado para una paleta de comandos: lo que aparecía en pantalla era exactamente lo que yo había pulsado, y aun así la combinación no volvía a funcionar nunca más.

Leer el caso →
3 de octubre de 2026

El tooltip se cerraba justo cuando ibas a pulsar el enlace de dentro

Un tooltip con un enlace dentro: aparecía al pasar el ratón, desaparecía en cuanto movías el ratón hacia él. Veinte líneas de componente y tres días de ideas malas.

Leer el caso →
2 de octubre de 2026

El «…» del paginador escondía una sola página: la 2

Un listado se quedó en cinco páginas y los puntos suspensivos se tragaron la 2. Arreglarlo fueron catorce prompts con la IA mirando el componente de verdad, sin que nada saliera del portátil.

Leer el caso →
1 de octubre de 2026

El 4 y el 4 hacían 8, y ese 8 volvía a fusionarse en la misma jugada

Un 2048 de una tarde en el IDE del navegador. Se movía, puntuaba y aun así la partida salía rarísima de fácil: el fallo cabía en una fila de cuatro números.

Leer el caso →
30 de septiembre de 2026

Borrabas un cero en medio del importe y el cursor saltaba al final

Un campo que formatea los miles mientras escribes, para el panel de facturación de una asesoría. Escribiendo de izquierda a derecha iba perfecto. Corrigiendo, era inusable.

Leer el caso →
29 de septiembre de 2026

La segunda L salía en amarillo, y en la palabra solo había una

Un clon del juego de las cinco letras montado en una mañana de sábado. La rejilla y el teclado fueron lo de menos: el bug estaba en cómo se pintan las letras repetidas.

Leer el caso →
28 de septiembre de 2026

«Fuerte»: el medidor de contraseñas que premiaba lo más fácil de adivinar

Un formulario de alta marcaba como segura la contraseña más repetida de una fuga real, y la única forma de probarlo era con esa fuga delante, sin que saliera del portátil.

Leer el caso →
27 de septiembre de 2026

La factura número 14 salió dos veces

Dos pestañas abiertas al mismo tiempo, un contador que no era atómico, y una ley que no admite duplicados: así se depuró con datos fiscales reales sin que salieran del portátil.

Leer el caso →
26 de septiembre de 2026

Escribió «urgente» rápido y la pantalla le enseñó los resultados de «urg»

Dos peticiones de red competían por pintar la pantalla, y no ganaba la más nueva: ganaba la que respondía más tarde.

Leer el caso →
25 de septiembre de 2026

«Máximo 10 MB» y rechazaba un archivo de 9,7 MB

La interfaz decía un número y el validador comparaba otro. Ninguno de los dos estaba mal: estaban divididos por cosas distintas.

Leer el caso →
24 de septiembre de 2026

Los porcentajes sumaban 101 y ninguno estaba mal redondeado

Cinco categorías en la leyenda de una gráfica, cada porcentaje bien calculado, y un total imposible. El arreglo no era redondear mejor: era repartir.

Leer el caso →
23 de septiembre de 2026

Diez llamadas por minuto, y el proveedor vio veinte en dos segundos

El contador nunca pasó de diez. El limitador estaba bien escrito. El problema era dónde empezaba el minuto.

Leer el caso →
22 de septiembre de 2026

El desplegable ponía la 1.10.0 antes que la 1.9.0, y el orden estaba «bien»

Un panel interno de releases llevaba medio año ordenando mal sin que nadie lo notara. Arreglarlo del todo no fueron quince líneas: fue una tabla de casos hecha con los tags de verdad.

Leer el caso →
21 de septiembre de 2026

El verde y el azul daban el mismo contraste, y uno no se leía

Once colores de una marca aún sin anunciar, cuarenta parejas que revisar y una fórmula que parecía razonable. Hasta que dos celdas de la tabla sacaron la misma nota.

Leer el caso →
20 de septiembre de 2026

El diff decía catorce cambios y solo uno era de verdad

Comparar la configuración de staging con la de producción parecía cosa de cinco minutos. Lo difícil no fue recorrer el objeto: fue decidir qué cuenta como cambio.

Leer el caso →
19 de septiembre de 2026

Parecía barajado: el mazo empezaba siempre por las mismas tarjetas

Un modo repaso hecho en una tarde. El azar era de mentira y no se veía a ojo: hizo falta contar cien mil barajados para que el sesgo apareciera en una tabla.

Leer el caso →
18 de septiembre de 2026

El panel decía «una vez al mes» y el job iba cada lunes

Traducir una expresión de cron a una frase en español parecía cosa de una tarde. Los cinco campos, sí. La semántica, no.

Leer el caso →
17 de septiembre de 2026

«Caduca el 1 de enero de 1970»: el decodificador de JWT de una tarde

Una utilidad de cuarenta líneas para leer tokens sin pegarlos en una web ajena. El split por puntos fue lo fácil; los acentos y el 1970, no.

Leer el caso →
16 de septiembre de 2026

«¿Se puede deshacer?»: Ctrl+Z iba letra a letra, y al arreglarlo se tragó medio formulario

Un constructor de formularios interno, una petición que parecía de veinte minutos y una pila de deshacer que agrupaba por reloj cuando tenía que agrupar por intención.

Leer el caso →
15 de septiembre de 2026

El formateador de JSON que redondeaba los IDs sin avisar

Pegabas la respuesta de la API, la veías bonita e indentada… y un pedido de 19 dígitos volvía con los últimos tres cambiados. Nada petaba.

Leer el caso →
14 de septiembre de 2026

La previsualización cortaba a 140 caracteres y de la bandera quedó media letra

Truncar un comentario para una tarjeta parecía cosa de media hora. Luego llegaron los emojis, y el único banco de pruebas que servía eran comentarios reales de usuarios.

Leer el caso →
13 de septiembre de 2026

El buscador del desplegable encontraba de todo menos lo que buscabas

Un filtro de catálogo que pasó de no encontrar nada a encontrarlo todo. El trabajo de verdad no fue buscar: fue ordenar, y para eso hacían falta las consultas reales de gente que no trabaja en mi empresa.

Leer el caso →
12 de septiembre de 2026

La regex pasaba veinte ejemplos y colgaba la pestaña con el ventiuno

Sacar pares clave = valor de un fichero de configuración heredado. Diez líneas de JavaScript, una expresión regular… y un cuelgue que no daba error, solo silencio.

Leer el caso →
11 de septiembre de 2026

El validador de IBAN daba por malas cuentas buenas (y el algoritmo estaba bien)

Veinticuatro caracteres, una división entre 97 y un número que JavaScript redondea por detrás. Una utilidad de treinta líneas que solo se arregla con los datos que no puedes enseñar a nadie.

Leer el caso →
10 de septiembre de 2026

El bug no estaba en el arrastre: estaba en el índice

Una lista reordenable para el panel interno de un cliente. Arrastrar hacia arriba iba bien; hacia abajo, el elemento caía siempre una posición antes. La culpa era de tres líneas.

Leer el caso →
9 de septiembre de 2026

El redactor de logs que solo podías escribir teniendo los logs delante

Un filtro de doscientas líneas para tapar datos personales antes de mandar una traza a soporte. Lo incómodo es que, para probarlo, hacía falta justo aquello que no puedes enseñarle a nadie.

Leer el caso →
8 de septiembre de 2026

La ñ, el slug y cuatrocientas URLs que ya no podías tocar

Una función slugify de diez líneas para el CMS interno de una consultora. El bug estaba en la ñ; el trabajo de verdad estaba en todo lo que ya se había publicado.

Leer el caso →
7 de septiembre de 2026

La gráfica no se rompía con datos raros: se rompía con datos planos

Un sparkline de cuarenta líneas, una serie sin ninguna venta y un SVG que desaparecía sin avisar. Lo que aportó la IA local no fue el componente: fue la lista de series que lo tumbaban.

Leer el caso →
6 de septiembre de 2026

Vencimientos a 60 días: la utilidad de fechas que iba a costar diez minutos

Un módulo de facturación bajo NDA, tres cláusulas de pago y una función de sumar meses que mentía. El caso de hoy se escribió entero en el IDE del navegador, con el modelo corriendo en local.

Leer el caso →
5 de septiembre de 2026

Un mini-lenguaje de reglas en una tarde: el parser fue lo fácil, la precedencia no

Escribir un evaluador de condiciones de descuento para un backoffice, con la IA al lado. El bug estaba en la tabla de precedencias, y el prompt llevaba dentro la estrategia de precios del trimestre.

Leer el caso →
4 de septiembre de 2026

El parser de CSV que solo sale bien si le enseñas las filas de verdad

Una exportación de facturas del ERP de un cliente, cuatro mil líneas y todos los casos raros a la vez. La diferencia entre un parser de manual y uno que funciona está en pegar el fichero real — y ahí es donde normalmente te frenas.

Leer el caso →