feat: redesign CMS and unify German admin UI

This commit is contained in:
2026-09-17 16:51:24 +02:00
parent a2b3e99174
commit 7ec0c51ff5
129 changed files with 952 additions and 550 deletions
+8 -7
View File
@@ -3,25 +3,26 @@ import { canViewAnalytics } from "@/access";
/**
* One row per tracked event (page_view, booking_started, ...). Deliberately
* append-only and never writable via the public/admin API — the only writer
* append-only and never writable via the public/admin API - the only writer
* is app/(payload)/api/analytics/track/route.ts, which uses the trusted
* Local API (overrideAccess: true by default) to insert rows despite
* `create` being locked to `() => false` here. The only deleter is the
* cleanup cron (lib/analytics/cleanup.ts), same mechanism.
*
* No name/email/IP/UA is ever stored — see lib/analytics/salt.ts for how
* No name/email/IP/UA is ever stored - see lib/analytics/salt.ts for how
* `visitorHash` is derived without persisting anything identifying.
*/
export const AnalyticsEvents: CollectionConfig = {
slug: "analytics-events",
labels: {
singular: "Analytics-Event",
plural: "Analytics-Events",
singular: "Messereignis",
plural: "Messereignisse",
},
admin: {
// High-volume, low-signal raw data — not meant for manual browsing.
// The Analytics dashboard (a custom admin view) reads it programmatically.
group: "Auswertung",
hidden: true,
// High-volume, low-signal raw data - not meant for manual browsing.
// The Analytics dashboard (a custom admin view) reads it programmatically.
},
access: {
create: () => false,
@@ -42,7 +43,7 @@ export const AnalyticsEvents: CollectionConfig = {
name: "visitorHash",
type: "text",
required: true,
// Daily-rotating pseudonymous hash (see lib/analytics/salt.ts) — never
// Daily-rotating pseudonymous hash (see lib/analytics/salt.ts) - never
// a raw IP/UA, never stable across days, never exposed to the client.
},
{