Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
191 commits
Select commit Hold shift + click to select a range
1302676
chore(deps): bump next from 16.3.3 to 16.3.4 in the nextjs group
dependabot[bot] Sep 14, 2026
f0c7469
chore(deps): bump the react group with 4 updates
dependabot[bot] Sep 14, 2026
83d26e5
chore(deps-dev): bump the dev-tools group with 3 updates
dependabot[bot] Sep 14, 2026
0608c12
chore(deps): bump zod from 4.4.3 to 4.6.2
dependabot[bot] Sep 14, 2026
4a7e260
chore(deps-dev): bump @types/node from 26.2.0 to 26.5.1
dependabot[bot] Sep 14, 2026
e422040
fix(anmeldungen): volle Preiskategorie auf die Warteliste, keine Über…
nichtLehdev Sep 15, 2026
a426bf3
fix(anmeldung): Warteliste ankündigen, wenn die Plätze nicht reichen
nichtLehdev Sep 15, 2026
c6c65a2
feat(anmeldungen): Anmeldung auf freie Plätze und Warteliste aufteilen
nichtLehdev Sep 15, 2026
8bc0a99
feat(anmeldung): im Formular wählen, wer die freien Plätze bekommt
nichtLehdev Sep 15, 2026
12efab9
feat(anmeldungen): aufgeteilte Anmeldungen verlinkt anzeigen
nichtLehdev Sep 15, 2026
996e882
feat(anmeldungen): Nachrück-Angebot, wenn freie Plätze nicht für alle…
nichtLehdev Sep 15, 2026
342e665
feat(cron): abgelaufene Nachrück-Angebote schließen, Kursteam erinnern
nichtLehdev Sep 15, 2026
e816726
feat(anmeldung): Nachrück-Angebot auf der Anmeldungsseite beantworten
nichtLehdev Sep 15, 2026
b65d685
fix(anmeldungen): beim Bestätigen von der Warteliste auch Preiskatego…
nichtLehdev Sep 15, 2026
3776471
feat(design): Programmheft-Grundlagen – Archivo, Tokens und Hilfsklassen
nichtLehdev Sep 15, 2026
ef689fa
feat(design): Navigation, Banner und Fußzeile im Programmheft-Stil
nichtLehdev Sep 15, 2026
9f99e07
feat(startseite): Startseite als Programmheft
nichtLehdev Sep 15, 2026
714ad1a
docs(design): Produktkontext und Designsystem „Programmheft“
nichtLehdev Sep 15, 2026
618c60d
feat(startseite): Schlussaufruf auf oranger Fläche
nichtLehdev Sep 15, 2026
0d731c9
refactor(programmheft): Bausteine der Startseite als öffentliche Prim…
nichtLehdev Sep 15, 2026
89e61eb
feat(programmheft): Seitenkopf, öffentliche Varianten und Personenzeilen
nichtLehdev Sep 15, 2026
e89e641
feat(mitmachen): Mitmachen als Programmheft-Referenzseite
nichtLehdev Sep 15, 2026
325f9d2
chore(programmheft): Altlasten aus der alten Startseite entfernen
nichtLehdev Sep 15, 2026
cbc46a4
fix(termine): Etiketten im Seitenkopf mit lesbaren Kurs- und Terminarten
nichtLehdev Sep 15, 2026
601d81c
fix(programmheft): Befunde der Abschlussprüfung und mehr Farbe für Mi…
nichtLehdev Sep 15, 2026
6263d5e
feat(mitmachen): Abschnittsköpfe wechseln die Seite, kein Fotofeld
nichtLehdev Sep 15, 2026
5e25c5c
docs(design): Innenseiten-Bausteine im Programmheft
nichtLehdev Sep 15, 2026
3d5e107
feat(mitmachen): Mitgliedschaft und Versicherung auf eigene Seite
nichtLehdev Sep 15, 2026
2ae2536
fix(foerderverein): Angaben aktualisieren
nichtLehdev Sep 15, 2026
8c336bd
feat(aktuelles): Aktuelles, Suche und Newsletter im Programmheft
nichtLehdev Sep 15, 2026
ecf3a52
feat(materialien): Materialien, Blechblatt, Literatur und Spiele im P…
nichtLehdev Sep 15, 2026
fba6c3d
feat(ueber-uns): Über uns, Vorstand, Posaunenrat und Auswahlchöre im …
nichtLehdev Sep 15, 2026
a527d93
feat(service): Kontakt, Rechtstexte und Servicestellen im Programmheft
nichtLehdev Sep 15, 2026
a931355
feat(chrome): Suchfenster, Teilen-Dialog und Glocke im Programmheft
nichtLehdev Sep 15, 2026
d989307
fix(newsletter): Knopf nicht vorab deaktivieren, Zusicherungen als Ra…
nichtLehdev Sep 15, 2026
409478e
feat(termine): Termine, Kursdetails und Anmeldung im Programmheft
nichtLehdev Sep 16, 2026
840ab7a
feat(mitmachen): Bildung, Jungbläser und Ehrenamt im Programmheft
nichtLehdev Sep 16, 2026
eac2801
fix(programmheft): Hinweis darf einen Abschnittskopf tragen
nichtLehdev Sep 16, 2026
ce8e4d2
feat(chor-finden): Chorsuche und Bezirke im Programmheft
nichtLehdev Sep 16, 2026
4622d01
fix(programmheft): Rückmeldungen aus dem ersten Durchgang
nichtLehdev Sep 16, 2026
a62c958
feat(foerderverein): Fördervereinsseite im Programmheft
nichtLehdev Sep 16, 2026
8bd754b
feat(vorstand): Vorstandsmitglieder wieder mit großen Porträts
nichtLehdev Sep 16, 2026
37cc300
feat(kontakt): Geschäftsstelle und Internet-Team nebeneinander
nichtLehdev Sep 16, 2026
9d6f646
feat(termine): Kolumnentitel in den klebenden Filterleisten
nichtLehdev Sep 16, 2026
e24dae4
feat(konto): Meine Anmeldungen und Einstellungen im Programmheft
nichtLehdev Sep 16, 2026
13fe2cb
fix(kontakt): Spalten auf gemeinsame Zeilen, zwei Darstellungsfehler …
nichtLehdev Sep 16, 2026
5cfdedb
feat(programmheft): Kolumnentitel auf allen öffentlichen Seiten
nichtLehdev Sep 16, 2026
d77ac99
fix(konto): Breite der Konto-Seiten und deutsche Preisformatierung
nichtLehdev Sep 16, 2026
db6f514
feat(konto): Anmeldungsdetails, Bearbeiten und 2FA im Programmheft
nichtLehdev Sep 16, 2026
7b8b0b4
feat(email): Gemeinsame Hülle im Programmheft und Nur-Text-Fassungen
nichtLehdev Sep 16, 2026
22f5a84
feat(email): Alle Vorlagen im Programmheft, jede Mail zusätzlich als …
nichtLehdev Sep 16, 2026
08b3ee7
fix(email): Trennlinien als Tabellenzellen statt als Rahmen
nichtLehdev Sep 16, 2026
fd0ccd5
fix(bezirke): Bezirk 1 und 2 auf der Bezirkskarte vertauscht
nichtLehdev Sep 16, 2026
17eba35
fix(programmheft): Kolumnentitel erschien nie, Titel der Filterleiste…
nichtLehdev Sep 16, 2026
01aa74c
feat(karte): Bezirksflaechen als Tonwert statt voller Saettigung
nichtLehdev Sep 16, 2026
84ea067
fix(anmeldungen): Erster Kurs stand ohne Abstand an der Trennlinie
nichtLehdev Sep 16, 2026
f18bec3
fix(posaunenwarte): Leere Kopfspalte neben der Liste der Regionalposa…
nichtLehdev Sep 16, 2026
47caed1
fix(posaunenwarte): Regionalposaunenwarte ab 64rem zweispaltig
nichtLehdev Sep 16, 2026
692c9d1
fix(einstellungen): Gleicher Abstand ueber der Leiste wie bei Meine A…
nichtLehdev Sep 16, 2026
288e838
fix(auswahlchoere): Bild in die Kopfspalte, erster Chor mit Abstand z…
nichtLehdev Sep 16, 2026
fe864a9
feat(programmheft): Mitlaufender Abschnittskopf fuer drei lange Absch…
nichtLehdev Sep 16, 2026
ed7eff3
feat(dashboard): Fundament im Programmheft — Huelle, Tabelle, Seitenl…
nichtLehdev Sep 16, 2026
72ea851
fix(anmeldungen): Statusfilter als Register statt Kaesten
nichtLehdev Sep 16, 2026
f2530bd
feat(ui): Geteilte Bausteine im Programmheft, Kontrastfehler behoben
nichtLehdev Sep 16, 2026
aef279b
feat(dashboard): Seitenschicht im Programmheft — Uebersicht, Listen, …
nichtLehdev Sep 16, 2026
0e2f1bf
feat(oeffentlich): Anmeldeseiten, Fehlerseiten und Ensemble-Detail im…
nichtLehdev Sep 16, 2026
9e01485
feat(dashboard): Medien, Downloads, Homepage und die vier Verwaltungs…
nichtLehdev Sep 16, 2026
4249a88
fix(ui): Restliche Grautoene im Auswahlfeld
nichtLehdev Sep 16, 2026
1588b72
feat(dashboard): Pflegeseiten fuer Vorstand, Team, Posaunenrat, Posau…
nichtLehdev Sep 16, 2026
ba9d90b
feat(dashboard): Termin- und Beitragsseiten im Programmheft
nichtLehdev Sep 16, 2026
01ac262
feat(dashboard): Kurs-Seiten im Programmheft
nichtLehdev Sep 17, 2026
98c698d
feat(dashboard): Bezirke, Ensembles, Auswahlchoere, Blaeserhefte, Ort…
nichtLehdev Sep 17, 2026
103c947
refactor(dashboard): Einheitliche Aktionsfarbe, Ladezeiger und Status…
nichtLehdev Sep 17, 2026
61bb27d
refactor(anmeldung-erfassen): Geteilte Huelle statt handgebautem Rahmen
nichtLehdev Sep 17, 2026
b865521
fix(a11y): Zugaengliche Namen, Sprunglinks und Klickziele
nichtLehdev Sep 17, 2026
57e6979
fix(inhalt): Tippfehler und widersprochener Geschwisterrabatt
nichtLehdev Sep 17, 2026
ab81f4f
fix(a11y): Bezirksfarben als Markierung statt als Schriftgrund
nichtLehdev Sep 17, 2026
b278fc5
fix(a11y): Artikelkoerper im Programmheft statt in Grau
nichtLehdev Sep 17, 2026
881c935
docs(bezirksfarben): getDistrictTextColor als untauglich kennzeichnen
nichtLehdev Sep 17, 2026
a2776ba
refactor(dashboard): Rohe Signalfarben ersetzt, Dunkelmodus-Luecken g…
nichtLehdev Sep 17, 2026
14b351c
fix(dashboard): Kopfzeile bricht um, statt den Titel zu zerquetschen
nichtLehdev Sep 17, 2026
24ae167
fix(kurse): Statuswahl wirkt, Rechnungen ueberleben das Loeschen
nichtLehdev Sep 17, 2026
f8b1253
fix(sicherheit): HTML-Filter wirkt wieder wie beabsichtigt
nichtLehdev Sep 17, 2026
dc60f0d
feat(artikel): Bildvokabular aus Breite und Ausrichtung
nichtLehdev Sep 17, 2026
030774d
feat(editor): Bilder mit einrastenden Ziehgriffen skalieren und ausri…
nichtLehdev Sep 17, 2026
b25fa78
feat(artikel): Titelbild in den Text integriert statt als Block darueber
nichtLehdev Sep 17, 2026
86a0f4e
refactor(editor): Schreibflaeche in Tinte, tote Grauklassen aus Tabellen
nichtLehdev Sep 17, 2026
4354dbd
refactor(editor): Keine Inline-Klassen mehr ins gespeicherte HTML
nichtLehdev Sep 17, 2026
53acca2
feat(editor): Bildausrichtung bedienbar machen
nichtLehdev Sep 17, 2026
3e7f066
refactor(design): Letzte Bausteine im alten Design, tote Dateien entf…
nichtLehdev Sep 17, 2026
29bded9
fix(design): Mitlaufende Koepfe kleben unter dem Kolumnentitel
nichtLehdev Sep 17, 2026
9309958
fix(foerderverein): Abstand zwischen Seitentitel und erstem Abschnitt
nichtLehdev Sep 17, 2026
6af1419
fix(auswahlchoere): Text und Termine auf einem Satzmass am Bild
nichtLehdev Sep 17, 2026
520baa4
fix(design): Rechte Spalte als ein grid-column-Wert
nichtLehdev Sep 17, 2026
3e5399d
fix(termine): Randspalte klebt unter der Navigation, nicht dahinter
nichtLehdev Sep 17, 2026
4c2445c
Merge pull request #314 from nichtLehdev/fix/waitlist-capacity-305
nichtLehdev Sep 17, 2026
706c62f
Merge pull request #316 from nichtLehdev/feat/split-registrations-305
nichtLehdev Sep 17, 2026
f0de4f6
Merge pull request #317 from nichtLehdev/feat/waitlist-offers-305
nichtLehdev Sep 17, 2026
cd7bc00
Merge branch 'release/1.0.0' into feat/programmheft-grundlagen
nichtLehdev Sep 17, 2026
8f2800e
feat(export): Einzelne Termine, Kurse und Beitraege exportieren
nichtLehdev Sep 17, 2026
8c64f63
refactor(anmeldungen): Neue Anmelde-Oberflaechen im Programmheft
nichtLehdev Sep 17, 2026
d202ab8
feat(bilder): Termin- und Kursbilder im Text, Lightbox fuer alle Bilder
nichtLehdev Sep 17, 2026
5b3250c
Merge pull request #319 from nichtLehdev/feat/programmheft-grundlagen
nichtLehdev Sep 17, 2026
636d101
Merge pull request #321 from nichtLehdev/feat/einzelexport-307
nichtLehdev Sep 17, 2026
ec7354b
Merge pull request #322 from nichtLehdev/feat/bilder-lightbox-320-310
nichtLehdev Sep 17, 2026
bec2d3d
feat(spiele): Fundament im Programmheft — Huelle, Schrittanzeige, Fok…
nichtLehdev Sep 17, 2026
3cefef4
feat(spiele): Noten-Lesen im Programmheft, Notenzeile nutzt den Platz
nichtLehdev Sep 17, 2026
8465786
feat(spiele): Rhythmus im Programmheft, Notenbild skaliert mit
nichtLehdev Sep 17, 2026
cd74871
feat(spiele): Notenwaage im Programmheft, Setup-Leere geschlossen
nichtLehdev Sep 17, 2026
bcd5710
fix(test): jest liest die Arbeitskopien unter .claude nicht mehr mit
nichtLehdev Sep 17, 2026
79da933
fix(spiele): Notation folgt den Programmheft-Tokens statt fester Werte
nichtLehdev Sep 17, 2026
54f99e1
feat(spiele): Griffe im Programmheft, Diagramme wachsen mit dem Fenster
nichtLehdev Sep 17, 2026
7be354c
fix(spiele): Notenlinien und Schluessel folgen dem Schema statt Schwarz
nichtLehdev Sep 17, 2026
c905b49
feat(beschreibungen): Rich Text fuer Termine und Kurse
nichtLehdev Sep 17, 2026
2da88e9
chore(beschreibungen): Skript gegen harte Zeilenumbrueche im Bestand
nichtLehdev Sep 17, 2026
77de153
feat(downloads): Bilder als Downloads, Vorschau am Termin
nichtLehdev Sep 17, 2026
3e964ad
Merge pull request #323 from nichtLehdev/feat/richtext-beschreibungen…
nichtLehdev Sep 17, 2026
42e170b
Merge pull request #324 from nichtLehdev/feat/bild-downloads-309
nichtLehdev Sep 17, 2026
c95a530
feat(downloads): Vorschau eines Bild-Downloads oeffnet die Lightbox
nichtLehdev Sep 17, 2026
d7fece3
Merge pull request #325 from nichtLehdev/chore/download-vorschau-ligh…
nichtLehdev Sep 17, 2026
ad31d73
fix(startseite): Kommende Termine in zwei Gruppen
nichtLehdev Sep 17, 2026
2eab058
Merge pull request #326 from nichtLehdev/fix/startseite-programm-gruppen
nichtLehdev Sep 17, 2026
7e1cfb2
fix(suche): Schreiblinie statt Fokuskasten im Suchfeld
nichtLehdev Sep 17, 2026
102586d
feat(termine): Hinweis auf weitere offene Anmeldungen, Filter dafuer
nichtLehdev Sep 17, 2026
9015b25
Merge pull request #327 from nichtLehdev/fix/suchfenster-fokuslinie
nichtLehdev Sep 17, 2026
a77179a
fix(anmeldungen): Keine Rabattmarke an stornierten Anmeldungen
nichtLehdev Sep 17, 2026
fc70a65
fix(import): Anfragen bis 100 MB statt 10 MB
nichtLehdev Sep 17, 2026
dd999e5
Merge pull request #328 from nichtLehdev/fix/anmeldungen-rabattmarke
nichtLehdev Sep 17, 2026
7d8da2d
Merge pull request #329 from nichtLehdev/fix/import-groesse
nichtLehdev Sep 17, 2026
fbc2402
fix(startseite): Hinweis auf offene Anmeldungen oeffnet die Liste
nichtLehdev Sep 17, 2026
7948346
Merge pull request #330 from nichtLehdev/fix/hinweis-listenansicht
nichtLehdev Sep 17, 2026
d928ea2
fix(termine): Sammelbegriff Angebote, Kategoriefilter entfernt
nichtLehdev Sep 17, 2026
19549f5
Merge pull request #331 from nichtLehdev/fix/wortwahl-angebote
nichtLehdev Sep 17, 2026
90329f4
fix(termine): Filterbereich neu geordnet
nichtLehdev Sep 17, 2026
1e002eb
Merge pull request #332 from nichtLehdev/fix/filterbereich-layout
nichtLehdev Sep 17, 2026
d85feb7
Merge pull request #300 from nichtLehdev/dependabot/npm_and_yarn/next…
nichtLehdev Sep 17, 2026
73844fa
Merge remote-tracking branch 'origin/release/1.0.0' into tmp-301
nichtLehdev Sep 17, 2026
5a2df53
Merge remote-tracking branch 'origin/release/1.0.0' into tmp-302
nichtLehdev Sep 17, 2026
048ef80
Merge remote-tracking branch 'origin/release/1.0.0' into tmp-303
nichtLehdev Sep 17, 2026
ea709e5
Merge remote-tracking branch 'origin/release/1.0.0' into tmp-304
nichtLehdev Sep 17, 2026
1a03605
Merge pull request #301 from nichtLehdev/dependabot/npm_and_yarn/reac…
nichtLehdev Sep 17, 2026
f20c560
Merge remote-tracking branch 'origin/release/1.0.0' into tmp-302
nichtLehdev Sep 17, 2026
c269189
Merge pull request #302 from nichtLehdev/dependabot/npm_and_yarn/dev-…
nichtLehdev Sep 17, 2026
87113b2
Merge remote-tracking branch 'origin/release/1.0.0' into tmp-303
nichtLehdev Sep 17, 2026
1802b39
Merge pull request #303 from nichtLehdev/dependabot/npm_and_yarn/zod-…
nichtLehdev Sep 17, 2026
702c351
Merge remote-tracking branch 'origin/release/1.0.0' into tmp-304
nichtLehdev Sep 17, 2026
a32d423
Merge pull request #304 from nichtLehdev/dependabot/npm_and_yarn/type…
nichtLehdev Sep 17, 2026
d527f23
fix(export): Preisoptionen und die uebrigen Felder wandern mit
nichtLehdev Sep 17, 2026
0157d1f
Merge pull request #333 from nichtLehdev/feat/export-import-treue
nichtLehdev Sep 17, 2026
8132734
fix(import): Beitraege behalten Slug, Verfasserin und Bildausschnitt
nichtLehdev Sep 17, 2026
b210fb3
Merge pull request #334 from nichtLehdev/fix/beitrags-import
nichtLehdev Sep 17, 2026
d4dd2ef
fix(kalender): Ausgewaehlter Tag im Nachtdruck lesbar
nichtLehdev Sep 17, 2026
495ccb9
Merge pull request #335 from nichtLehdev/fix/kalender-auswahl-nacht
nichtLehdev Sep 17, 2026
74a0817
fix(anmeldung): Aufteilung wirkt auch im oeffentlichen Formular
nichtLehdev Sep 18, 2026
f0f8ee2
Merge pull request #337 from nichtLehdev/fix/anmeldung-aufteilen-oeff…
nichtLehdev Sep 18, 2026
96014db
fix(anmeldungen): Bearbeiten laesst die Warteliste nachruecken
nichtLehdev Sep 18, 2026
fc22703
Merge pull request #338 from nichtLehdev/fix/nachruecken-nach-bearbeiten
nichtLehdev Sep 18, 2026
db315c5
revert: Bearbeiten laesst die Warteliste wieder nicht automatisch nac…
nichtLehdev Sep 18, 2026
b1e0a81
Merge pull request #339 from nichtLehdev/revert/nachruecken-nach-bear…
nichtLehdev Sep 18, 2026
abeb617
feat(warteliste): Nachruecken nur noch von Hand, Wartende haben Vorrang
nichtLehdev Sep 18, 2026
876710c
chore: Von next dev erzeugte Agent-Dateien wieder entfernen
nichtLehdev Sep 18, 2026
c98fe3f
Merge pull request #340 from nichtLehdev/fix/agent-dateien-entfernen
nichtLehdev Sep 18, 2026
a3edcb0
Merge pull request #341 from nichtLehdev/feat/nachruecken-von-hand
nichtLehdev Sep 18, 2026
5433add
fix(anmeldung): Anmeldeformular barrierefrei
nichtLehdev Sep 18, 2026
aea3eb4
Merge pull request #342 from nichtLehdev/fix/anmeldeformular-barriere…
nichtLehdev Sep 18, 2026
689d8cc
fix(anmeldung): Zahlungs-Knoepfe in Safari, Vorbelegung freier Kategorie
nichtLehdev Sep 18, 2026
1dd9844
Merge pull request #343 from nichtLehdev/fix/anmeldung-radios-vorbele…
nichtLehdev Sep 18, 2026
fa8a2c0
fix(foerderverein): Ohne 'Mitglied seit', Auswahlfelder so hoch wie E…
nichtLehdev Sep 18, 2026
ed979c4
Merge pull request #344 from nichtLehdev/fix/foerderverein-formular
nichtLehdev Sep 18, 2026
bffd265
fix(ehrenamt): Erfundenes Zitat entfernt
nichtLehdev Sep 18, 2026
fc2b474
Merge pull request #345 from nichtLehdev/fix/ehrenamt-zitat
nichtLehdev Sep 18, 2026
060c5b7
Merge branch 'release/1.0.0' into feat/spiele-in-release
nichtLehdev Sep 18, 2026
5617164
Merge pull request #346 from nichtLehdev/feat/spiele-in-release
nichtLehdev Sep 18, 2026
0ea4aed
feat(spiele): Notensatz-Bibliothek und -Editor im Programmheft
nichtLehdev Sep 18, 2026
9d4a78f
fix(sicherheit): Klartext-Helfer laesst garantiert keine Tags stehen
nichtLehdev Sep 18, 2026
2d3ede6
Merge pull request #347 from nichtLehdev/fix/klartext-codeql
nichtLehdev Sep 18, 2026
4f64a47
fix(spiele): Kein <p> mehr innerhalb von <button>
nichtLehdev Sep 18, 2026
7dd80e1
Merge remote-tracking branch 'origin/release/1.0.0' into feat/spiele-…
nichtLehdev Sep 18, 2026
a6fc6bc
Merge pull request #348 from nichtLehdev/feat/spiele-ueberarbeitung
nichtLehdev Sep 18, 2026
bc80cd6
chore(deploy): Umbrueche in Beschreibungen beim Start glaetten
nichtLehdev Sep 18, 2026
5ca4ca0
Merge pull request #349 from nichtLehdev/feat/umbrueche-beim-start
nichtLehdev Sep 18, 2026
b7ed3c2
fix(wartung): Voraussichtliches Ende in deutscher Ortszeit
nichtLehdev Sep 18, 2026
46e5a31
Merge pull request #350 from nichtLehdev/fix/wartung-zeitzone
nichtLehdev Sep 18, 2026
2d63035
fix(zeit): Alle Datums- und Zeitangaben in deutscher Ortszeit
nichtLehdev Sep 18, 2026
0e5dd2e
Merge pull request #351 from nichtLehdev/fix/deutsche-ortszeit
nichtLehdev Sep 18, 2026
ff00296
fix: Anmeldefrist und Rechnungsjahr in deutscher Zeit
nichtLehdev Sep 18, 2026
0bb2676
Merge pull request #352 from nichtLehdev/fix/frist-und-rechnungsjahr
nichtLehdev Sep 18, 2026
21e9456
chore: Kommentare kürzen und überflüssige entfernen
nichtLehdev Sep 18, 2026
94a6dd7
Merge pull request #353 from nichtLehdev/chore/kommentare-kuerzen
nichtLehdev Sep 18, 2026
e6f6129
fix: Warteliste-Mails im neuen Design, sachliche Texte im Team-Kasten
nichtLehdev Sep 18, 2026
75ac7f3
Merge pull request #355 from nichtLehdev/fix/warteliste-mails-und-panel
nichtLehdev Sep 18, 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
  •  
  •  
  •  
