Gleitzeit Tracker – Persönliche Arbeitszeiterfassung mit iPhone Integration

Ich habe einen selbst gehosteten Gleitzeit Tracker gebaut – ein Web-Dashboard zur persönlichen Arbeitszeiterfassung, das sich per iPhone Kurzbefehl vollautomatisch bedienen lässt. Das Projekt ist auf GitHub verfügbar: rinkelzz/gleitzeit

Was kann der Gleitzeit Tracker?

Das Tool deckt alles ab, was man für eine saubere Zeiterfassung braucht:

  • Check-in / Check-out per iPhone Kurzbefehl – automatisch beim Betreten oder Verlassen des Büros
  • Zwei getrennte Zeitkonten – Gleitzeit-Konto (blau) und Überstunden-Konto (gelb)
  • Automatische Feiertage für alle 16 Bundesländer – kein manuelles Eintragen nötig
  • Abwesenheitsverwaltung für Urlaub, Krank, Bildungsurlaub, Gleittage und mehr
  • Jahreskalender mit Drag-Auswahl zum schnellen Eintragen von Abwesenheiten
  • Export als CSV (Excel-kompatibel) und PDF-Druckansicht
  • Import aus CSV mit Vorschau

iPhone Kurzbefehle – Check-in auf Knopfdruck

Das Herzstück ist die API-Integration. Über drei einfache Endpunkte lässt sich alles vom iPhone aus steuern:

POST /api/checkin.php   → Check-in starten
POST /api/checkout.php  → Check-out speichern
GET  /api/status.php    → Aktuellen Status abfragen

In der Shortcuts-App legt man zwei Kurzbefehle an – „Arbeit Start“ und „Arbeit Ende“ – jeweils mit einer einfachen HTTP-Anfrage an den eigenen Server. Mit einer Geo-basierten Automatisierung läuft das sogar vollautomatisch: Check-in beim Ankommen, Check-out beim Verlassen.

Zwei Zeitkonten – Gleitzeit und Überstunden

Das System unterscheidet klar zwischen regulärer Gleitzeit und echten Überstunden:

  • Gleitzeit-Konto: Alle normalen Arbeitstage fließen hier automatisch ein
  • Überstunden-Konto: Nur Tage, die in der Monatsansicht explizit als Überstundentag markiert werden

Einen Gleittag nehmen ist einfach: In der Abwesenheitsverwaltung den Typ „Gleittag (Gleitzeit entnehmen)“ eintragen – das Tagessoll wird automatisch vom Konto abgezogen.

Installation

Der Stack ist schlank: PHP 8.1+, MySQL/MariaDB und Apache mit mod_rewrite. Wer lieber Docker nutzt, ist in zwei Befehlen startklar:

docker compose up -d
curl http://localhost:8081/setup.php

Für Produktivbetrieb einfach das Repo klonen, config.php aus der Beispieldatei erstellen, Datenbank anlegen und setup.php einmal aufrufen – danach löschen.

Sicherheit

Ein paar Dinge waren mir wichtig:

  • config.php ist in .gitignore und landet nie im Repository
  • API-Key mit mindestens 32 zufälligen Bytes
  • Login über password_hash() / password_verify()
  • CSRF-Schutz auf allen Formularen
  • Rate Limiting: max. 10 API-Calls pro Minute pro IP

Das Projekt auf GitHub

Der komplette Quellcode ist unter github.com/rinkelzz/gleitzeit verfügbar. Feedback und Pull Requests sind willkommen!

Schreibe einen Kommentar