feat(termin): Termin-Detail unter /kalender/termin/<slug>, 302 von alt
Deploy / verify (push) Successful in 1m21s
Deploy / deploy (push) Successful in 1m39s

Route /termin/[slug] -> /kalender/termin/[slug] verschoben, alte URL
302-redirect (QR-Codes/geteilte Links bleiben gueltig). Breadcrumb 3-stufig
(Start > Kalender > Titel). QR-/Detail-/OG-Links auf neuen Pfad.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Peter Meier
2026-06-23 10:35:15 +02:00
parent a628e0e8d1
commit e434ee3620
6 changed files with 201 additions and 190 deletions
@@ -461,13 +461,13 @@
}
// QR-Code zum direkten Ausgeben/Scannen (Aushang, Infostand). Nutzt die
// canonical /termin/<slug>-URL (hat OG-Tags + Redirect), Fallback = Hash-
// canonical /kalender/termin/<slug>-URL (hat OG-Tags), Fallback = Hash-
// Anchor im Kalender wenn kein Slug.
let qrModal = $state<{ value: string; label: string } | null>(null);
function openQr(item: EventCardItem) {
const url = item._slug
? `${window.location.origin}/termin/${encodeURIComponent(item._slug)}/`
? `${window.location.origin}/kalender/termin/${encodeURIComponent(item._slug)}/`
: `${window.location.origin}${window.location.pathname}#${eventId(item)}`;
qrModal = { value: url, label: item.title || "Termin" };
}
@@ -753,7 +753,7 @@
<div class="flex flex-wrap gap-2">
{#if item._slug}
<a
href={`/termin/${encodeURIComponent(item._slug)}/`}
href={`/kalender/termin/${encodeURIComponent(item._slug)}/`}
class="btn-tertiary btn-sm"
>
Details
@@ -45,7 +45,7 @@
<time
datetime={isoDate(start)}
aria-label={ariaLabel}
class="shrink-0 select-none aspect-square size-20 rounded-sm rounded-br-4xl bg-wald-200 text-wald-500 flex justify-center items-center shadow"
class="shrink-0 select-none aspect-square size-18 rounded-sm rounded-br-4xl bg-wald-200 text-wald-500 flex justify-center items-center shadow"
>
<div class="text-center font-black leading-normal">
<div class="text-[10px] uppercase tracking-wider">