Commit Graph

38 Commits

Author SHA1 Message Date
admin 8c60089325 fix: iOS/iPad text color — text-gray-900 on all inputs, tables, headings
Alle Eingabefelder, Tabellenzellen und Überschriften ohne explizite
Textfarbe wurden mit text-gray-900 versehen. iOS rendert sonst
system-default-Farben, die auf weißem Hintergrund kaum lesbar sind.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 14:07:18 +02:00
admin 27f2d438e2 Bump version to 1.7.8 2026-05-31 15:34:34 +00:00
admin d5bd359802 feat: Statistik komplett neu gestaltet — kuppelunabhängig, feste Spalten
- Statistik gilt jetzt für alle Kuppeln gemeinsam (kein Kuppel-Filter mehr)
- Neue Tabellenstruktur: Besucher (RF/SF/SonF/PrF/ToT/Gesamt) | Anzahl (Führ./Beob./TD/Sonst./BEOS/ToT/Gesamt)
- Anzahl zählt Einträge (COUNT(*)) statt distinkte Tage
- Zusammenfassungskacheln auf 2 reduziert (Besucher + Führungen gesamt)
- Fix: Besucher-State wird zurückgesetzt wenn ArtFuehrung auf TD/BEOS wechselt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-30 17:29:08 +02:00
admin 102bc441c6 erster Versuch mit Fahrkosten 2026-05-27 22:33:41 +02:00
admin aad25109da 'Keine Einträge vorhanden bei der List angepasst 2026-05-27 18:05:04 +02:00
admin 10c6554276 v1.7.6: Bearbeiten/Löschen auf BEO-Mitglieder beschränkt
Ändern und Löschen eines Eintrags ist nur noch für angemeldete BEOs des Eintrags möglich (Admins dürfen immer). Serverseitige Prüfung via logbuch_beos-Tabelle; clientseitig werden die Aktions-Buttons nur eingeblendet, wenn der User in der BEO-Liste steht.