19 changes: 2 additions & 17 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
version: 2
updates:
# Enable version updates for npm (works with pnpm too)
# "npm" also covers pnpm.
- package-ecosystem: "npm"
directory: "/"
schedule:
Expand All @@ -12,38 +12,30 @@ updates:
labels:
- "dependencies"
- "automated"
# Group updates to reduce PR noise
groups:
# Group all Next.js related packages together
nextjs:
patterns:
- "next"
- "eslint-config-next"
# Group all Prisma packages together
prisma:
patterns:
- "@prisma/*"
- "prisma"
# Group all tRPC packages together
trpc:
patterns:
- "@trpc/*"
# Group all React Query packages together
react-query:
patterns:
- "@tanstack/react-query*"
# Group all TipTap editor packages together
tiptap:
patterns:
- "@tiptap/*"
# Group React core packages
react:
patterns:
- "react"
- "react-dom"
- "@types/react"
- "@types/react-dom"
# Group TypeScript and ESLint tooling
dev-tools:
patterns:
- "typescript"
Expand All @@ -52,24 +44,18 @@ updates:
- "typescript-eslint"
- "prettier"
- "prettier-plugin-*"
# Group Tailwind packages
tailwind:
patterns:
- "tailwindcss"
- "@tailwindcss/*"
# Ignore specific updates if needed
ignore:
- dependency-name: "next"
update-types: ["version-update:semver-major"]
# typescript-eslint hard-throws on any TS >= 7 (unconditional version guard,
# no flag or env var to opt out), so a TS 7 bump breaks `pnpm lint` entirely.
# Upstream is targeting TS >= 7.1 and skipping 7.0:
# typescript-eslint throws on TS >= 7 and breaks `pnpm lint`; drop once it supports TS 7.1:
# https://github.com/typescript-eslint/typescript-eslint/issues/10940
# Drop this entry once typescript-eslint ships TS 7.1 support.
- dependency-name: "typescript"
update-types: ["version-update:semver-major"]

