Zeiterfassung

Eine Full-Stack-Zeiterfassungsanwendung, entwickelt mit Node.js, Express, SQLite und containerisiert mit Docker.

Funktionen

  • Erfassung von Arbeitszeiten (Datum, Startzeit, Endzeit)
  • Automatische Pausenberechnung nach deutschem Arbeitszeitgesetz
  • Maximum von 10 Stunden Nettoarbeitszeit
  • Filterung nach Zeitraum
  • CSV-Export mit deutscher Formatierung
  • Responsive Benutzeroberfläche mit Tailwind CSS
  • Moderner Datums-/Zeitauswahl (Flatpickr)
  • Docker-Containerisierung

Technologie-Stack

  • Backend: Node.js, Express.js
  • Datenbank: SQLite (better-sqlite3)
  • Frontend: Vanilla JavaScript, HTML, Tailwind CSS
  • Containerisierung: Docker

Projektstruktur

/zeiterfassung
  ├── public/
  │   ├── index.html       # Hauptbenutzeroberfläche
  │   └── app.js           # Frontend-Logik
  ├── db/
  │   └── schema.sql       # Datenbankschema
  ├── server.js            # Express-Server mit API-Endpunkten
  ├── Dockerfile           # Multi-Stage Docker Build
  ├── package.json
  └── README.md

Deutsche Pausenregelung

Die Anwendung berechnet automatisch die Pausenzeiten gemäß deutschem Arbeitszeitgesetz:

  • > 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

  • 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
  • GET /api/export?from=YYYY-MM-DD&to=YYYY-MM-DD - Einträge als CSV exportieren

Installation & Ausführung

Repository klonen

git clone https://gitea.fx-se.de/maggot/timetracker.git
cd timetracker

Option 1: Mit Docker Compose (Empfohlen)

Voraussetzungen:

  • Docker und Docker Compose installiert

Starten:

docker-compose up -d

Logs ansehen:

docker-compose logs -f

Stoppen:

docker-compose down

Stoppen und Daten löschen:

docker-compose down -v

Die Anwendung läuft auf:

http://localhost:3000

Option 2: Mit Docker (manuell)

Docker-Image erstellen:

docker build -t zeiterfassung .

Container starten:

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: Lokale Ausführung (ohne Docker)

Voraussetzungen:

  • Node.js 18+ installiert

Installation:

  1. Abhängigkeiten installieren:
npm install
  1. Server starten:
npm start
  1. Browser öffnen und navigieren zu:
http://localhost:3000

CSV-Export-Format

Die exportierte CSV-Datei enthält folgende Spalten:

  • Datum: Datum im Format TT.MM.JJJJ
  • Startzeit: Startzeit im Format HH:MM
  • Endzeit: Endzeit im Format HH:MM
  • Pause in Minuten: Pausenzeit in Minuten
  • Gesamtstunden: Nettostunden mit Komma als Dezimaltrennzeichen (z.B. 8,50)

Entwicklung

Die Anwendung verwendet:

  • 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
  • Alle Berechnungen werden serverseitig durchgeführt, um die Datenintegrität zu gewährleisten

Lizenz

MIT

Description
No description provided
Readme 21 MiB
Languages
JavaScript 79.7%
HTML 19.5%
Dockerfile 0.8%