Außerdem: setState-in-Effect-Linterfehler in LogbuchList behoben (abgeleiteter Loading-State, abgeleitetes Page-Reset via filterKey).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-17 19:17:00 +02:00
admin d56ebb229d feat: Anleitung-Button im Footer + Statistik-Effect-Fix
- Footer: 3-Spalten-Layout mit 'Anleitung'-Button in der Mitte (Link auf /anleitung.html)
- anleitung.html: 'Zurück zum Logbuch'-Button oben (beim Drucken ausgeblendet)
- Statistik: synchrones setState im Effect durch abgeleiteten loading/error-State ersetzt; Fetch-Abbruch mit cancelled-Flag; as any durch ArtFuehrung-Cast ersetzt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-17 16:46:38 +02:00
admin b588a70ecd v1.7.5: UI-Verbesserungen Listenansicht und Zeiteingabe
- Listview: Toolbar-Rahmen #407BFF, Fokus 2px ring-inset #235CC8
- Listview: Pfeil-Buttons Monatsauswahl in #85B7D7
- Listview: Klimawerte werden bei allen-0 ausgeblendet
- Zeiteingabe: nur Stunden + Tab setzt Minuten automatisch auf :00

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 22:21:05 +02:00
admin 9e2f430d4a v1.7.4: Suche in Listenansicht (Bemerkungen, Objekte, BEOs)
Suchfeld in der Toolbar der Listenansicht: Suche über alle Einträge
der Kuppel in Bemerkungen, Objekte und BEOs. Monatsauswahl, Suchfeld
und Drucken-Button in einer Zeile; Monatsauswahl wird bei aktiver
Suche unsichtbar aber platzhaltend ausgeblendet.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 21:45:09 +02:00
admin d5ceff74be v1.7.3: Autofokus auf Startzeit statt Endzeit
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 21:08:21 +02:00
admin 1a34fccc35 v1.7.2: Zeiteingabe – Startzeit leer, Endzeit vorbelegt und fokussiert
- Startzeit startet leer (manuelle Eingabe erforderlich)
- Endzeit startet mit aktueller Uhrzeit auf 5 Minuten aufgerundet
- Endzeit erhält Autofokus beim Laden des Formulars
- Startzeit synct Endzeit nicht mehr automatisch

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 21:01:09 +02:00
admin cf038ad3be fix: Temperatureingabe negativ, Monatsauswahl auf aktuellem Monat begrenzt
- LogbuchForm: Temperatur als String-State (tempRaw) – Minus-Vorzeichen tippbar
- LogbuchList: input[type=month] mit max=currentMonth(), kein Zukunftsmonat wählbar
- .gitignore: DB_BACKUP/ ergänzt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 20:47:44 +02:00
admin 4593713042 feat: ObjektSelector – Dropdown bleibt nach Auswahl offen
Mehrere Objekte können ohne Schließen des Dropdowns ausgewählt werden.
Fokus kehrt nach jeder Auswahl ins Suchfeld zurück.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 20:47:08 +02:00
admin 8fabf7bb30 feat: Druck – kleinere Schrift und chronologische Reihenfolge
Beim Drucken wird die Tabellenschrift auf 0.72rem verkleinert.
Der Drucken-Button lädt vorab alle Einträge des Monats in
aufsteigender Reihenfolge (älteste zuerst) und ruft dann
window.print() auf. API unterstützt jetzt order=asc.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 21:19:06 +02:00
admin b18dfbe3f8 feat: ObjektSelector – Neu-Button entfernt, unbekannte Objekte direkt eintragen
Kein separater „+ Neu"-Button mehr. Im Dropdown erscheint stattdessen
„+ ‚[Name]' hinzufügen", sobald der eingegebene Text nicht bekannt ist.
Enter-Taste: bei einem Treffer auswählen, bei keinem Treffer neu anlegen.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 20:40:32 +02:00
admin 40bf029fc9 v1.7.0: Ersteller-BEO in Listenansicht fett und an erster Stelle
Der BEO, der einen Eintrag erstellt hat (created_by), wird in der
BEOs-Spalte fett hervorgehoben und immer als erster angezeigt.
API liefert created_by_kuerzel via JOIN auf beos-Tabelle.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 22:15:07 +02:00
admin ab9be7b96f v1.6.2: Zeiteingabe – Auto-Doppelpunkt nach 2 Ziffern, Endzeit leer bei Fokus
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 20:41:54 +02:00
admin 1451f45711 add Statistik component and API route 2026-05-10 14:55:27 +02:00
admin c04935a117 v1.4.0: Monatsfilter, Pagination, Rollenverwaltung, DB-Bereinigung
- Liste: Monatsfilter mit ←/→ Navigation, Standard = aktueller Monat
- Liste: Pagination (10 Einträge/Seite)
- BEO-Auswahl filtert nur role='guide'
- logbuch_objekte: ObjektName entfernt, JOIN auf objekte
- utf8mb4 Migration und DB-Charset-Umstellung
- SSH-Tunnel-Support: MySQL auf 127.0.0.1:3336
- phpMyAdmin unter /myadmin

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09 10:39:11 +02:00
admin 4f1ebb8aa6 Vorherige Änderungen an Formular und Typen nachcommittet
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09 09:37:11 +02:00
admin 8bff795247 v1.4.0: Sonderführung, Zeiterfassung, Enter-Navigation, Objektsuche
- Sonderführung: neues Feld 'Name/Gruppe' (DB-Spalte SonderName), in Liste sichtbar
- Wetter: Race-Condition behoben (API überschreibt DB-Werte beim Bearbeiten nicht mehr)
- Zeiterfassung: TimePicker5 ersetzt durch freie Texteingabe (TimeInput) mit Validierung
- Enter-Taste: navigiert zum nächsten Feld statt die Form abzuschicken; Luftdruck → zurück zu Art; Bemerkungen bleibt normal
- Objektsuche: Freitext-Suche im ObjektSelector, filtert nach Präfix (case-insensitive)
- UI-Anpassungen: kompakteres Layout (space-y-2, kleinere Abstände)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-04 08:50:51 +02:00
admin 743bebca2d v1.3.0: Wetterdaten in Liste, Zeit als eine Spalte
- Vollständige Liste: Start- und Endzeit in einer Spalte untereinander
- Vollständige Liste: neue Wetter-Spalte (Temp/Feuchte/Druck) ganz rechts
- Kompakte Vorschau bleibt unverändert

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-02 09:07:57 +02:00
admin 1291f0d027 v1.2.1: Wetter als editierbare Eingabefelder
- 3 editierbare Felder (Temp, Feuchte, Luftdruck) statt read-only Anzeige
- Vorausgefüllt mit aktuellen API-Werten
- Feuchte und Luftdruck als Ganzzahl (kein Dezimal)
- Felder gleichmäßig verteilt (links/Mitte/rechts, je 1/3 Breite)
- Wetter-Überschrift entfernt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-02 08:54:41 +02:00
admin 07d2a13014 v1.2.0: Formular-Redesign und Listen-Verbesserungen
- Eingabe: alle 5 Felder (Führung, Datum, Start, Ende, Besucher) in einer Zeile
- Eingabe: Datum einmalig, Start- und Endzeit getrennt
- Führungsarten: Kürzel werden nur in DB gespeichert, Anzeige als Klartext
- Liste: Datum und Zeit getrennt in eigenen Spalten
- Hintergrundfarbe #EEF4FF auf Login- und Passwort-Seite übertragen
- Alle Inputfelder gleich hoch (text-sm durchgehend)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-01 11:00:19 +02:00
admin 0e3c5ca835 v1.1.0: Druck-Optimierung, UI-Verbesserungen
- Drucklayout: kein innerer Rahmen, volle DIN-A4-Breite, @page-Regel
- Besucher-Spalte: zeigt keine 0 an wenn kein Wert eingetragen
- Beginn-Zeit synchronisiert automatisch die Ende-Zeit
- Hintergrundfarbe auf helles Blau (#EEF4FF)
- Listen-Tab und kompakte Vorschau mit weißem Rahmen
- Besucher-Spalte schmaler, Header als "Bes." abgekürzt
- Drucken-Button im Listen-Tab, Navigation bei Druck ausgeblendet

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-01 10:25:11 +02:00
admin 30c734220a Fix iOS text color, viewport meta tag, and security improvements
- Add viewport meta tag to prevent iOS zoom/scaling issues
- Fix text color on iOS Safari (explicit text-gray-900 on buttons, inputs, TimePicker5)
- Add session checks to /api/beos, /api/objekte, /api/wetter
- Revert iframe embedding (X-Frame-Options: DENY, SameSite: lax)
- docker-compose.prod.yml: fix DB_PORT=3306 for production
- Add docker-compose.prod.yml, .env.prod.example, dump/import scripts

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 17:38:08 +02:00
admin a0fb6d8089 Various UX improvements and bug fixes
- Fix mustChangePassword session flag for users with pw=NULL
- Add PrF (Private Führung) as new ArtFuehrung type
- Split datetime-local into separate date + TimePicker5 (5-min steps, auto-repeat)
- Responsive Beginn/Ende layout: stacked on mobile, inline on desktop
- Sort BEOs alphabetically by Kürzel in selector
- Title shows active kuppel; hide user display in header
- Selected BEOs show Kürzel only (name stays in dropdown)
- Session timeout reduced to 1 hour
- Add CLAUDE.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 18:02:47 +02:00
admin 2469715756 Show Objekte in compact list; narrower columns and shorter date format
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 13:35:21 +02:00
admin e3e5842805 Store ArtFuehrung as abbreviations in DB (RF, SF, BEOS, SonF, TD, Beob, ToT, Sonst)
Dropdown shows 'RF — Reguläre Führung' etc., list displays abbreviation only.
Includes migrate_art.sql for existing data and updated create_table.sql.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 09:15:53 +02:00
admin 23cd981f7f Snap Beginn/Ende to next 15-minute boundary on change and on load
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 08:59:15 +02:00
admin 34a2c6b90d Compact preview list below form on desktop; Beginn/Ende/Besucher in one row
- Eingabe tab shows last 5 entries below form on lg+ screens (compact mode
  hides Objekte and Bemerkungen columns); Liste tab shows full 20 entries
- Beginn, Ende, Besucher fields moved into a single flex row
- LogbuchList accepts limit and compact props

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 07:55:46 +02:00
admin aea5cc08d6 Reduce form field height to show list entries below the form
py-3 → py-2 on all inputs, selects, buttons; space-y-5 → space-y-3;
textarea rows 3 → 2; label margin reduced.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 20:23:19 +02:00
admin 5f92fd0d7f Hide Besucher field for BEO-Sitzung and Technischer Dienst
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 18:22:33 +02:00
admin 71f4ad1792 Add multi-select mode to BeoSelector and ObjektSelector
CustomSelect gains keepOpen prop: dropdown stays open after each
selection, closes via Fertig button or tap outside. ObjektSelector
separates Neu into its own button to keep the dropdown flow clean.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 18:17:56 +02:00
admin e4f3e7750a Replace Art der Führung select with CustomSelect
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 18:15:01 +02:00
admin 911b041136 Replace native selects with custom dropdown for mobile usability
Native <select> popups ignore CSS on iOS/Android. CustomSelect renders
a styled div-based dropdown with full-width touch-friendly option buttons
(py-3, text-base). Used in BeoSelector and ObjektSelector.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 18:13:06 +02:00
admin 6a655212bf Apply Anpassung_1: art-specific object logic, responsive design, remove Kuppel field
- Sonnenführung: fixes Sonne as sole object, no selector shown
- BEO-Sitzung / Technischer Dienst: object field hidden, DB stays empty
- Kuppel field removed from form (determined by active tab)
- Responsive layout: single-column on mobile, side-by-side on sm+
- Touch-friendly input sizes (py-3, text-base)
- Compact header and tab labels on small screens

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 18:05:40 +02:00
admin 4e53a7a5cd Initial implementation: Logbuch Sternwarte Welzheim
Vollständige Next.js 16 Webanwendung als Logbuch für die Sternwarte Welzheim.
4 Kuppeln (West/Ost/Süd/Pluto), BEO-basierte Authentifizierung mit erzwungenem
Passwort-Wechsel beim Erstlogin, MySQL-Backend, Docker-Deployment.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 17:11:27 +02:00