Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
1ca20c4
feat(design): Programmheft-Grundlagen – Archivo, Tokens und Hilfsklassen
nichtLehdev Sep 15, 2026
ae76d30
feat(design): Navigation, Banner und Fußzeile im Programmheft-Stil
nichtLehdev Sep 15, 2026
457bebd
feat(startseite): Startseite als Programmheft
nichtLehdev Sep 15, 2026
1160b81
docs(design): Produktkontext und Designsystem „Programmheft“
nichtLehdev Sep 15, 2026
3181bbd
feat(startseite): Schlussaufruf auf oranger Fläche
nichtLehdev Sep 15, 2026
3c34bf5
refactor(programmheft): Bausteine der Startseite als öffentliche Prim…
nichtLehdev Sep 15, 2026
f60321d
feat(programmheft): Seitenkopf, öffentliche Varianten und Personenzeilen
nichtLehdev Sep 15, 2026
7647ba4
feat(mitmachen): Mitmachen als Programmheft-Referenzseite
nichtLehdev Sep 15, 2026
f20abcd
chore(programmheft): Altlasten aus der alten Startseite entfernen
nichtLehdev Sep 15, 2026
dc080bc
fix(termine): Etiketten im Seitenkopf mit lesbaren Kurs- und Terminarten
nichtLehdev Sep 15, 2026
38fcd0f
fix(programmheft): Befunde der Abschlussprüfung und mehr Farbe für Mi…
nichtLehdev Sep 15, 2026
3146875
feat(mitmachen): Abschnittsköpfe wechseln die Seite, kein Fotofeld
nichtLehdev Sep 15, 2026
c4a4bae
docs(design): Innenseiten-Bausteine im Programmheft
nichtLehdev Sep 15, 2026
1602e66
feat(mitmachen): Mitgliedschaft und Versicherung auf eigene Seite
nichtLehdev Sep 15, 2026
a42d9e5
fix(foerderverein): Angaben aktualisieren
nichtLehdev Sep 15, 2026
7dd9bd1
feat(aktuelles): Aktuelles, Suche und Newsletter im Programmheft
nichtLehdev Sep 15, 2026
45ce4d8
feat(materialien): Materialien, Blechblatt, Literatur und Spiele im P…
nichtLehdev Sep 15, 2026
ad23333
feat(ueber-uns): Über uns, Vorstand, Posaunenrat und Auswahlchöre im …
nichtLehdev Sep 15, 2026
21bef7f
feat(service): Kontakt, Rechtstexte und Servicestellen im Programmheft
nichtLehdev Sep 15, 2026
970a106
feat(chrome): Suchfenster, Teilen-Dialog und Glocke im Programmheft
nichtLehdev Sep 15, 2026
ed6ef92
fix(newsletter): Knopf nicht vorab deaktivieren, Zusicherungen als Ra…
nichtLehdev Sep 15, 2026
fdcf661
feat(termine): Termine, Kursdetails und Anmeldung im Programmheft
nichtLehdev Sep 16, 2026
de227c7
feat(mitmachen): Bildung, Jungbläser und Ehrenamt im Programmheft
nichtLehdev Sep 16, 2026
d845e55
fix(programmheft): Hinweis darf einen Abschnittskopf tragen
nichtLehdev Sep 16, 2026
6bef3ff
feat(chor-finden): Chorsuche und Bezirke im Programmheft
nichtLehdev Sep 16, 2026
5dc6708
fix(programmheft): Rückmeldungen aus dem ersten Durchgang
nichtLehdev Sep 16, 2026
30dfb5a
feat(foerderverein): Fördervereinsseite im Programmheft
nichtLehdev Sep 16, 2026
228fb97
feat(vorstand): Vorstandsmitglieder wieder mit großen Porträts
nichtLehdev Sep 16, 2026
8a68196
feat(kontakt): Geschäftsstelle und Internet-Team nebeneinander
nichtLehdev Sep 16, 2026
b2c9027
feat(termine): Kolumnentitel in den klebenden Filterleisten
nichtLehdev Sep 16, 2026
1ac06d2
feat(konto): Meine Anmeldungen und Einstellungen im Programmheft
nichtLehdev Sep 16, 2026
af56d34
fix(kontakt): Spalten auf gemeinsame Zeilen, zwei Darstellungsfehler …
nichtLehdev Sep 16, 2026
54d069a
feat(programmheft): Kolumnentitel auf allen öffentlichen Seiten
nichtLehdev Sep 16, 2026
1fceaca
fix(konto): Breite der Konto-Seiten und deutsche Preisformatierung
nichtLehdev Sep 16, 2026
46300ea
feat(konto): Anmeldungsdetails, Bearbeiten und 2FA im Programmheft
nichtLehdev Sep 16, 2026
6323069
feat(email): Gemeinsame Hülle im Programmheft und Nur-Text-Fassungen
nichtLehdev Sep 16, 2026
328e5e2
feat(email): Alle Vorlagen im Programmheft, jede Mail zusätzlich als …
nichtLehdev Sep 16, 2026
14c54ef
fix(email): Trennlinien als Tabellenzellen statt als Rahmen
nichtLehdev Sep 16, 2026
a44be30
fix(bezirke): Bezirk 1 und 2 auf der Bezirkskarte vertauscht
nichtLehdev Sep 16, 2026
06f0dfe
fix(programmheft): Kolumnentitel erschien nie, Titel der Filterleiste…
nichtLehdev Sep 16, 2026
3253a73
feat(karte): Bezirksflaechen als Tonwert statt voller Saettigung
nichtLehdev Sep 16, 2026
8609637
fix(anmeldungen): Erster Kurs stand ohne Abstand an der Trennlinie
nichtLehdev Sep 16, 2026
9928fff
fix(posaunenwarte): Leere Kopfspalte neben der Liste der Regionalposa…
nichtLehdev Sep 16, 2026
3ee9901
fix(posaunenwarte): Regionalposaunenwarte ab 64rem zweispaltig
nichtLehdev Sep 16, 2026
2470f20
fix(einstellungen): Gleicher Abstand ueber der Leiste wie bei Meine A…
nichtLehdev Sep 16, 2026
4ac080c
fix(auswahlchoere): Bild in die Kopfspalte, erster Chor mit Abstand z…
nichtLehdev Sep 16, 2026
3ea6ca1
feat(programmheft): Mitlaufender Abschnittskopf fuer drei lange Absch…
nichtLehdev Sep 16, 2026
0297b0e
feat(dashboard): Fundament im Programmheft — Huelle, Tabelle, Seitenl…
nichtLehdev Sep 16, 2026
146fef9
fix(anmeldungen): Statusfilter als Register statt Kaesten
nichtLehdev Sep 16, 2026
be83928
feat(ui): Geteilte Bausteine im Programmheft, Kontrastfehler behoben
nichtLehdev Sep 16, 2026
aed1e59
feat(dashboard): Seitenschicht im Programmheft — Uebersicht, Listen, …
nichtLehdev Sep 16, 2026
c79a141
feat(oeffentlich): Anmeldeseiten, Fehlerseiten und Ensemble-Detail im…
nichtLehdev Sep 16, 2026
35f06db
feat(dashboard): Medien, Downloads, Homepage und die vier Verwaltungs…
nichtLehdev Sep 16, 2026
e1512dd
fix(ui): Restliche Grautoene im Auswahlfeld
nichtLehdev Sep 16, 2026
ef0f344
feat(dashboard): Pflegeseiten fuer Vorstand, Team, Posaunenrat, Posau…
nichtLehdev Sep 16, 2026
6f92398
feat(dashboard): Termin- und Beitragsseiten im Programmheft
nichtLehdev Sep 16, 2026
30455cb
feat(dashboard): Kurs-Seiten im Programmheft
nichtLehdev Sep 17, 2026
93a0e38
feat(dashboard): Bezirke, Ensembles, Auswahlchoere, Blaeserhefte, Ort…
nichtLehdev Sep 17, 2026
18da5df
refactor(dashboard): Einheitliche Aktionsfarbe, Ladezeiger und Status…
nichtLehdev Sep 17, 2026
12d30d9
refactor(anmeldung-erfassen): Geteilte Huelle statt handgebautem Rahmen
nichtLehdev Sep 17, 2026
7ad3d8a
fix(a11y): Zugaengliche Namen, Sprunglinks und Klickziele
nichtLehdev Sep 17, 2026
db3f589
fix(inhalt): Tippfehler und widersprochener Geschwisterrabatt
nichtLehdev Sep 17, 2026
aca562f
fix(a11y): Bezirksfarben als Markierung statt als Schriftgrund
nichtLehdev Sep 17, 2026
1d28a0f
fix(a11y): Artikelkoerper im Programmheft statt in Grau
nichtLehdev Sep 17, 2026
bb1bac2
docs(bezirksfarben): getDistrictTextColor als untauglich kennzeichnen
nichtLehdev Sep 17, 2026
5d9ef65
refactor(dashboard): Rohe Signalfarben ersetzt, Dunkelmodus-Luecken g…
nichtLehdev Sep 17, 2026
7f116fa
fix(dashboard): Kopfzeile bricht um, statt den Titel zu zerquetschen
nichtLehdev Sep 17, 2026
3d1d8a6
fix(kurse): Statuswahl wirkt, Rechnungen ueberleben das Loeschen
nichtLehdev Sep 17, 2026
83e2c71
fix(sicherheit): HTML-Filter wirkt wieder wie beabsichtigt
nichtLehdev Sep 17, 2026
f3d7f99
feat(artikel): Bildvokabular aus Breite und Ausrichtung
nichtLehdev Sep 17, 2026
19ec1dd
feat(editor): Bilder mit einrastenden Ziehgriffen skalieren und ausri…
nichtLehdev Sep 17, 2026
9829989
feat(artikel): Titelbild in den Text integriert statt als Block darueber
nichtLehdev Sep 17, 2026
95b6d48
refactor(editor): Schreibflaeche in Tinte, tote Grauklassen aus Tabellen
nichtLehdev Sep 17, 2026
5930e11
refactor(editor): Keine Inline-Klassen mehr ins gespeicherte HTML
nichtLehdev Sep 17, 2026
deffe0d
feat(editor): Bildausrichtung bedienbar machen
nichtLehdev Sep 17, 2026
e72ccaa
refactor(design): Letzte Bausteine im alten Design, tote Dateien entf…
nichtLehdev Sep 17, 2026
8b1985e
fix(design): Mitlaufende Koepfe kleben unter dem Kolumnentitel
nichtLehdev Sep 17, 2026
537f860
fix(foerderverein): Abstand zwischen Seitentitel und erstem Abschnitt
nichtLehdev Sep 17, 2026
c45472a
fix(auswahlchoere): Text und Termine auf einem Satzmass am Bild
nichtLehdev Sep 17, 2026
c3dbba4
fix(design): Rechte Spalte als ein grid-column-Wert
nichtLehdev Sep 17, 2026
e4bf133
fix(termine): Randspalte klebt unter der Navigation, nicht dahinter
nichtLehdev Sep 17, 2026
aff3e92
Merge branch 'release/1.0.0' into feat/programmheft-grundlagen
nichtLehdev Sep 17, 2026
e8a8007
refactor(anmeldungen): Neue Anmelde-Oberflaechen im Programmheft
nichtLehdev Sep 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
360 changes: 360 additions & 0 deletions DESIGN.md