# Enable version updates for GitHub Actions
- package-ecosystem: "github-actions"
directory: "/"
schedule:
Expand All @@ -83,7 +69,6 @@ updates:
- "github-actions"
- "automated"

# Enable version updates for Docker
- package-ecosystem: "docker"
directory: "/"
schedule:
Expand Down
3 changes: 0 additions & 3 deletions .github/workflows/build-verification.yml
Original file line number Diff line number Diff line change
Expand Up @@ -85,9 +85,6 @@ jobs:
SKIP_ENV_VALIDATION: 1
NODE_ENV: production
NEXT_TELEMETRY_DISABLED: 1
# Add other non-secret env vars needed for build
# BETTER_AUTH_SECRET: dummy-secret-for-build
# BETTER_AUTH_URL: http://localhost:3000

- name: Check build output
run: |
Expand Down
26 changes: 8 additions & 18 deletions .github/workflows/database-validation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,7 @@ jobs:
with:
node-version: "22"

# Ohne `version` liest die Action das `packageManager`-Feld aus
# package.json — dieselbe Quelle, die auch pnpm selbst verwendet.
# Ohne `version` liest die Action `packageManager` aus package.json.
- name: Setup pnpm
uses: pnpm/action-setup@v6

Expand Down Expand Up @@ -61,11 +60,8 @@ jobs:
env:
DATABASE_URL: postgresql://dummy:dummy@localhost:5432/dummy

