Desenvolupament web
El 404 amb estil, el 500 caçat i el primer esbós del migrador
Pàgines d'error pròpies, una auditoria que converteix 500 en 404, i el primer esbós del migrador de WordPress a Payload amb 64 tests.

Un 404 que no sembli error
Fins ara, si obries una URL que no existia, Next.js et servia la seva pàgina grisa de sempre. Aquesta setmana hem fet la nostra. Dues peces: un not-found.tsx a l’arrel, per a URLs desconegudes tipus /xyz, i un de dins del grup (frontend), per als notFound() que llencen les fitxes quan no troben contingut.
I un error.tsx per als errors de veritat: component de client, role=alert, botó per reintentar. A l’usuari no li ensenyem el missatge tècnic; a la consola sí que queda registrat.
La part curiosa: el primer deploy va servir el 404 de l’arrel amb el marcatge correcte però sense cap full d’estils. El layout amb els CSS viu al grup (frontend), i el not-found de l’arrel penja directament d’app/layout. Next no propaga els imports de CSS cap amunt de l’arbre de rutes. Solució poc glamurosa i correcta: re-importar tokens.css, base.css i ui.css dins del propi fitxer. El bundle del 404 (49KB) ara porta les classes .notfound, i el de la home segueix net — això demostra que l’import queda tancat al chunk del 404.
La caça del 500
L’auditoria de les fitxes va caçar un de greu: /consells/incorrecta/com-reduir... — una categoria que no existeix — retornava un 500. Postgres rebutjava el valor fora de l’enum (22P02) i l’excepció pujava fins a la pàgina. Ara lib/format.ts exporta CONSELL_CATEGORIES i si la categoria no és a la llista, es talla amb notFound() abans de tocar la base de dades. La URL bruta fa 404, que és el que toca.
Segon intent del mateix dia: filtrar per _status = 'published'. També 500 — Payload no deixa consultar _status. I sobra: l’accés onlyPublicat ja filtrà els esborranys. Ho hem deixat comentat a les sis pàgines perquè ningú hi recaigui.
Detalls de les llistes
L’auditoria de les llistes (spec 03j) va deixar quatre arranjaments:
listingHrefno reiniciavapage=1en canviar de filtre.- Les pàgines 2+ amb filtre actiu es marcaven com indexables; ara són
noindex. Només la pàgina 1 sense filtres es pot indexar. - El mapa de comarques del hero de
/agendano existia: tres enllaços amb el color de cada comarca. - Els dies de l’agenda ara mostren el dia de la setmana en vermell: DL., DT., DC…
I totes les llistes passen de force-dynamic a revalidate = 3600, com demana l’especificació. El 404 també ha de ser force-dynamic; si no, Next el prerenderitza estàtic amb les landings i serveix el seu “404” per defecte en lloc del nostre.
I ja tenim el migrador esbossat
Fase 3 a la vista. Hem creat scripts/migrate-wp/wp_to_payload.py: el mapatge de cada post_type de WordPress a la seva col·lecció de Payload, les regles de descart (D1-D4, amb detecció d’Elementor) i les llistes d’enums per col·lecció. Amb tests: 64 comprovacions, totes verdes.
El pas següent és la importació pilot d’una comarca. D’això parlem demà.