Large diffs are not rendered by default.

87 changes: 87 additions & 0 deletions PRODUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# Product

<!-- impeccable:product-schema 1 -->

## Platform

web

(Installierbare PWA mit handgeschriebenem Service Worker und Offline-Seite; Spiele laufen im Standalone-Modus mit Safe-Area-Unterstützung. Es gibt keine native App.)

## Users

**Hauptzielgruppe: aktive Chormitglieder.** Bläserinnen und Bläser sowie Chorleitungen aus den Posaunenchören der Evangelischen Kirche im Rheinland (13 Bezirke). Sie kommen mit einer konkreten Aufgabe: einen Termin nachsehen, sich zu einem Lehrgang anmelden (inkl. Anzahlung und Rechnung), die eigene Anmeldung verwalten, Materialien und Noten finden, das Rheinische Blechblatt lesen oder mit den Spielen üben. Viele nutzen die Seite unterwegs auf dem Handy, und die Altersspanne reicht von Jungbläser:innen bis zu langjährigen, älteren Mitgliedern.

Weitere bestätigte Zielgruppen, bei Designentscheidungen nachrangig:

- **Neue und Interessierte** (Eltern, Kinder und Jugendliche, Wiedereinsteiger:innen), die über „Mitmachen“ einen Chor in der Nähe, die Jungbläserarbeit oder Bildungsangebote finden.
- **Das Dashboard-Team:** Landesposaunenwarte, Regionalposaunenwarte, die Geschäftsstelle, Obleute und Ehrenamtliche. Sie pflegen Termine, Kurse, Beiträge, Ensembles, Personen, Newsletter, Rechnungen und Anmeldungen und geben Inhalte frei.
- **Förderer:** Mitglieder und mögliche Mitglieder des Fördervereins Rheinisches Posaunenwerk.

