Refactor README.md for improved structure and clarity; add collapsible sections for screenshots and features
This commit is contained in:
369
README.md
369
README.md
@@ -2,7 +2,8 @@
|
|||||||
|
|
||||||
Eine Full-Stack-Zeiterfassungsanwendung, entwickelt mit Node.js, Express, SQLite und containerisiert mit Docker.
|
Eine Full-Stack-Zeiterfassungsanwendung, entwickelt mit Node.js, Express, SQLite und containerisiert mit Docker.
|
||||||
|
|
||||||
## Screenshots
|
<details>
|
||||||
|
<summary><b>📸 Screenshots</b></summary>
|
||||||
|
|
||||||

|

|
||||||
*Hauptansicht mit Timer und Monatsübersicht*
|
*Hauptansicht mit Timer und Monatsübersicht*
|
||||||
@@ -13,254 +14,240 @@ Eine Full-Stack-Zeiterfassungsanwendung, entwickelt mit Node.js, Express, SQLite
|
|||||||

|

|
||||||
*Eintragsbearbeitung und Bulk-Operationen*
|
*Eintragsbearbeitung und Bulk-Operationen*
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
## Funktionen
|
## Funktionen
|
||||||
|
|
||||||
### Zeiterfassung
|
### ⏱️ Zeiterfassung
|
||||||
- ✅ **Start/Stop Timer**: Live-Timer mit automatischer Zeiterfassung für den aktuellen Tag
|
- **Live-Timer mit automatischen Pausen**: Start/Stop-Timer erfasst die tägliche Arbeitszeit
|
||||||
- Pause nach 6 Stunden (30 Min) oder 9 Stunden (45 Min) gemäß deutschem Arbeitszeitgesetz
|
- Automatische Pausen nach 6h (30 Min) oder 9h (45 Min) gemäß deutschem Arbeitszeitgesetz
|
||||||
- Automatische Rundung auf 15-Minuten-Intervalle
|
- Rundung auf 15-Minuten-Intervalle
|
||||||
- Timer läuft auch nach Seiten-Reload weiter
|
- Timer persistiert über Seiten-Reloads
|
||||||
- ✅ **Manuelle Eingabe**: Erfassung von Arbeitszeiten (Datum, Startzeit, Endzeit, Pause)
|
- Manuelle Startzeit-Eingabe möglich
|
||||||
- ✅ **Inline-Bearbeitung**: Schnelle Änderung von Zeiten durch Klick in die Tabelle
|
- Visueller Indikator (blinkendes Uhr-Icon) bei laufendem Timer
|
||||||
- ✅ **Standort-Tracking**: Home-Office oder Büro pro Eintrag
|
- **Flexible Eingabemodi**:
|
||||||
- ✅ **Urlaub eintragen**: Urlaubstage werden nicht vom Saldo abgezogen
|
- Manuelle Eingabe (Datum, Start, Ende, Pause)
|
||||||
- ✅ **Gleittage eintragen**: Gleittage ziehen 8 Stunden vom Saldo ab
|
- Inline-Bearbeitung direkt in der Tabelle
|
||||||
|
- Schnelles Hinzufügen von Einträgen über Monatsansicht
|
||||||
|
- **Arbeitsort-Tracking**: Büro oder Home-Office pro Eintrag
|
||||||
|
- **Sondereinträge**:
|
||||||
|
- Urlaubstage (werden nicht vom Saldo abgezogen)
|
||||||
|
- Gleittage (ziehen 8h vom Saldo ab)
|
||||||
|
|
||||||
### Intelligente Berechnungen
|
### 📊 Intelligente Berechnungen
|
||||||
- ✅ **Automatische Pausenberechnung** nach deutschem Arbeitszeitgesetz:
|
- **Automatische Pausenberechnung** (deutsches Arbeitszeitgesetz)
|
||||||
- \> 6 Stunden: 30 Minuten Pause
|
- **10-Stunden-Cap** für maximale Nettoarbeitszeit pro Tag
|
||||||
- \> 9 Stunden: 45 Minuten Pause
|
- **Live-Statistiken** mit laufendem Timer:
|
||||||
- ✅ **Maximum von 10 Stunden Nettoarbeitszeit** pro Tag
|
- Soll-Stunden (basierend auf Arbeitstagen)
|
||||||
- ✅ **Monatliche Statistiken**: Soll-Stunden, Ist-Stunden, Saldo (Monat + Gesamt)
|
- Ist-Stunden (inkl. aktuell laufender Timer)
|
||||||
- ✅ **Arbeitstage-Berechnung**: Automatische Erkennung von Wochenenden und Feiertagen
|
- Monatssaldo + Gesamtsaldo mit Vormonatsübertrag
|
||||||
|
- Arbeitstage-Zählung
|
||||||
|
- **Urlaubsverwaltung**:
|
||||||
|
- Konfigurierbares Jahres-Kontingent
|
||||||
|
- Tracking: Genommen, Geplant, Verfügbar
|
||||||
|
- Automatische Jahresberechnung
|
||||||
|
|
||||||
### Bundesland-spezifische Feiertage
|
### 🗓️ Bundesland-spezifische Feiertage
|
||||||
- ✅ **16 Bundesländer**: Auswahl des Bundeslandes für korrekte Feiertagsberechnung
|
- **16 Bundesländer** mit korrekten regionalen Feiertagen
|
||||||
- ✅ **Persistente Einstellung**: Bundesland-Auswahl wird gespeichert
|
- **Persistente Einstellung** (gespeichert in Datenbank)
|
||||||
- ✅ **Kollisionserkennung**: Warnung bei Feiertagen, die mit bestehenden Einträgen kollidieren
|
- **Kollisionserkennung**: Warnung bei Feiertagen mit bestehenden Einträgen
|
||||||
- ✅ **Alle regionalen Feiertage**: Heilige Drei Könige, Fronleichnam, Reformationstag, etc.
|
- **Alle Feiertage**: Bundeseinheitlich + regional (z.B. Fronleichnam, Reformationstag)
|
||||||
|
|
||||||
### Monatsansicht & Navigation
|
### 📅 Monatsansicht & Navigation
|
||||||
- ✅ **Monatskalender**: Vollständige Ansicht aller Tage des Monats
|
- **Vollständiger Monatskalender** mit allen Tagen
|
||||||
- ✅ **Farbcodierung**:
|
- **Intuitive Farbcodierung**:
|
||||||
- Grün: Home-Office Tage
|
- 🟢 Grün: Home-Office
|
||||||
- Gelb: Urlaub
|
- 🟡 Gelb: Urlaub
|
||||||
- Cyan: Gleittage
|
- 🔵 Cyan: Gleittage
|
||||||
- Rot: Fehlende Einträge an Arbeitstagen
|
- 🔴 Rot: Fehlende Arbeitstage
|
||||||
- Grau: Wochenenden
|
- ⚫ Grau: Wochenenden
|
||||||
- Blau: Feiertage mit Namen
|
- 🔵 Blau: Feiertage (mit Namen)
|
||||||
- ✅ **Vor/Zurück Navigation**: Einfaches Wechseln zwischen Monaten
|
- **Navigation**: Vor/Zurück-Buttons zum Monatswechsel
|
||||||
- ✅ **Auto-Fill Funktion**: Automatisches Ausfüllen des gesamten Monats mit Standard-Arbeitszeiten
|
- **Auto-Fill**: Automatisches Befüllen des Monats mit Standard-Arbeitszeiten (9:00-17:30)
|
||||||
|
- **Quick-Actions**: Plus-Buttons für schnelles Hinzufügen von Einträgen
|
||||||
|
|
||||||
### Bulk-Operationen
|
### ⚡ Bulk-Operationen
|
||||||
- ✅ **Mehrfachauswahl**: Checkbox-Modus für schnelle Massenbearbeitung
|
- **Mehrfachauswahl-Modus** mit Checkboxen
|
||||||
- ✅ **Bulk-Standort setzen**: Mehrere Einträge auf einmal auf Home/Büro setzen
|
- **Bulk-Aktionen**:
|
||||||
- ✅ **Bulk-Löschen**: Mehrere Einträge auf einmal löschen
|
- Standort setzen (Büro/Home)
|
||||||
|
- Urlaub eintragen
|
||||||
|
- Gleitzeit eintragen
|
||||||
|
- Löschen
|
||||||
|
- **Funktioniert in beiden Ansichten** (Monatsansicht + Filteransicht)
|
||||||
|
|
||||||
### Filter & Export
|
### 🔍 Filter & Export
|
||||||
- ✅ **Zeitraum-Filter**: Filterung nach Datum (Von/Bis)
|
- **Zeitraum-Filter**: Von/Bis-Datum (bleibt bei Bulk-Aktionen erhalten)
|
||||||
- ✅ **CSV-Export (Alle)**: Export aller Einträge im gewählten Zeitraum
|
- **Getrennte Ansichten**: Monatsnavigation wird bei Filter-Ansicht ausgeblendet
|
||||||
- ✅ **CSV-Export (Abweichungen)**: Export nur der Tage mit Abweichungen von 8,0 Stunden
|
- **CSV-Export (Alle)**: Alle Einträge im gewählten Zeitraum
|
||||||
- Ideal für Arbeitszeitnachweise bei Gleitzeit
|
- Spalten: Datum, Start, Ende, Pause (Min), Netto (h), Arbeitsort, Abweichung (h)
|
||||||
- Zeigt nur relevante Über-/Unterschreitungen
|
- **CSV-Export (Abweichungen)**: Nur Tage ≠ 8,0h
|
||||||
- ✅ **Deutsches Format**: Komma als Dezimaltrennzeichen, DD.MM.YYYY Datumsformat
|
- Ideal für Gleitzeit-Nachweise
|
||||||
|
- **Deutsches Format**: Semikolon-getrennt, Komma-Dezimal
|
||||||
|
|
||||||
### Benutzerfreundlichkeit
|
### 🎨 Modernes UI/UX
|
||||||
- ✅ **Responsive Design**: Optimiert für Desktop, Tablet und Smartphone
|
- **Premium Design**: Glass-Morphism, Gradients, Schatten, Animationen
|
||||||
- ✅ **Dark Mode**: Modernes dunkles Design für augenschonende Arbeit
|
- **Responsive**: Desktop, Tablet, Mobile
|
||||||
- ✅ **Toast-Benachrichtigungen**: Visuelles Feedback bei Aktionen
|
- **Dark Mode**: Augenschonendes dunkles Design
|
||||||
- ✅ **Flatpickr**: Moderne Datums- und Zeitauswahl mit Touch-Support
|
- **Toast-Benachrichtigungen**: Visuelles Feedback
|
||||||
- ✅ **Persistente Daten**: SQLite-Datenbank mit automatischer Migration
|
- **Icons**: Lucide Icons für klare Symbolik
|
||||||
|
- **Flatpickr**: Touch-optimierte Datums-/Zeit-Picker
|
||||||
|
|
||||||
## Technologie-Stack
|
## 🏗️ Technologie-Stack
|
||||||
|
|
||||||
- **Backend**: Node.js, Express.js (modular aufgebaut)
|
**Backend:**
|
||||||
- **Config**: Datenbank-Setup & Migrationen
|
- Node.js 18+ mit Express.js
|
||||||
- **Utils**: Zeitberechnungen nach deutschem Arbeitszeitgesetz
|
- SQLite (better-sqlite3) für dateibasierte Persistenz
|
||||||
- **Routes**: Separate Module für API-Endpunkte
|
- Modulare Architektur (config, utils, routes)
|
||||||
- **Datenbank**: SQLite (better-sqlite3)
|
|
||||||
- **Frontend**: Vanilla JavaScript, HTML, Tailwind CSS
|
|
||||||
- **Containerisierung**: Docker, Docker Compose
|
|
||||||
|
|
||||||
## Projektstruktur
|
**Frontend:**
|
||||||
|
- Vanilla JavaScript (ES6+)
|
||||||
|
- Tailwind CSS (CDN)
|
||||||
|
- Lucide Icons
|
||||||
|
- Flatpickr (Datums-/Zeit-Picker)
|
||||||
|
|
||||||
|
**Infrastructure:**
|
||||||
|
- Docker & Docker Compose
|
||||||
|
- Multi-Stage Build für optimierte Images
|
||||||
|
|
||||||
|
## 📁 Projektstruktur
|
||||||
|
|
||||||
```
|
```
|
||||||
/timetracker
|
timetracker/
|
||||||
├── src/ # Backend-Code (refactored)
|
├── server.js # Express Entry Point
|
||||||
│ ├── config/
|
├── db/
|
||||||
│ │ └── database.js # Datenbank-Initialisierung & Migrationen
|
│ ├── schema.sql # Datenbankschema
|
||||||
│ ├── utils/
|
│ └── timetracker.db # SQLite Datenbank (generiert)
|
||||||
│ │ └── timeCalculator.js # Zeitberechnungen (Pausen, Caps)
|
├── public/
|
||||||
│ └── routes/
|
│ ├── index.html # Single-Page Application
|
||||||
│ ├── entries.js # CRUD API-Endpunkte
|
│ └── app.js # Frontend-Logik (~2700 Zeilen)
|
||||||
│ └── export.js # CSV-Export
|
├── media/screenshots/ # App-Screenshots
|
||||||
├── public/ # Frontend
|
├── Dockerfile # Container-Image
|
||||||
│ ├── index.html # Hauptbenutzeroberfläche
|
├── docker-compose.yml # Orchestrierung
|
||||||
│ ├── app.js # Frontend-Logik
|
└── package.json
|
||||||
│ └── js/ # Frontend-Module (optional)
|
|
||||||
│ ├── state.js # State Management
|
|
||||||
│ ├── utils/ # Utilities
|
|
||||||
│ ├── api/ # API-Client
|
|
||||||
│ └── ui/ # UI-Komponenten
|
|
||||||
├── db/
|
|
||||||
│ └── schema.sql # Datenbankschema
|
|
||||||
├── server.js # Express-Server (22 Zeilen - Entry Point)
|
|
||||||
├── Dockerfile # Multi-Stage Docker Build
|
|
||||||
├── docker-compose.yml # Docker Compose Konfiguration
|
|
||||||
├── package.json
|
|
||||||
└── README.md
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Deutsche Pausenregelung
|
## ⚙️ Deutsche Arbeitszeitregelungen
|
||||||
|
|
||||||
Die Anwendung berechnet automatisch die Pausenzeiten gemäß deutschem Arbeitszeitgesetz:
|
Die App implementiert deutsches Arbeitszeitgesetz (ArbZG):
|
||||||
- **> 6 Stunden Arbeitszeit**: 30 Minuten Pause werden abgezogen
|
|
||||||
- **> 9 Stunden Arbeitszeit**: 45 Minuten Pause werden abgezogen
|
|
||||||
- **Nettostunden sind auf maximal 10,0 Stunden begrenzt**
|
|
||||||
|
|
||||||
## API-Endpunkte
|
- **> 6h Arbeit** → 30 Min Pause (automatisch)
|
||||||
|
- **> 9h Arbeit** → 45 Min Pause (automatisch)
|
||||||
|
- **Maximale Nettoarbeitszeit**: 10,0h pro Tag
|
||||||
|
- **Rundung**: Alle Zeiten auf 15-Minuten-Intervalle
|
||||||
|
|
||||||
### Zeiteinträge
|
## 🚀 Installation & Ausführung
|
||||||
- `GET /api/entries?from=YYYY-MM-DD&to=YYYY-MM-DD` - Alle Einträge im Zeitraum abrufen
|
|
||||||
- `POST /api/entries` - Neuen Eintrag erstellen
|
|
||||||
- `PUT /api/entries/:id` - Bestehenden Eintrag aktualisieren
|
|
||||||
- `DELETE /api/entries/:id` - Eintrag löschen
|
|
||||||
|
|
||||||
### Export
|
### 🐳 Option 1: Docker Compose (Empfohlen)
|
||||||
- `GET /api/export?from=YYYY-MM-DD&to=YYYY-MM-DD` - Alle Einträge als CSV exportieren
|
|
||||||
- `GET /api/export-deviations?from=YYYY-MM-DD&to=YYYY-MM-DD` - Nur Abweichungen als CSV exportieren
|
|
||||||
|
|
||||||
### Einstellungen
|
**Voraussetzungen:** Docker & Docker Compose
|
||||||
- `GET /api/settings/:key` - Einstellung abrufen
|
|
||||||
- `POST /api/settings` - Einstellung speichern (key, value)
|
|
||||||
- `GET /api/settings` - Alle Einstellungen abrufen
|
|
||||||
|
|
||||||
## Installation & Ausführung
|
|
||||||
|
|
||||||
### Repository klonen
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
# Repository klonen
|
||||||
git clone https://gitea.fx-se.de/maggot/timetracker.git
|
git clone https://gitea.fx-se.de/maggot/timetracker.git
|
||||||
cd timetracker
|
cd timetracker
|
||||||
```
|
|
||||||
|
|
||||||
### Option 1: Mit Docker Compose (Empfohlen)
|
# Starten
|
||||||
|
|
||||||
**Voraussetzungen:**
|
|
||||||
- Docker und Docker Compose installiert
|
|
||||||
|
|
||||||
**Starten:**
|
|
||||||
```bash
|
|
||||||
docker-compose up -d
|
docker-compose up -d
|
||||||
```
|
|
||||||
|
|
||||||
**Logs ansehen:**
|
# Logs
|
||||||
```bash
|
|
||||||
docker-compose logs -f
|
docker-compose logs -f
|
||||||
```
|
|
||||||
|
|
||||||
**Stoppen:**
|
# Stoppen
|
||||||
```bash
|
|
||||||
docker-compose down
|
docker-compose down
|
||||||
```
|
|
||||||
|
|
||||||
**Stoppen und Daten löschen:**
|
# Stoppen + Daten löschen
|
||||||
```bash
|
|
||||||
docker-compose down -v
|
docker-compose down -v
|
||||||
```
|
```
|
||||||
|
|
||||||
Die Anwendung läuft auf:
|
**App läuft auf:** `http://localhost:3000`
|
||||||
```
|
|
||||||
http://localhost:3000
|
|
||||||
```
|
|
||||||
|
|
||||||
### Option 2: Mit Docker (manuell)
|
### 🐋 Option 2: Docker (manuell)
|
||||||
|
|
||||||
**Docker-Image erstellen:**
|
|
||||||
```bash
|
```bash
|
||||||
|
# Image bauen
|
||||||
docker build -t zeiterfassung .
|
docker build -t zeiterfassung .
|
||||||
```
|
|
||||||
|
|
||||||
**Container starten:**
|
# Container starten (mit Daten-Persistenz)
|
||||||
```bash
|
|
||||||
docker run -p 3000:3000 -v $(pwd)/db:/app/db zeiterfassung
|
docker run -p 3000:3000 -v $(pwd)/db:/app/db zeiterfassung
|
||||||
```
|
```
|
||||||
|
|
||||||
Das `-v` Flag bindet das Datenbankverzeichnis ein, um Daten zwischen Container-Neustarts zu erhalten.
|
### 💻 Option 3: Lokal (ohne Docker)
|
||||||
|
|
||||||
### Option 3: Lokale Ausführung (ohne Docker)
|
**Voraussetzungen:** Node.js 18+
|
||||||
|
|
||||||
**Voraussetzungen:**
|
|
||||||
- Node.js 18+ installiert
|
|
||||||
|
|
||||||
**Installation:**
|
|
||||||
|
|
||||||
1. Abhängigkeiten installieren:
|
|
||||||
```bash
|
```bash
|
||||||
npm install
|
npm install
|
||||||
```
|
|
||||||
|
|
||||||
2. Server starten:
|
|
||||||
```bash
|
|
||||||
npm start
|
npm start
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Browser öffnen und navigieren zu:
|
**App läuft auf:** `http://localhost:3000`
|
||||||
|
|
||||||
|
## 📤 CSV-Export
|
||||||
|
|
||||||
|
Die App bietet zwei Export-Modi über die Filter-Ansicht:
|
||||||
|
|
||||||
|
### Export Alle (📥)
|
||||||
|
Exportiert **alle** Einträge im gewählten Zeitraum.
|
||||||
|
|
||||||
|
**Spalten:**
|
||||||
```
|
```
|
||||||
http://localhost:3000
|
Datum;Start;Ende;Pause (min);Netto (h);Arbeitsort;Abweichung (h)
|
||||||
```
|
```
|
||||||
|
|
||||||
## CSV-Export-Format
|
**Beispiel:**
|
||||||
|
|
||||||
Die Anwendung bietet zwei Export-Optionen:
|
|
||||||
|
|
||||||
### 1. Vollständiger Export (📥 Button)
|
|
||||||
Exportiert alle Einträge im gewählten Zeitraum (oder alle, wenn kein Filter gesetzt).
|
|
||||||
|
|
||||||
### 2. Export nur Abweichungen (⚠️ Button)
|
|
||||||
Exportiert **nur** Tage, die von der Standard-Arbeitszeit (8,0 Stunden) abweichen.
|
|
||||||
- **Zweck**: Ideal für Arbeitszeitnachweise bei Gleitzeit-Modellen
|
|
||||||
- **Inhalt**: Nur Über- und Unterschreitungen der 8-Stunden-Marke
|
|
||||||
- **Vorteil**: Übersichtlicher Nachweis für HR/Verwaltung ohne irrelevante Standard-Tage
|
|
||||||
|
|
||||||
### CSV-Spalten:
|
|
||||||
- **Datum**: TT.MM.JJJJ (z.B. 23.10.2025)
|
|
||||||
- **Typ**: Arbeit / Urlaub / Gleitzeit
|
|
||||||
- **Startzeit**: HH:MM (z.B. 08:00, bei Urlaub/Gleitzeit: -)
|
|
||||||
- **Endzeit**: HH:MM (z.B. 17:00, bei Urlaub/Gleitzeit: -)
|
|
||||||
- **Pause in Minuten**: Ganzzahl (z.B. 30)
|
|
||||||
- **Gesamtstunden**: Nettostunden mit Komma als Dezimaltrennzeichen (z.B. 8,50)
|
|
||||||
|
|
||||||
**Beispiel Abweichungs-Export:**
|
|
||||||
```csv
|
```csv
|
||||||
Datum,Startzeit,Endzeit,Pause in Minuten,Gesamtstunden
|
2025-10-21;08:00;17:00;30;8,50;Büro;+0,50
|
||||||
21.10.2025,08:00,18:30,45,9,75
|
2025-10-22;09:00;18:00;45;8,25;Home;+0,25
|
||||||
22.10.2025,09:00,15:30,30,6,00
|
2025-10-23;08:30;16:30;30;7,50;Büro;-0,50
|
||||||
```
|
```
|
||||||
(Tage mit exakt 8,0h werden nicht exportiert)
|
|
||||||
|
|
||||||
## Entwicklung
|
### Export Abweichungen (⚠️)
|
||||||
|
Exportiert **nur** Tage mit ≠ 8,0 Stunden.
|
||||||
|
|
||||||
Die Anwendung verwendet:
|
**Zweck:** Gleitzeit-Nachweise für HR (nur relevante Über-/Unterschreitungen)
|
||||||
- **Flatpickr** für die Datums- und Zeitauswahl mit mobilfreundlichen Oberflächen
|
|
||||||
- **Tailwind CSS** für das Styling (geladen über CDN)
|
|
||||||
- **SQLite** für leichtgewichtige, dateibasierte Datenpersistenz
|
|
||||||
- **Modulare Backend-Architektur** für bessere Wartbarkeit und Testbarkeit
|
|
||||||
- Alle Berechnungen werden serverseitig durchgeführt, um die Datenintegrität zu gewährleisten
|
|
||||||
|
|
||||||
### Code-Struktur
|
**Beispiel:**
|
||||||
|
```csv
|
||||||
|
2025-10-21;08:00;18:30;45;9,75;Büro;+1,75
|
||||||
|
2025-10-23;09:00;15:30;30;6,00;Home;-2,00
|
||||||
|
```
|
||||||
|
*(Tage mit exakt 8,0h fehlen)*
|
||||||
|
|
||||||
**Backend:**
|
**Format:** Semikolon-getrennt, Komma-Dezimal, YYYY-MM-DD Datum
|
||||||
- `server.js` - Express-Setup und Routing (22 Zeilen)
|
|
||||||
- `src/config/database.js` - Datenbank-Initialisierung
|
|
||||||
- `src/utils/timeCalculator.js` - Geschäftslogik für Zeitberechnungen
|
|
||||||
- `src/routes/entries.js` - CRUD-Endpunkte
|
|
||||||
- `src/routes/export.js` - CSV-Export
|
|
||||||
|
|
||||||
**Frontend:**
|
## 📡 API-Endpunkte
|
||||||
- `public/app.js` - Haupt-Frontend-Logik
|
|
||||||
- `public/js/` - Optionale Module (state, utils, api, ui)
|
|
||||||
|
|
||||||
## Lizenz
|
### Einträge
|
||||||
|
- `GET /api/entries?from=YYYY-MM-DD&to=YYYY-MM-DD` - Einträge abrufen
|
||||||
|
- `POST /api/entries` - Eintrag erstellen
|
||||||
|
- `PUT /api/entries/:id` - Eintrag aktualisieren
|
||||||
|
- `DELETE /api/entries/:id` - Eintrag löschen
|
||||||
|
|
||||||
MIT
|
### Einstellungen
|
||||||
|
- `GET /api/settings/:key` - Setting abrufen
|
||||||
|
- `POST /api/settings` - Setting speichern `{key, value}`
|
||||||
|
- `GET /api/settings` - Alle Settings
|
||||||
|
|
||||||
|
## 🛠️ Entwicklung
|
||||||
|
|
||||||
|
**Architektur:** Single-Page Application (SPA) mit REST-API Backend
|
||||||
|
|
||||||
|
**Tech-Details:**
|
||||||
|
- Flatpickr für Touch-optimierte Picker
|
||||||
|
- Lucide Icons für Symbolik
|
||||||
|
- SQLite für dateibasierte Persistenz
|
||||||
|
- Server-seitige Berechnungen für Datenintegrität
|
||||||
|
- Responsive Design (Tailwind CSS via CDN)
|
||||||
|
|
||||||
|
**Datenpersistenz:**
|
||||||
|
- SQLite-Datenbank: `db/timetracker.db`
|
||||||
|
- Automatische Migrations beim Start
|
||||||
|
- Volume-Mounting in Docker für Persistenz
|
||||||
|
|
||||||
|
## 📄 Lizenz
|
||||||
|
|
||||||
|
MIT License - siehe LICENSE Datei
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Entwickelt mit ❤️ für deutsches Arbeitszeitrecht**
|
||||||
|
|||||||
Reference in New Issue
Block a user