# `prisma validate` prüft nur, ob das Schema in sich stimmig ist. Es sagt
# nichts darüber, ob die Migrationen auf einer leeren Datenbank überhaupt
# durchlaufen — und genau das passiert beim Deploy auf mittwald. Schlägt es
# dort fehl, startet die App nicht (30 Versuche, dann Abbruch). Dieser Job
# zieht den Fehlschlag in die PR vor.
# `prisma validate` prüft nicht, ob die Migrationen auf leerer Datenbank laufen;
# scheitern sie beim Deploy auf mittwald, startet die App nicht.
migrate-deploy:
name: Migrations & Drift
runs-on: ubuntu-latest
Expand Down Expand Up @@ -118,33 +114,27 @@ jobs:
- name: Install dependencies
run: pnpm install --frozen-lockfile

# Der eigentliche Test: alle Migrationen auf einer jungfräulichen
# Datenbank, so wie beim ersten Start auf einem neuen Server.
# Alle Migrationen auf leerer Datenbank, wie beim ersten Start auf neuem Server.
- name: Apply all migrations from scratch
run: pnpm prisma migrate deploy

# Fängt den Fall ab, dass jemand schema.prisma ändert und die passende
# Migration vergisst: die Datenbank läuft dann auseinander mit dem
# Client, den `prisma generate` erzeugt. --exit-code liefert 2, wenn ein
# Unterschied bleibt.
# Fängt eine vergessene Migration zu einer schema.prisma-Änderung ab;
# --exit-code liefert 2 bei Unterschied.
- name: Check for schema drift
run: >-
pnpm prisma migrate diff
--from-config-datasource
--to-schema prisma/schema.prisma
--exit-code