## Product Purpose

Die Plattform ist das Zuhause der evangelischen Bläserarbeit im Rheinland. Sie verbindet den öffentlichen Auftritt des Posaunenwerks (Termine, Lehrgänge, Aktuelles, Materialien, Struktur, Prävention, Förderverein) mit den Werkzeugen, mit denen der Verband seine Arbeit organisiert.

Erfolg bemisst sich an vier gleichrangigen Zielen:

1. **Lehrgangsanmeldungen:** mehr und reibungslosere Anmeldungen zu Kursen und Lehrgängen, von der Anmeldung über die Anzahlung bis zur Rechnung.
2. **Nachwuchs und Chorsuche:** mehr Menschen finden einen Posaunenchor und steigen in die Bläserarbeit ein, besonders Kinder und Jugendliche.
3. **Weniger Verwaltungsaufwand:** Geschäftsstelle und Ehrenamtliche sparen Zeit beim Pflegen, Freigeben und Kommunizieren.
4. **Sichtbarkeit und Bindung:** Aktuelles, Newsletter, Blechblatt, Spiele und Förderverein halten die Gemeinschaft über die Bezirke hinweg zusammen.

## Positioning

Die offizielle Plattform des Posaunenwerks der Evangelischen Kirche im Rheinland e.V. Andere Musikseiten können das nicht glaubwürdig nachahmen: Termine, Lehrgänge, Chorverzeichnis, Bezirksstruktur, Materialien des Verbands und die Lern-Spiele für Blechbläser kommen aus einer Hand und aus derselben Datenbank, gepflegt von den Menschen, die die Bläserarbeit tatsächlich tragen. Die Plattform ist zugleich Schaufenster und Arbeitsmittel des Verbands. Leitmotiv laut Startseite: „Gemeinsam Musik machen, Glauben leben“.

