Initial commit
Deploy / validate-dispatch (push) Successful in 43s
Deploy / scheduled-rebuild-dev (push) Skipped
Deploy / scheduled-rebuild-master (push) Skipped
Deploy / rollback-dev (push) Skipped
Deploy / rollback-master (push) Skipped
Deploy / changes (push) Successful in 13s
Deploy / secret-scan (push) Successful in 9s
Deploy / app-quality (push) Successful in 11m21s
Deploy / security-deps (push) Successful in 14s
Deploy / context (push) Failing after 1s
Deploy / app-image (push) Skipped
Deploy / deploy-dev (push) Skipped
Deploy / deploy-master (push) Skipped

This commit is contained in:
Per Hoener
2026-09-18 23:37:19 +02:00
commit 0d45331f5c
135 changed files with 20651 additions and 0 deletions
@@ -0,0 +1,685 @@
# Codex-Masterprompt: Neue Website der Gemeinde Goldebek
Du arbeitest als Senior Full-Stack-Engineer, UX-Designer und Accessibility-Engineer. Deine Aufgabe ist, auf Basis dieses Repositories eine neue offizielle Website für die **Gemeinde Goldebek, Schleswig-Holstein** zu erstellen.
Die Website ersetzt inhaltlich die bisherige Jimdo-Seite. Sie soll **nicht** deren Gestaltung kopieren, sondern Inhalte und Funktionen sauber migrieren, aktualisieren und in eine moderne, langfristig pflegbare Struktur überführen.
## 0. Arbeitsweise
1. Untersuche zuerst das vorhandene Repository:
- Framework, Package Manager, Lockfile, Buildsystem, bestehende Komponenten, CI/CD und Deployment.
- Wenn bereits ein funktionierender Stack vorhanden ist, bleibe darin und passe dich ihm an.
- Wenn das Repository leer bzw. nur ein Grundgerüst ist, verwende eine aktuelle stabile Version von **Next.js mit App Router, TypeScript und Tailwind CSS**.
2. Entferne keine funktionierenden CI/CD-Pipelines oder Deployment-Konfigurationen.
3. Arbeite end-to-end: Informationsarchitektur, Datenmodell, Komponenten, Seiten, responsive Darstellung, Accessibility, SEO, Tests und Dokumentation.
4. Erfinde **keine** Telefonnummern, Namen, Termine, Gebühren, Satzungen, Öffnungszeiten, Rechtstexte oder Projektstände.
5. Alle dynamischen Daten müssen eine Quelle und `lastVerified` besitzen.
6. Wenn sich Quellen widersprechen, verwende die in `goldebek_data_2026-09-18.json` dokumentierte Entscheidung. Offene Punkte bleiben offen und werden nicht stillschweigend „gelöst“.
7. Übernimm keine privaten Gastgeberadressen aus alten Veranstaltungskalendern.
8. Übernimm keine fremden Fotos ohne geklärte Nutzungsrechte.
9. Verwende keine Tracker, externen Marketing-Skripte oder unnötige Third-Party-Einbindungen.
10. Liefere am Ende eine vollständig bau- und testbare Anwendung.
## 1. Verbindliche Datenbasis
Im Projekt liegt die Datei:
`goldebek_data_2026-09-18.json`
Behandle diese Datei als primären Content-Seed. Zusätzlich liegt eine ausführliche Recherche in:
`goldebek_recherche_2026-09-18.md`
Für Fakten mit `status: "needs-verification"` darfst du im öffentlichen Produktions-UI **keine ungeprüfte Behauptung** erzeugen. Solche Inhalte entweder:
- ausblenden,
- nur als redaktionellen TODO in einer Entwickler-/Preview-Ansicht markieren,
- oder auf die offizielle externe Quelle verlinken.
## 2. Zielbild
Die Website soll sich anfühlen wie ein **hochwertiges, modernes norddeutsches Gemeindeportal**:
- vertrauenswürdig
- unaufgeregt
- lokal
- freundlich
- offiziell
- sehr gut auf Mobilgeräten
- schnell
- barrierearm/barrierefrei
- redaktionell leicht pflegbar
Nicht erwünscht:
- generische „KI“-Optik
- übertriebene Gradients
- Glasmorphismus
- große animierte 3D-Effekte
- touristische Stockfoto-Ästhetik
- unnötige Carousels
- aggressive Animationen
- Marketing-Sprech
## 3. Visuelles System
Orientiere die Akzentfarben am Gemeindewappen:
- tiefes Blau
- natürliches Grün
- warmes Gold
- Weiß / Off-White / sehr helle neutrale Flächen
Wichtig:
- Das Wappen selbst niemals stilisieren, umfärben, nachzeichnen oder als dekoratives Pattern verfremden.
- Verwende nur eine von der Gemeinde freigegebene offizielle Wappengrafik.
- Falls aktuell keine freigegebene Datei im Repo liegt, nutze einen klar markierten Asset-Platzhalter im Code und dokumentiere ihn in `CONTENT_CHECKLIST.md`.
Visuelle Idee:
- ruhige horizontale oder leicht wellige Linien können dezent den Goldebeker Mühlenstrom zitieren
- moderne serifenlose Typografie
- klare Raster
- großzügiger Weißraum
- robuste Card-Komponenten
- dezente Schatten
- deutlich sichtbare Fokuszustände
- keine Informationen ausschließlich über Farbe vermitteln
Nutze möglichst Systemfonts oder lokal eingebundene freigegebene Fonts. Keine externen Google-Font-Aufrufe.
## 4. Informationsarchitektur
Erstelle folgende Hauptnavigation:
### Startseite
### Aktuelles
### Termine
### Gemeinde
- Über Goldebek
- Zahlen & Fakten
- Geschichte
- Wappen
- Dorfchronik
### Leben & Gemeinschaft
- Dörpshuus
- Spielplatz
- Vereine
- Freiwillige Feuerwehr
- Kulturausschuss
- Senioren
- Alltagshilfe Osterdörfer
### Politik & Verwaltung
- Bürgermeister & Gemeindevertretung
- Sitzungen & Protokolle
- Satzungen & Steuern
- Bauleitplanung
- Projekte & Entwicklung
### Service
- Ansprechpartner
- Mobilität
- Fahrbücherei
- Abfall & Abwasser
- Bildung / Kita / Schule
- Wichtige Links
### Kontakt
Footer:
- Impressum
- Datenschutz
- Erklärung zur Barrierefreiheit
- Amt Mittleres Nordfriesland
- Quellen-/Stand-Hinweis, wo sinnvoll
## 5. Startseite
### Hero
Eyebrow:
`Gemeinde Goldebek · Nordfriesland`
H1:
`Moin in Goldebek`
Einleitung:
`Goldebek liegt im nordöstlichen Nordfriesland zwischen Bredstedt und Wanderup. Landwirtschaft, Ehrenamt, Vereine und gemeinschaftliche Projekte prägen das Dorf.`
CTA:
- `Aktuelle Termine`
- `Goldebek entdecken`
### Faktenleiste
- 381 Einwohner Stand 31.03.2026
- 10,18 km²
- Kreis Nordfriesland
- PLZ 25862
### Danach
1. **Aktuelles** maximal drei aktuelle Meldungen
2. **Nächste Termine** die nächsten 35 bestätigten Termine
3. **Schnellzugriffe**
- Dörpshuus
- Gemeindevertretung
- Alltagshilfe
- Fahrbücherei
4. **Goldebek entdecken**
- Geschichte
- Mühlenstrom
- Dorfchronik
- Wappen
5. **Gemeinschaft**
- Vereine
- Feuerwehr
- Kulturausschuss
6. **Projekte & Entwicklung**
- Spielplatz
- Wärmeplanung
- Bauleitplanung
7. **Kontakt / Amt**
## 6. Inhalte, die bereits als verifiziert gelten
### Basisdaten
- Name: Goldebek
- Bundesland: Schleswig-Holstein
- Kreis: Nordfriesland
- Amt: Mittleres Nordfriesland
- AGS: 01054037
- PLZ: 25862
- Fläche: 10,18 km²
- Einwohner: 381 zum 31.03.2026
- Dichte: 37 Einwohner/km²
Siedlungsteile:
- Goldebek
- Heinsbek
- Kolonie
- Süderhuus
- Goldebekfeld
### Geschichte
- erste urkundliche Erwähnung: 1321
- Gemeinde seit 1934 selbstständig
- Mühle 1948 abgebrochen
- Namenswechsel Goldebeck → Goldebek mit Wirkung 01.11.1961
- Dörpshuus 2000 errichtet
- Dorfchronik Band 1: 1992
- Dorfchronik Band 2: April 2022
- Spielplatz am Langbarg: eröffnet 02.08.2026
### Bürgermeister
Peter Jessen
Am Mühlenstrom 14
25862 Goldebek
Telefon 04673/962229
Fax 04673/962688
### Gemeindevertretung
- Peter Jessen
- Hauke Jensen
- Volker Hansen
- Timo Jensen
- Catarina Tudsen
- Stefan Christiansen
- Rainer Bakker
- Finn Christiansen
- Nils Hörner
Achtung: Bei „Nils Hörner“ besteht eine Schreibweisen-Differenz zu einzelnen Sitzungsunterlagen. Im öffentlichen Seed die Amt-Schreibweise verwenden, aber in `CONTENT_CHECKLIST.md` als zu bestätigenden Punkt führen.
### Hebesätze / Hundesteuer
- Grundsteuer A: 595 v.H.
- Grundsteuer B: 517 v.H.
- Gewerbesteuer: 400 v.H.
- 1. Hund: 90 €/Jahr
- 2. Hund: 110 €/Jahr
- jeder weitere Hund: 110 €/Jahr
Mit Stand-Datum und Quelle darstellen.
### Dörpshuus
Adresse:
`Am Brodersberg 16, 25862 Goldebek`
Service-Telefon:
`0173 3826343`
Errichtet:
`2000`
Gebühren, zuletzt aus Ratsunterlagen 02.12.2025 bestätigt:
- Einwohner: 150 €
- Feuerwehr-Kameradschaftsraum: 60 €
- Auswärtige: 300 €
- Endreinigung: 70 €
- Fehlbenutzung Notausgang: 50 €
Kapazität laut Flyer April 2025:
- 80 Dörpshuus
- 20 Kameradschaftsraum
- maximal 100 insgesamt
Kaution NICHT veröffentlichen, solange der aktuelle Wert nicht bestätigt wurde.
### Spielplatz
- Name: Spielplatz am Langbarg
- eröffnet: 02.08.2026
- Projektvolumen: rund 145.000 €
- VR Bank Nord Stiftung: 10.000 € Spende
- Bürgerwindpark Veer Dörper: 500 € Spende
- Zweck: Treffpunkt für Kinder, Familien und Dorf
### Alltagshilfe Osterdörfer
Seit 01.01.2026 für:
- Goldebek
- Goldelund
- Joldelund
- Högel
- Kolkerheide
Beispiele:
- Einkäufe
- Fahrten zu Arztterminen
- kurze Kinderbetreuung
- kleine Alltagshilfen
Kein Ersatz für professionelle Pflege-, Handwerks-, Garten- oder Taxileistungen.
Kosten:
- 5 € je angefangener Stunde
- 0,50 €/km
Kontakt Goldebek:
Peter Jessen, 0151/70089673
### Mobilität
Aktuell verwendete ÖPNV-Linie:
`130`
Halte laut Betreiberseite:
- Goldebek Kreuzung
- Goldebek Dorfstraße
- Süderhuuser Straße 5
- Süderhuus
Keine Fahrzeiten in den Code kopieren. Link zur aktuellen Betreiberseite.
### Fahrbücherei
Haltestelle:
`Dorfstraße 12`
Zeit:
`15:5516:20`
Noch kommende Termine ab Recherche-Stand 18.09.2026:
- 09.10.2026
- 06.11.2026
- 04.12.2026
## 7. Events
Baue ein sauberes Event-System.
Erforderliche Eigenschaften:
```ts
type Event = {
id: string
slug: string
title: string
summary?: string
startDate: string
startTime?: string
endDate?: string
endTime?: string
timezone: "Europe/Berlin"
location?: string
organizer?: string
sourceUrl?: string
sourceName?: string
lastVerified: string
status: "verified" | "dynamic" | "needs-verification" | "archived"
privacyApproved?: boolean
}
```
Funktionen:
- kommende Termine
- Terminarchiv
- Detailseite
- ICS-Download pro Termin
- optional ein Gesamt-ICS-Feed
- schema.org/Event JSON-LD
- Datumsausgabe deutsch
- Zeitzone Europe/Berlin
- Wochentag immer aus dem Datum berechnen
- Vergangenes automatisch ins Archiv einordnen
- keine privaten Adressen ausgeben, wenn `privacyApproved !== true`
Seed die bestätigten Events aus `goldebek_data_2026-09-18.json`.
## 8. News
News-Datenmodell:
```ts
type NewsItem = {
id: string
slug: string
title: string
teaser: string
body: string
publishedAt: string
updatedAt?: string
image?: {
src: string
alt: string
copyright?: string
}
sourceUrl?: string
sourceName?: string
lastVerified: string
status: "published" | "draft" | "archived"
}
```
Lege als erste aktuelle Meldung den neuen Spielplatz an. Textlich nüchtern und lokal, nicht werblich überziehen.
## 9. Content-System
Ziel: keine Inhalte hart in React-Komponenten verstreuen.
Bevorzugt:
- `/content`
- `/data`
- JSON/YAML/MDX
- Schema-Validierung mit Zod
Beispielstruktur:
```text
content/
news/
pages/
events/
data/
municipality.json
council.json
services.json
clubs.json
sources.json
lib/
content/
dates/
validation/
```
Baue einen Validierungsschritt, z. B.:
`pnpm data:validate`
Prüfungen:
- doppelte Slugs
- ungültige ISO-Daten
- Event-Datum/Wochentag-Konsistenz
- fehlendes `lastVerified` bei dynamischen Daten
- fehlende Quelle bei politischen/administrativen Fakten
- abgelaufene `validUntil`-Einträge
- `needs-verification` darf nicht versehentlich als verifiziert angezeigt werden
- private Adressen nur mit Freigabeflag
## 10. Quellenkonzept
Pflege Quellen zentral in `data/sources.json`.
Jeder volatile oder verwaltungsbezogene Inhalt kann auf eine `sourceId` referenzieren.
Im öffentlichen UI:
- nicht jede Seite muss mit Quellen überladen sein
- bei Steuern, Fahrplänen, Verwaltung, Projekten und aktuellen Daten einen dezenten `Stand: …`-Hinweis und „Amtliche Quelle“ anbieten
- externe Links klar kennzeichnen
## 11. Bilder und Rechte
Die Recherche hat auf der Amt-Seite hochwertige Ortsbilder gefunden, die dort mit Fotografen-Copyright gekennzeichnet sind. Diese Bilder sind **nur Referenz**, nicht automatisch nutzbare Website-Assets.
Daher:
- keine Bilder von der Amt-Seite herunterladen oder kopieren
- keine Bild-URLs hotlinken
- im Projekt saubere Platzhalter/Asset-Slots vorsehen
- benötigte Motive in `CONTENT_CHECKLIST.md` aufführen:
- Luft-/Ortsansicht
- Dörpshuus
- Spielplatz
- Ortseingang/Wappenstein
- Landschaft/Mühlenstrom
- Vereinsleben
- Feuerwehr
- Streuobstwiese/Feste
Jedes Bildmodell soll `alt` und optional `copyright` enthalten.
## 12. Karte
Keine Google-Maps- oder externe OSM-Iframe-Einbindung standardmäßig laden.
Bevorzugt:
- kleine statische Lagekarte als eigenes Asset, wenn vorhanden, oder
- gut gestaltete Standortkarte mit Link `In OpenStreetMap öffnen`
So bleibt die Startseite ohne Third-Party-Requests datenschutzfreundlich.
## 13. Politik und Verwaltung
Die Website ist eine kommunale Informationsseite, keine politische Kampagnenseite.
Darstellung:
- neutral
- sachlich
- keine Rankings oder wertenden Beschreibungen
- keine parteipolitische Gestaltung
- Ratsmitglieder gleichartig darstellen
Sitzungen und Protokolle:
- eine übersichtliche Einstiegsseite
- möglichst auf die amtliche bzw. aktuelle Dokumentquelle verlinken
- keine veralteten Protokollkopien als „aktuell“ ausgeben
Satzungen:
- nur Titel und Link zur aktuellen Amt-Version
- keine alte PDF-Kopie im Repo pflegen, wenn das Amt die maßgebliche Fassung bereitstellt
Bauleitplanung:
- auf die aktuelle Seite des Amtes verlinken
- keine Statusaussage aus alten Ratsprotokollen ableiten
## 14. Barrierefreiheit
Ziel mindestens WCAG 2.2 AA und gute Praxis für kommunale Websites.
Pflicht:
- semantisches HTML
- Skip-Link
- vollständig tastaturbedienbar
- sichtbare Fokuszustände
- ausreichende Kontraste
- Form-Labels
- sinnvolle Überschriftenhierarchie
- `aria-*` nur dort, wo semantisches HTML nicht reicht
- `prefers-reduced-motion`
- Alt-Texte
- keine Auto-Play-Medien
- keine Informationen ausschließlich über Farbe
- Touch Targets ausreichend groß
- 200-%-Zoom ohne Funktionsverlust
- verständliche Linktexte
Erstelle eine Seite `Barrierefreiheit`, aber **erfinde keine rechtsverbindliche Erklärung**. Nutze einen klar markierten, nicht als final ausgegebenen Redaktionsplatzhalter.
## 15. Datenschutz
Standard:
- kein Google Analytics
- kein Meta Pixel
- keine Marketing-Cookies
- keine automatisch geladenen externen Karten/Videos
- keine Drittanbieter-Schriftarten
- kein Cookie-Banner nur „vorsichtshalber“
Falls später Analyse benötigt wird:
- Architektur für datenschutzfreundliche, ggf. selbst gehostete Lösung offen halten
- erst nach rechtlicher Freigabe aktivieren
Kontaktformular nur bauen, wenn ein sinnvoller Backend-/Mailweg und Spam-Schutz vorhanden sind. Sonst lieber gut gestaltete `mailto:`-/`tel:`-Kontakte.
## 16. SEO und strukturierte Daten
Implementieren:
- individuelle Titles/Descriptions
- Canonicals
- OpenGraph
- Sitemap
- robots.txt
- sprechende deutsche Slugs
- locale `de_DE`
- JSON-LD für Gemeinde/Organisation
- JSON-LD für Events
- Breadcrumbs
Keine Keyword-Spam-Texte.
## 17. Performance
Ziele:
- Lighthouse möglichst >95 in Performance/Accessibility/Best Practices/SEO
- sehr wenig Client-JavaScript
- Server Components / statische Seiten bevorzugen
- Bilder optimieren
- keine Layout Shifts
- keine unnötigen Animation-Libraries
- keine schweren Icon-Pakete, wenn wenige SVGs reichen
## 18. Suchfunktion
Wenn mit vertretbarem Aufwand möglich:
- kleine clientseitige Suche über Seiten, News, Termine und Vereine
- kein externer Suchdienst
- Suchindex beim Build generieren
Wenn es die Komplexität unnötig erhöht, sauber weglassen und dokumentieren.
## 19. Rechtliche Seiten
Erstelle Routen und Layout für:
- Impressum
- Datenschutz
- Barrierefreiheit
Aber:
- keine juristischen Inhalte erfinden
- im Entwicklungsstand klare Platzhalter
- in Produktionskonfiguration keine erfundenen Texte als final ausgeben
## 20. Migration alter URLs
Lege eine Redirect-Matrix an, soweit alte Pfade bekannt sind, z. B.:
```text
/die-gemeinde/ueber-uns/ -> /gemeinde/ueber-goldebek
/die-gemeinde/doerpshuus/ -> /leben/doerpshuus
/die-gemeinde/dorfchronik/ -> /gemeinde/dorfchronik
/die-gemeinde/kulturausschuss/ -> /leben/kulturausschuss
/termine/ -> /termine
/gemeindevertretung/ -> /politik/gemeindevertretung
/vereine/ -> /leben/vereine
```
Wenn das Hosting Redirects anders konfiguriert, passe die technische Umsetzung an den Stack an.
## 21. Tests und Qualitätschecks
Mindestens:
- TypeScript typecheck
- ESLint
- Produktions-Build
- Unit-Tests für Eventsortierung und Archivierung
- Unit-Test für Europe/Berlin-Datumslogik
- Unit-Test der Content-Schema-Validierung
- Link-Prüfung für interne Links
- Accessibility-Smoke-Test mit axe oder gleichwertig, wenn Stack geeignet
- keine Console-Errors
## 22. Dokumentation
Erstelle:
### `README.md`
- Setup
- lokale Entwicklung
- Build
- Deployment
- Content-Struktur
- neue News anlegen
- neuen Termin anlegen
- Ratsmitglieder aktualisieren
- Quelle/lastVerified pflegen
- Bild mit Copyright pflegen
- jährliche Updates
### `CONTENT_CHECKLIST.md`
Mindestens diese offenen Punkte:
- [ ] Heimatmuseum-Telefon bestätigen
- [ ] Schreibweise Nils Hörner/Höner bestätigen
- [ ] aktuelle Dörpshuus-Kaution bestätigen
- [ ] vollständige aktuelle Dörpshuus-Nutzungsbedingungen prüfen
- [ ] freigegebene Wappen-Datei bereitstellen
- [ ] Bildrechte / Originalbilder bereitstellen
- [ ] aktueller Abfall-Link
- [ ] aktueller Abwasser-Link
- [ ] B-Plan-5-/Baugrundstücksstatus bestätigen
- [ ] Windparkdaten nur bei gewünschter Veröffentlichung aktualisieren
- [ ] Rechtstexte bereitstellen/freigeben
- [ ] Fahrbücherei-Fahrplan für Folgejahr aktualisieren
- [ ] Veranstaltungskalender für Folgejahr aktualisieren
## 23. Wichtige Datenkonflikte niemals falsch übernehmen
1. **Einwohner:** 381 zum 31.03.2026 verwenden. Alte Zahl 350 verwerfen.
2. **Bus:** aktuelle Betreiberseite = Linie 130. Alte Angabe R125 nicht verwenden.
3. **Spielplatz:** seit 02.08.2026 eröffnet. Alte OEK-Aussage „kein Spielplatz“ ist überholt.
4. **Heimatmuseum:** Telefonnummer widersprüchlich. Nicht veröffentlichen.
5. **Nils Hörner/Höner:** Amt-Schreibweise verwenden und als Prüfpunkt dokumentieren.
6. **Dörpshuus-Kaution:** nicht veröffentlichen, bis bestätigt.
7. **Windpark:** keine statische Anlagenzahl wegen Repowering.
8. **Private Adventsadressen:** nicht ungeprüft migrieren.
## 24. Definition of Done
Die Aufgabe ist fertig, wenn:
- die neue Informationsarchitektur umgesetzt ist
- Startseite und alle Hauptbereiche existieren
- alle bestätigten Seed-Daten strukturiert vorliegen
- Events automatisch kommende/vergangene Termine unterscheiden
- Quellen- und Prüfstatus technisch abgebildet sind
- mobile und Desktopdarstellung hochwertig sind
- Wappen-/Bildrechte nicht verletzt werden
- keine ungeprüften Fakten erfunden wurden
- `typecheck`, `lint`, Tests und Produktions-Build erfolgreich laufen
- README und CONTENT_CHECKLIST vollständig sind
Arbeite jetzt das Repository vollständig durch und implementiere diese Website. Triff sinnvolle technische Detailentscheidungen selbstständig, ohne die inhaltlichen Sicherheitsregeln zu umgehen.