# Beide Skripte laufen bei jedem Produktions-Deploy automatisch und sind
# dort bewusst "non-fatal" — ein Fehler würde also still durchgehen.
# Hier dürfen sie scheitern.
# Beim Deploy sind beide Skripte "non-fatal"; hier sollen Fehler auffallen.
- name: Run post-migration setup
run: pnpm tsx prisma/post-migration-setup.ts

- name: Run slug backfill
run: pnpm tsx prisma/backfill-slugs.ts

# Wiederholbarkeit ist die Eigenschaft, auf die sich die Deploy-Skripte
# verlassen: Sie laufen bei *jedem* Start, nicht nur beim ersten.
# Die Deploy-Skripte laufen bei *jedem* Start, müssen also wiederholbar sein.
- name: Re-run setup and backfill (idempotency)
run: |
pnpm tsx prisma/post-migration-setup.ts
Expand Down
55 changes: 7 additions & 48 deletions .github/workflows/release-deploy.yml
Original file line number Diff line number Diff line change
@@ -1,27 +1,12 @@
# =============================================================================
# Release & Deploy Workflow
# =============================================================================
# Triggers on every published release, INCLUDING pre-releases.
#
# build-and-push: builds Docker images and pushes them to GHCR with
# semver tags; "latest" is only applied to full releases
# deploy-next: old server (pwr.lehdev.de) via SSH — receives every
# release AND every pre-release (bleeding edge)
# deploy-production: mittwald container stack via deploy-container-action —
# full releases only
#
# GitHub environments used: "next" (old server SSH secrets) and
# "production" (mittwald API token, stack id, app secrets — see deploy/stack.yaml
# for the full list of values the stack file expects).
# =============================================================================
# Runs on every release incl. pre-releases: the old server (env "next") gets all of them,
# mittwald (env "production", values see deploy/stack.yaml) only full releases.