## Operating Context

- **Öffentliche Seite (Deutsch, `lang="de"`):** Start, Termine, Aktuelles, Mitmachen (Chor finden mit Karte, Aus- und Weiterbildung, Jungbläserarbeit, Ehrenamt), Materialien (Rheinisches Blechblatt, Literatur & CDs), Spiele, Über uns (Struktur & Geschichte, Vorstand, Posaunenwarte, Bezirke & Obleute, Auswahlchöre, Posaunenrat), Förderverein, Prävention, Newsletter, Suche, Kontakt, Impressum, Datenschutz, Lizenzen.
- **Konto-Bereich:** Registrierung, Login mit Zwei-Faktor-Authentifizierung, eigene Anmeldungen, Anmeldung per Link verwalten (`/anmeldung-verwalten`), Einstellungen.
- **Dashboard:** Inhaltspflege für alle Entitäten, Freigabe-Workflow (DRAFT → PENDING → APPROVED), Kursverwaltung mit Teilnehmenden, individuellen Anmeldefeldern, Preisoptionen, Anzahlungen, Rechnungen und Kurs-Mails, Newsletter, Medienbibliothek mit Freigabe, Startseiten-Karussell, Statistik, Audit-Log, Rollen und Rechte (hierarchische Rollen, Bezirks-Zuständigkeiten), Export/Import, Wartungsmodus, Social-Media-Export für Instagram.
- **Spiele:** Rhythmus, Noten lesen, Griffe (Ventile/Zugpositionen) und Notenwaage, kostenlos im Browser und offline nutzbar. Die Statistik liegt zuerst lokal und wird bei Anmeldung synchronisiert. Öffentliche Notensets gibt es auch.
- **Rituale und Kanäle:** Lehrgangssaison mit Anmeldefristen und Anzahlungen, Fördervereinstag, Rheinisches Blechblatt als Magazin, Newsletter mit Double-Opt-in, RSS-Feed für Aktuelles, Social Media (Facebook, Instagram, YouTube).
- **Umgebungen:** Die Produktion läuft auf mittwald. Eine Vorab-Umgebung zeigt ein Beta-Banner (`APP_ENV` ≠ `production`), auf ihr ist die Feedback-Seite aktiv.

