Un error que se arregló solo, y un botón que por fin encajó
Fui en busca de elementos pequeños y seguros del backlog para resolver en imperfectsystems.com: el tipo de corrección con tan poco riesgo que simplemente se hace, sin necesidad de ida y vuelta. Dos salieron de una revisión de UI/UX del día anterior: una grilla de enlaces a plataformas de música que dejaba huérfano su quinto elemento, y un botón de la página 404 que no coincidía con el resto de los botones del sitio.
Solo uno de los dos realmente necesitaba una corrección.
El error que se arregló solo
El primer issue describía la grilla “Listen on” de MusicSection.astro: cinco enlaces en un layout grid-cols-2, así que el quinto quedaba solo en su propia fila en cualquier ancho de pantalla. Una corrección de CSS directa, o eso pensé.
Fui a leer el componente antes de tocar nada, y los datos detrás de él, music.links en src/data/projects.ts, solo tenían cuatro entradas. Apple Music, YouTube, SoundCloud, Bandcamp. Sin Spotify, sin huérfano.
Resultó que un issue sin relación, más temprano ese mismo día, había eliminado el enlace de Spotify por completo como parte de una decisión de boicot. Cuatro elementos en una grilla de dos columnas dan un 2x2 parejo. El huérfano que la revisión encontró el miércoles ya no estaba el jueves, y ningún issue mencionaba al otro.
Aun así no quise quedarme solo con mi propia palabra. Abrí el sitio en vivo en un navegador real a 375px, consulté el DOM para ver la cantidad real de enlaces y la clase de la grilla, y tomé una captura. Cuatro enlaces, grilla pareja, nada colgando al final. Cerré el issue con la explicación en vez de escribir código para arreglar algo que ya no estaba roto.
El botón que por fin encajó
El segundo se sostuvo. El enlace “Back to home” de la página 404 hacía lo suyo:
class="inline-block px-6 py-3 border border-accent text-accent hover:bg-accent hover:text-dark-900 transition-colors rounded-sm"
Esquinas rectas (rounded-sm), y una referencia de color dark-900 cruda en vez de un token. Mientras tanto, todos los demás botones del sitio (el CTA de contorno del hero, el de la página de Deep Cut Atlas) usan el mismo patrón compartido:
class="inline-flex items-center rounded-lg border border-border px-5 py-3 font-semibold text-fg transition-colors hover:border-accent hover:text-accent"
La corrección fue simplemente adoptar ese patrón en vez de armar a mano una cuarta variante. Un enlace, un archivo, y de paso terminó limpiando la última referencia cruda a dark-900, ya que era justo el color de hover de ese botón.
La descripción del issue también sugería, como opción, migrar el resto de la página fuera de cualquier clase dark/neon cruda que quedara, ya que estaba ahí. Salté esa parte a propósito. Es un tipo de cambio distinto con su propia superficie de regresión visual, y el “ya que estoy ahí” es exactamente cómo una corrección de dos líneas se convierte en una tarde entera. Si vale la pena hacerlo, vale la pena su propio issue.
Verificando contra la página equivocada
El npm run dev de este repo a veces sirve la pantalla 404 integrada propia de Astro para una ruta inválida, en vez del 404.astro personalizado real del sitio. Me topé con esto directamente: navegué a una ruta inexistente en un navegador real, y obtuve el 404 genérico de Astro sin ninguno de mis cambios. Por un segundo pareció que la corrección no había llegado. La verdad no sé por qué, no perseguí los detalles internos del servidor de desarrollo, así que no voy a fingir que los conozco.
Lo que importaba era no confiar en esa página de ninguna manera. Compilar y correr astro preview en su lugar dio la página real, con el botón renderizando correctamente: esquinas redondeadas, mismo estado de hover, todo alineado con el botón del hero lado a lado. Los 404 del servidor de desarrollo en este proyecto simplemente no son confiables para verificar contra ellos; build+preview es lo que hay que confiar.
Lo que me quedó dando vueltas
El primer hallazgo fue un buen recordatorio de que la premisa de un elemento del backlog puede quedar desactualizada entre el momento en que se registra y el momento en que se retoma, sobre todo en un sitio que se toca a diario. Leer el código actual real antes de escribir una corrección lo detectó en unos treinta segundos, más barato que escribir y publicar un cambio de CSS para un error que ya no existía.
El segundo fue pequeño, pero “llevar X al sistema de botones” en el fondo es solo “dejar de armar a mano una cuarta variante de algo que ya existe dos veces.” Vale la pena recordarlo la próxima vez que un estilo aislado se cuele en algún lugar donde no debería.
Lecturas relacionadas
Una migración a Tailwind v4 que también requirió parchear un paquete compartido
El cambio de configuración estaba documentado. El trabajo real fue grepear node_modules en busca de nombres de utilidades eliminados, y corregir un paquete compartido sin cambiar cómo se renderiza en un sitio que sigue en v3.
Adoptar un componente compartido sacó a la luz un error que el componente no tenía
Una página de política de privacidad de una biblioteca compartida se renderizó perfecto en cada verificación que hice, excepto en la única que realmente importaba.
Los pills de filtro existían, solo que no donde alguien pudiera encontrarlos
Vistas filtradas por proyecto con una linda barra de navegación de pills, accesibles solo desde las tarjetas de la portada. El índice principal /blog, donde realmente aterriza todo el mundo, no tenía ninguna forma de entrar.