name: Release & Deploy

on:
release:
types: [published]

# Prevent concurrent deployments
concurrency:
group: release-deploy
cancel-in-progress: false
Expand All @@ -34,9 +19,6 @@ env:
CRON_IMAGE_NAME: nichtlehdev/pwr-cron

jobs:
# ===========================================================================
# Build and Push Docker Images (all releases, including pre-releases)
# ===========================================================================
build-and-push:
name: Build & Push Docker Image
runs-on: ubuntu-latest
Expand All @@ -46,8 +28,7 @@ jobs:
packages: write

outputs:
# Clean semver version without leading "v" (e.g. 1.4.2 or 1.5.0-rc.1);
# used by the deploy jobs to pin the exact image tag.
# Semver without leading "v" (e.g. 1.5.0-rc.1); pins the image tag for the deploys.
version: ${{ steps.meta.outputs.version }}
image-tag: ${{ steps.meta.outputs.tags }}
image-digest: ${{ steps.build.outputs.digest }}
Expand Down Expand Up @@ -136,9 +117,6 @@ jobs:
cache-from: type=gha
cache-to: type=gha,mode=max

# ===========================================================================
# Deploy to Old Server (every release and pre-release)
# ===========================================================================
deploy-next:
name: Deploy to Old Server (next)
runs-on: ubuntu-latest
Expand Down Expand Up @@ -173,34 +151,22 @@ jobs:
port: ${{ secrets.SERVER_PORT }}
envs: CR_PAT
script: |
# Navigate to project directory
cd ${{ secrets.SERVER_PROJECT_PATH }}