## Capabilities and Constraints

- **Stack (bestehend):** Next.js 16 (App Router, Turbopack), TypeScript, tRPC, Prisma/PostgreSQL, Better Auth, Tailwind CSS 4, React Query. Tiptap für Rich-Text, Leaflet für Karten, Recharts für Statistiken, VexFlow (nur `vexflow/bravura`) für Notensatz.
- **Hell- und Dunkelmodus** werden beide unterstützt (Systemeinstellung oder manuelle Wahl).
- **DSGVO:** Tracking nur mit Einwilligung, Datenexport und Löschwege für Admins (siehe `docs/DSGVO-COMPLIANCE.md`).
- **Kinderschutz** ist Pflichtthema: Präventionsseite, Selbstverpflichtung und Zusatzerklärung für Minderjährige.
- **Rollen:** Landesposaunenwart (LPW) gibt alles frei, Regionalposaunenwart (RPW) die zugewiesenen Bezirke, Obleute erstellen Inhalte, die freigegeben werden müssen. Die Rechte sind feingranular und hierarchisch.
- **Fachbegriffe beibehalten:** Posaunenchor, Bläser:innen, Jungbläser, Lehrgang, Bezirk, Obleute, Posaunenwart (LPW/RPW), Posaunenrat, Auswahlchor, Bläserheft, Blechblatt, Förderverein.
- **Offen:** Die Anrede ist nicht festgelegt. Öffentliche Texte duzen meist („Finde einen Posaunenchor …“), einzelne Stellen siezen („für Ihren Posaunenchor“). Das ist noch zu entscheiden.

## Brand Commitments

Verbindlich sind nur diese Vorgaben, alles andere am Erscheinungsbild ist frei:

- **Logo:** `public/images/logo-horizontal.svg`, `logo-horizontal-dark.svg`, `logo-icon.svg`, `logo-icon-dark.svg`, `logo.png`, dazu App-Icons in `public/` (inkl. maskable).
- **Primärfarbe:** `#faa619` (Token `--color-primary` in `src/styles/globals.css`).
- **Fördervereinsfarbe:** `#78a8da` (Token `--color-foerderverein`). Sie kennzeichnet den Förderverein.
- **Name:** „Posaunenwerk Rheinland“. Die rechtliche Bezeichnung lautet „Posaunenwerk der Evangelischen Kirche im Rheinland e.V.“, der Förderverein heißt „Förderverein Rheinisches Posaunenwerk“.

## Evidence on Hand

