Phase 2: fix the confirmed bugs #3
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/phase-2-bugs"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This PR fixes bugs and adds the missing basics (404 page, page titles,
lang). Every live URL stays the same, and nothing changes on the server: same Dockerfile, compose file, pipeline and Traefik labels.One commit per fix:
/aanbod/x/y) crashed with a 500; an unknown atelier in a known category (/aanbod/focus/nope) gave an empty page with a 200. Both now give a 404. A newerror.vueshows the error inside the normal header and footer, in Dutch ("Deze pagina bestaat niet"), with a button back to the start page.content/aanbod/nlnow has aslugfield, set to exactly the slug its live URL uses today. Links and routing readslug; oneslugify()(utils/slug.js) replaces the twosanitize()copies and is only a fallback. Tested: renaming "Modeltekenen" in a local build left all 15 URLs unchanged.pages/index.vueandelements/news.vueboth cached undernews, with different queries. Nownews-homeandnews-by-id-<ids>. (Thepage-${route}key from the audit went with the extra-pages route in Phase 1.)text.vueside2.v-if:markdownString="side2"was a typo, so aside2could never render. Fixed and the props typed. No visible change today:academie.ymlhas noside2(and never had one in git).news.vueandbanner.vue. News: an empty list no longer throws, and the id branch sorts the data, not the Ref. Banner: a changed image id now shows (the watcher replaced a plain variable), and a missing image record no longer crashes.person.vueloaded all persons once per person. The list now loads them once and hands each person its record: same people, same order, and the/academieHTML drops from 290 kB to 208 kB. The server-sideconsole.logs ("Person …", "here") are gone.title === 'Kunstkuur'. The Kunstkuur atelier now lists them in avideosfield (ids fromcontent/media/videos), in the same order, with the same markup.theaddebug border inassets/css/main.cssis removed.display: nonestays: it hides the empty header row of the price table on/inschrijven.lang.<html lang="nl">, a<title>per page ("Aanbod · Sint Lukas Academie Brussel"; the home page is the site name only) and a meta description, both fromcontent/site/info.json.backgroundat/assets/uploads/1.jpg, deleted through the CMS on 29 Jan 2026. No page reads a category'sbackground, so the line is removed and nothing on the page changes.slugis and why it never changes, and the fields a category and an atelier need.Not in this PR: the Facebook and Instagram icons in the footer are still not links. Their URLs are not anywhere in this repo, its history or the old repo, and we don't want to guess them. Once the school gives the two addresses, it's a two-line change.
Size: 27 files changed, 212 lines added, 88 removed.
Checked locally with Node 22.14.0 and pnpm 9.1.2 (Corepack):
pnpm install --frozen-lockfileandpnpm buildpass./aanbod,/academie,/inschrijven,/contactand the 15 atelier pages. The 15 atelier URLs on/aanbodare identical before and after. All 75 image and asset URLs on those pages still return 200./aanbod/x/yand/aanbod/nope/expo-trajectwent from 500 to 404;/aanbod/focus/nopeand/aanbod/volwassenen/Modeltekenen(wrong case) went from an empty 200 to 404. No route returns a 500./aanbod, one atelier,/academie,/inschrijvenand/contacthas the same body markup and the same CSS classes before and after. The only differences arelang="nl", the<title>, the meta description, and the script and data changes listed above (the newslugandvideosfields, one persons list instead of one per person).Not checked: Docker and Woodpecker (unchanged by this PR).
🤖 Generated with Claude Code
pages/index.vue and elements/news.vue both cached under the key `news`, with different queries, so one could serve the other's data on client navigation. They are now `news-home` and `news-by-id-<ids>`. The `page-${route}` key ("page-[object Object]") from the audit went with the extra-pages route in Phase 1. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>person.vue loaded the whole persons collection once per person (and kept a payload copy per person), then filtered by title. persons.vue now loads the collection once (key `persons-nl`) and hands each person its record; person.vue only fetches on its own when used without a record (the `person` dispatch block, unused in content today). Same people, same order, same markup; the /academie HTML payload drops from 290 kB to 208 kB. Also removes the server-side console.log calls ("Person <id>" per person, "here" in locations.vue). No other console calls remain in components, pages or layouts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>`thead { border: thin solid red !important }` was a debug leftover. The `display: none` next to it stays on purpose: the price table in inschrijven.yml has an empty header row (Markdown tables need one), and the rule hides it. No visible change: a hidden thead showed no border. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>