# Pin the exact release version for docker compose interpolation
# (pre-releases are never tagged "latest")
# Pre-releases are never tagged "latest", so pin the exact version.
export APP_IMAGE_TAG=${{ needs.build-and-push.outputs.version }}

# Login to GitHub Container Registry
echo "${{ secrets.CR_PAT }}" | docker login ghcr.io -u nichtlehdev --password-stdin

# Pull the release images
docker pull ghcr.io/nichtlehdev/pwr-web:$APP_IMAGE_TAG
docker pull ghcr.io/nichtlehdev/pwr-backup:$APP_IMAGE_TAG
docker pull ghcr.io/nichtlehdev/pwr-cron:$APP_IMAGE_TAG

# Update the running containers
docker compose -f docker-compose.prod.yml pull
docker compose -f docker-compose.prod.yml up -d

# Cleanup old images.
#
# This server receives every pre-release, so each deploy leaves
# three more tagged images behind — that, not dangling layers, is
# what fills the disk. Only our own repositories are touched, and
# only tags other than the one just deployed (plus "latest", which
# a manual `docker compose up` without APP_IMAGE_TAG falls back
# to). Images belonging to anything else on this server are left
# alone, which `docker image prune -af` would not do.
# Every pre-release leaves three tagged images behind. Remove only our own old tags
# ("latest" stays as fallback without APP_IMAGE_TAG); `prune -af` would hit other images.
echo "Disk before cleanup:"
docker system df --format 'table {{.Type}}\t{{.Size}}\t{{.Reclaimable}}' || true