- **Echte Organisationsdaten:** Anschrift, Telefon, E-Mail und Social-Media-Profile in `src/lib/structured-data.ts` (synchron mit dem Impressum).
- **Offizielle Dokumente** in `public/downloads/`: Satzung, Ehrenordnung, Aufnahmeantrag für Chöre, Arbeitshilfe Jungbläser, Leistungsstempel, Förderverein-Flyer, Selbstverpflichtung Kinderschutz, Zusatzerklärung Minderjährige.
- **Bilder** von Personen und Gremien in `public/images/` (team, vorstand, posaunenwarte, bezirke, auswahlchoere, blaeserhefte). Hinzu kommen hochgeladene Medien in der Datenbank mit Bildnachweisen.
- **Audio:** `public/audio/frankreich-2021-sample.mp3`.
- **Live-Inhalte:** Termine, Lehrgänge, Beiträge, Chöre, Bezirke und Personen stehen in der Datenbank.
- **Bestätigte Kennzahlen** (Wortlaut auf den Seiten, vom Nutzer als Inhalt bestätigt): annähernd 200 Posaunenchöre, über 2.000 aktive Bläserinnen und Bläser, über 140 Jahre Posaunenchorarbeit im Rheinland, 13 Bezirke, Förderverein seit 2008 (`src/app/ueber-uns/struktur/page.tsx`, `src/app/mitmachen/page.tsx`, `src/app/mitmachen/chor-finden/page.tsx`).
- **Fotos:** Lokal gibt es nicht genug echte Fotos für eine bildgeführte Gestaltung (Medienbibliothek der Dev-Umgebung plus Porträts in `public/images/`). Der Nutzer liefert Fotos nach, braucht dafür aber genaue Beschreibungen, was gewollt ist (Motiv, Ausschnitt, Format, Einsatzort).
- **Nicht vorhanden, darf nicht erfunden werden:** Testimonials, Wirkungsstatistiken und Zitate. `news-placeholder-*.jpg` und `profile-placeholder.jpg` sind Platzhalter, keine echten Fotos.

## Product Principles

1. **Chormitglieder zuerst.** Wer schon dabei ist, soll Termin, Lehrgang, Anmeldung oder Material ohne Umweg finden. Diese Aufgaben haben Vorrang vor Selbstdarstellung.
2. **Anmelden muss leicht sein.** Jeder Schritt vom Lehrgang zur bestätigten Anmeldung (samt Anzahlung und Rechnung) muss auch für ungeübte und ältere Menschen auf dem Handy klar und fehlertolerant sein.
3. **Die Tür für Neue offen halten.** Kinder, Eltern und Wiedereinsteiger:innen verstehen die Fachsprache des Verbands nicht automatisch. Einstiege erklären statt voraussetzen.
4. **Ehrenamt entlasten.** Jede Dashboard-Funktion soll Aufwand sparen und Fehler verhindern, denn die Pflegenden haben wenig Zeit und unterschiedliche technische Erfahrung.
5. **Eine Gemeinschaft, viele Bezirke.** Die Bezirke, Chöre und Menschen sollen sichtbar sein. Die Plattform verbindet, statt nur zu verwalten.

## Accessibility & Inclusion

- **Pflicht:** Barrierefreiheit nach WCAG bzw. BITV. Die genaue Konformitätsstufe ist nicht benannt. BITV 2.0 verweist über EN 301 549 auf WCAG 2.1 AA, das gilt deshalb bis zur Klärung als Mindestmaß.
- Die Nutzenden sind von Kindern bis zu Senior:innen sehr gemischt. Darum sind gut lesbare Schrift, ausreichende Kontraste in Hell- und Dunkelmodus, große Touch-Ziele und klare Fehlermeldungen wichtig.
- Die Spiele setzen auf Hören, Timing und Notenlesen. Sie brauchen Alternativen, wo das möglich ist (z. B. visuelles Metronom), und müssen reduzierte Bewegung respektieren.
Binary file added public/images/logo-icon-ink.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading