Add files via upload

This commit is contained in:
Serverlele30 authored and GitHub committed 2026-09-01 13:12:08 +02:00
1 parent 7020ad99fc
commit 9c3e2af209
5 files changed
+806 -229

No files matched your search

+267
View File
@@ -0,0 +1,267 @@
# Changelog – ÖPNV Navi
Alle Änderungen aus den letzten Entwicklungs-Runden, chronologisch. Format
angelehnt an [Keep a Changelog](https://keepachangelog.com/de/).
## Fahrtalarm, Störungs-Push & Live-Karte (Grundlagen)
### Fixed
- **Live-Karte**: Fahrzeuginfo im Isolations-Modus aktualisierte sich nach
dem ersten Klick nie wieder (Marker wurde bei jedem Poll komplett neu
erzeugt statt aktualisiert, wodurch ein offenes Popup sofort wieder
schloss). Gleicher Fix auch für den Trip-Tracking-Modus.
### Added
- **Störungs-Push für Favoriten**: Favoriten-Karten zeigen jetzt Störungen an,
pollen im Hintergrund alle 30s, Toast + optionale Browser-Notification bei
neuen Störungen.
- **Fahrtalarm**: weckt X Stationen vor einer gewählten Zielhaltestelle
(Ton, Vibration, Vollbild-Overlay, persistenter Hinweis-Banner). Setzbar
direkt im Fahrt-Detail-Modal an jeder kommenden Haltestelle.
## Layout & Übersichtlichkeit
### Changed
- **Live-Karte**: nutzt jetzt auf jeder Displaygröße die volle Breite
("Full-Bleed"-Technik, mobile-first, ohne breakpoint-spezifische Werte).
- **Favoriten**: aus dem Abfahrten-Home-Screen entfernt (Desktop wie Mobile
wurden unübersichtlich), jetzt eigenes Tab-Panel – erreichbar über "Mehr"
und einen Icon-Button im Header.
### Added
- **Störungen unterhalb der Abfahrten**: `/departures` und `/db/departures`
liefern jetzt zusätzlich `disruptions[]`, im Frontend direkt unter der
Abfahrtstafel sichtbar.
### Fixed
- Störungstexte mit eingebetteten Links (z. B. `[MEHR/MORE]` von VBB) wurden
komplett als Text escaped statt den Link klickbar zu lassen. Jetzt werden
gezielt nur `<a href="http(s)://...">`-Muster als sichere Links erlaubt,
alles andere bleibt escaped.
## Verlauf, Gleiswechsel, Umstiegszeit, Barrierefreiheit, Teilen, Sprache, Statistik
### Added
- **Verlauf**: zuletzt gesuchte Haltestellen erscheinen jetzt direkt als
Vorschläge beim Antippen des leeren Suchfelds; einzelne Einträge einzeln
entfernbar.
- **Gleiswechsel-Hinweis**: Abfahrtstafel hebt geänderte Gleise deutlich
hervor ("GLEIS 3 statt 5") statt den neuen Wert kommentarlos anzuzeigen.
- **Umstiegszeit-Puffer**: konfigurierbare Mindest-Umstiegszeit für die
OTP2-Routenplanung (Standard/0/3/5/10/15 Min).
- **Barrierefreiheit**: Toggle "Nur rollstuhlgerechte Verbindungen" im
Routenplaner (OTP2-Wheelchair-Preference); Aufzugsstatus wird getrennt von
echten Störungen angezeigt (eigener, ruhigerer Ton).
- **Route teilen**: Link zu einer Suche (nicht einer eingefrorenen
Verbindung) über die Web-Share-API oder Zwischenablage.
- **Mehrsprachigkeit**: Deutsch/Englisch, automatische Spracherkennung,
Umschalter unter "Mehr".
- **Verspätungsstatistik pro Linie**: passiv gesammelt aus ganz normalen
Abfahrten-Abfragen (keine zusätzliche Last auf HAFAS/IRIS), sichtbar im
Fahrt-Detail-Modal ab 10 gesammelten Datenpunkten.
### Fixed
- Gleisänderungs-Störungsmeldungen von HAFAS waren teils inhaltsleer
("Gleisänderung" ohne weitere Angaben). Werden jetzt durch eine aus den
echten Ist-Daten gebaute, präzise Meldung ersetzt (Linie, Ziel, Uhrzeit,
altes/neues Gleis).
- Mobile Bottom-Navigation wurde von der (jetzt display-breiten) Live-Karte
überdeckt (z-index-Konflikt mit Leaflets eigenen Steuerelementen) – behoben.
- Fahrtalarm-Banner konnte sich mit dem Header überlappen (unterschiedliche
Header-Höhen auf Mobile/Desktop) – Position wird jetzt zur Laufzeit anhand
der tatsächlichen Header-Höhe berechnet, nicht mehr geraten.
## Push-Benachrichtigungen & Hintergrundaktualisierung
### Added
- **Web-Push**: funktioniert jetzt auch bei geschlossenem Tab/Browser.
Neuer Service Worker, VAPID-basierte Subscriptions, serverseitige
Hintergrund-Jobs (Störungs-Check alle 60s, Fahrtalarm-Check alle 20s).
Favoriten bleiben primär im `localStorage`; bei aktiviertem Push wird eine
Kopie ans Backend gespiegelt, damit der Server weiß, wonach er schauen soll.
- Neue Backend-Tabellen `push_subscriptions`, `push_favorite_stations`,
`push_trip_alarms`; neue Route `/webpush/*`.
## Barrierefreiheit (gründlicher Durchgang)
### Fixed
- **Suchergebnisse waren nur mit der Maus bedienbar** – größter gefundener
Bug: Tastatur-/Screenreader-Nutzer konnten keine Haltestelle auswählen.
Jetzt per Pfeiltasten/Enter/Escape bedienbar (Hauptsuche + beide
Routenplaner-Felder).
- Abfahrtstafel-Flip-Animation zeigte Screenreadern Zeichensalat während des
Umklappens – jetzt unsichtbare, sofort korrekt lesbare Textalternative.
- Kaputte `role="table"` (ohne Zeilen-/Zellen-Rollen) durch korrektes
`role="list"` ersetzt.
- `aria-pressed` wurde bei "Jetzt/Abfahrt um/Ankunft um" und dem
Sprachumschalter nie aktualisiert (nur die Optik änderte sich) – behoben.
- Fahrtalarm-Banner war keine Live-Region – Änderungen wurden nicht
automatisch vorgelesen.
- Glocken-Buttons im Fahrt-Detail-Modal hatten nur ein `title`-Attribut als
Label (funktioniert auf Touch nicht, uneinheitlich bei Screenreadern) –
jetzt echtes `aria-label`.
### Added
- Skip-Link ("Zum Inhalt springen").
- Echte ARIA-Tab-Semantik (`tablist`/`tab`/`tabpanel`, `aria-selected`,
Pfeiltasten-Navigation) für Desktop- und Mobile-Navigation.
- Fokus-Falle + Fokus-Rückgabe für Fahrt-Detail-Modal und Fahrtalarm-Overlay.
- Formular-Labels für Start/Ziel-Felder im Routenplaner.
- `aria-live`-Regionen für Störungen, Aufzugsstatus, Routenergebnisse.
- Dekorative Emojis systematisch mit `aria-hidden` versehen.
- Farbkontrast geprüft (gedämpfter Text: 5.8–6.6:1, deutlich über WCAG-AA-Minimum).
## Allgemeine Verbesserungen
### Fixed
- "In der Nähe"-Vorschau blieb nach Auswahl einer Haltestelle über der
Abfahrtstafel stehen.
- Beim Wechsel zwischen Haltestellen waren kurz noch die Abfahrten der
vorherigen Station sichtbar (Stale-Data-Flash) – jetzt sofortiger
Ladezustand mit Spinner.
- Wettlauf-Bedingung bei schnellem Tippen in der Suche: eine ältere, aber
langsamer beantwortete Anfrage konnte neuere Ergebnisse überschreiben.
### Added
- "Erneut versuchen"-Buttons bei Netzwerkfehlern (Abfahrtstafel, Routenplaner).
- Browser-Tab-Titel zeigt die gewählte Haltestelle.
- Toast-Bestätigung beim Favorisieren/Entfavorisieren; neue "Erfolg"-Toast-Variante.
- "Störungsbenachrichtigungen aktivieren" ist jetzt eine eigenständige,
farblich zustandsabhängige Karte statt eines unauffälligen Text-Links.
## Visuelles Redesign
### Changed
- Zentrale Design-Tokens für Schatten (`--shadow-sm/md/lg`), Radien und
Glow-Effekte eingeführt statt verstreuter Einzelwerte.
- Hintergrund: mehrschichtige Glow-Gradients, feines Scanline-Muster,
dezente Film-Korn-Textur (SVG-Turbulenz) für einen analogeren statt
sterilen Look.
- Header: Blur/Transparenz-Effekt (Frosted Glass) statt Vollton.
- Abfahrtstafel-Zeilen: farbiger Rand links in der jeweiligen Linienfarbe,
Verlaufs-Hintergrund, Tiefen-Schatten; Split-Flap-Zeichen haben jetzt eine
sichtbare Naht in der Mitte (wie eine echte mechanische Klapp-Anzeige).
- Linienbadges strahlen in ihrer eigenen Farbe (Neon-Effekt), Uhrzeit mit
grünem LED-Glühen.
- Logo und aktiver Tab pulsieren dezent in Amber; LIVE-Statuspunkt mit
echtem Leucht-Ring-Puls.
- Karten (Favoriten, "Mehr"-Kacheln, Aktionen) heben sich beim Hover an
(Schatten + Lift statt nur Farbwechsel), gestaffelte Eintritts-Animation
beim (Neu-)Aufbau von Listen.
- Button-Übergänge mit leichter Feder/Überschwung-Kurve statt linear.
- Alle neuen Animationen respektieren `prefers-reduced-motion` (bereits
global vorhandene Regel greift automatisch).
---
*Nicht umgesetzt / bewusst zurückgestellt:* GTFS-RT-Live-Anbindung für
Fahrzeugpositionen/Störungsmeldungen sowie GTFS-`routes.txt` als
autoritative Quelle für Linienfarben (aktuell: `vbb-line-colors`-Paket +
Fallback-Heuristik nach Verkehrsmittel).
## Repo-Aufräumung (Server-seitig)
Auf dem Produktivserver hatten sich zwei parallele Code-Bäume angesammelt:
eine alte, seit Ende August unangetastete Root-Ebene (`routes/`, `utils/`,
`db/`, `middleware/`, `server.js` direkt im Projektordner) und der tatsächlich
laufende, aktuelle Code unter `src/` (per `package.json` als Einstiegspunkt
konfiguriert). Zusätzlich gab es doppelte `fares.js`-Dateien und eine
verwaiste Editor-Backup-Datei (`disruptionFilter.js+`).
### Changed
- Aktueller Code aus `src/` eine Ebene hoch ins Projekt-Root verschoben,
`src/` entfernt – keine verschachtelte Struktur mehr.
- Datenordner von `data/` zu `db-data/` umbenannt (eindeutiger Name, da
`db/` bereits für Code – `database.js` – reserviert ist), `DB_PATH` in
`.env` entsprechend angepasst.
- `package.json` (`main`/`start`/`dev`) und der echte systemd-Service
(`ExecStart`) zeigen jetzt auf `server.js` statt `src/server.js`.
- `.env.example` und `oepnv-navi-backend.service.example` aktualisiert
(fehlende `OTP_BASE_URL`/`VAPID_*`-Platzhalter ergänzt, `DB_PATH`
korrigiert, `ExecStart`-Pfad korrigiert).
- **Auslieferungsstruktur ab jetzt**: neue Code-Übergaben verwenden dieselbe
flache Struktur (kein `src/`-Präfix mehr), um erneute Divergenz zwischen
gelieferten und tatsächlich laufenden Dateien zu vermeiden.
### Removed
- Toter Root-Ebene-Code (`routes/`, `utils/`, `db/`, `middleware/`,
`server.js` von vor der gemeinsamen Entwicklung), doppelte `fares.js` im
alten `data/`-Ordner, verwaister `src/data/data/`-Unterordner,
`.env.old`, `disruptionFilter.js+` (veraltete Editor-Backup-Datei ohne die
Gleisänderungs-Anreicherung).
## Backend-Härtung & letzte Politur
### Added
- **Sauberes Herunterfahren** (`SIGTERM`/`SIGINT`): schließt den HTTP-Server
und die SQLite-Verbindung geordnet, statt bei jedem Neustart/Deploy hart
abgewürgt zu werden (relevant v. a. bei systemd-Neustarts). Erzwingt nach
10s Timeout einen harten Abbruch, falls hängende Requests das saubere
Beenden blockieren.
- Größenlimit für JSON-Request-Bodies (200kb) als einfacher Missbrauchsschutz.
### Changed
- Verkehrsmittel-Filter-Chips (S/U/Tram/Bus/…) haben jetzt ausgeschriebene
`aria-label` ("S-Bahn", "Regionalverkehr (RE/RB)" usw.) statt nur der
kryptischen Kurz-Beschriftung für Screenreader-Nutzer.
## Visuelles Feintuning nach Nutzer-Feedback
### Changed
- Die Redesign-Effekte aus der "übertreiben"-Runde (Scanlines, Film-Korn-
Textur, dauerhaft pulsierendes Logo/LIVE-Punkt, wandernder Lichtschein auf
der Willkommens-Karte, Neon-Überglühen der Linienbadges, LED-Leuchten der
Uhrzeit, federnde Button-Übergänge) auf Wunsch wieder zurückgenommen -
zurück zu einem ruhigeren, professionelleren Look. Struktur-Substanz
(Schatten-Skala, Glass-Header, Karten-Hover, farbiger Linien-Rand pro
Abfahrtszeile) blieb erhalten.
- Naht-Linie in der Mitte jedes Split-Flap-Zeichens (rein kosmetisches Detail
aus derselben Runde) auf Wunsch wieder entfernt.
- Toast-Benachrichtigungen überarbeitet: Icon-Kreis pro Typ (✓/⚠/ℹ),
Schließen-Button, dezente Fortschrittsleiste synchron zur Anzeigedauer.
- Dieselbe Icon-Kreis-Formsprache auf Störungen, Aufzugsstatus und beide
Störungslisten ("In deiner Nähe", netzweit) übertragen - einheitliche
`.notice-item`-Struktur statt vier verschiedener Ad-hoc-Layouts.
### Fixed
- **Lange Zugbezeichnungen** (z.B. "ICE 940") sprengten ihre feste
Spaltenbreite und liefen optisch in die Ziel-Spalte über. Erst testweise
auf variable Spaltenbreite umgestellt, dann auf Nutzerwunsch wieder auf
feste Breite zurückgesetzt (Trennlinien sollen über alle Zeilen fluchten) -
stattdessen läuft der Text jetzt bei Bedarf automatisch wie ein Ticker
durch seine Box (kein manuelles Scrollen nötig), inkl. mehrerer
Nachbesserungen: falsche Lauflänge durch nicht mitgerechnetes Padding
behoben (letztes Zeichen war nie sichtbar), Ausblende-Verlauf entfernt
(verschluckte genau das Textende), Wartezeit am Anfang entfernt, Tempo
spürbar verlangsamt, kein Neustart der Animation mehr bei jedem 30s-Poll.
- Zweite Trennlinie zwischen Ziel und Abfahrtszeit ergänzt (gab es bisher nur
zwischen Linie und Ziel).
## Backend: weitere Störungs-Filter-Verbesserung
### Fixed
- Generische HAFAS-Meldung ("Abfahrt heute von Gleis X") wird jetzt ebenso
herausgefiltert wie die bereits vorher gefilterte generische
"Gleisänderung"-Meldung - beide sind durch die präzise, aus Ist-Daten
gebaute Gleisänderungs-Meldung (Linie/Ziel/Uhrzeit/altes+neues Gleis)
vollständig abgedeckt und wären sonst redundant doppelt angezeigt worden.
## Autonomer Start am aktuellen Standort
### Added
- **App startet jetzt immer am aktuellen Standort** statt an der zuletzt
besuchten Haltestelle: beim Öffnen wird automatisch der Standort abgefragt,
die nächstgelegene Haltestelle ausgewählt und ihre Abfahrten direkt gezeigt
- ohne Klick. Weitere nahe Haltestellen erscheinen zusätzlich als Vorschau.
Schlägt das fehl (Berechtigung verweigert, kein Standort, keine Treffer),
fällt die App sauber auf die zuletzt besuchte Haltestelle zurück.
- **Störungen "In deiner Nähe"** laden jetzt automatisch beim ersten Öffnen
des Störungen-Tabs, statt einen Klick auf "Standort verwenden" zu
erfordern - nutzt dafür den beim Start bereits ermittelten Standort weiter.
Störungsprüfung deckt damit durchgängig sowohl Favoriten (bestehendes
Störungs-Push-Feature) als auch den aktuellen Standort ab.
### Removed
- Tote, nie aufgerufene Funktion `loadNearbyPreview()` - durch die neue,
vollständige Autostart-Logik ersetzt.