Expand All @@ -213,8 +179,6 @@ jobs:
| xargs -r docker rmi 2>/dev/null || true
done

# Dangling layers left over from the above, plus stopped
# containers' writable layers.
docker image prune -f

echo "Disk after cleanup:"
Expand All @@ -233,7 +197,6 @@ jobs:
# Wait for container to be healthy
sleep 10

# Check if containers are running
if docker ps | grep -q posaunenwerk-app; then
echo "✅ App container is running"
else
Expand All @@ -258,9 +221,6 @@ jobs:
exit 1
fi

# ===========================================================================
# Deploy to mittwald (full releases only)
# ===========================================================================
deploy-production:
name: Deploy to mittwald (production)
runs-on: ubuntu-latest
Expand All @@ -279,8 +239,7 @@ jobs:
- name: Deploy stack to mittwald
uses: mittwald/deploy-container-action@v1
env:
# Every {{ .Env.* }} placeholder in deploy/stack.yaml must be
# defined here (see the stack file header for the full list).
# Every {{ .Env.* }} placeholder in deploy/stack.yaml must be defined here.
RELEASE_VERSION: ${{ needs.build-and-push.outputs.version }}
POSTGRES_PASSWORD: ${{ secrets.POSTGRES_PASSWORD }}
APP_URL: ${{ vars.APP_URL }}
Expand Down
Loading
Loading