feat(zeit): Check-In/Check-Out + Kimai-Sync-Naht (ENTWICKLUN-9)
ci / quality (push) Failing after 42s
ci / build (push) Has been skipped
deploy / deploy (push) Successful in 1m20s

Arbeitsantritt = bestehender Lock-in (setzt checkedInAt); neu dazu:
- Check-Out / Feierabend: dayEntry.checkedOutAt + Endpoint dayEntry.checkOut;
  Heute-Seite zeigt „Arbeitsantritt HH:MM" und einen „Feierabend / Check-Out"-
  Button, danach Antritt/Feierabend/Dauer.
- Kimai-Anbindung (config-gated, best-effort, nicht blockierend): lib/kimai.ts
  mit clockIn/clockOut. Check-In startet ein Kimai-Timesheet, Check-Out stoppt
  es; ID + Sync-Status auf dem dayEntry (kimaiTimesheetId, kimaiSynced).
  No-Op solange KIMAI_BASE_URL/API_TOKEN/PROJECT_ID/ACTIVITY_ID nicht gesetzt.

Migration 0014 (checkedOutAt, kimaiTimesheetId, kimaiSynced). Env-Vars als
optional ergänzt + in .env.example dokumentiert.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
dejanandClaude Opus 4.8 committed 2026-06-06 18:46:18 +02:00
1 parent 9942cd8e88
commit 5bbb4abffa
9 files changed
+3542 -2

No files matched your search

+9
View File
@@ -22,3 +22,12 @@ NODE_ENV=development
LOG_LEVEL=info
PORT=3000
PUBLIC_BASE_URL=http://localhost:5173
# --- Kimai-Sync (optional, ENTWICKLUN-9) ---
# Nur wenn ALLE vier gesetzt sind, synct ebw beim Check-In/Out nach Kimai
# (sonst No-Op). API-Token in Kimai unter Benutzerprofil → API-Zugriff.
# PROJECT/ACTIVITY = numerische IDs des Default-Projekts/-Tätigkeit in Kimai.
# KIMAI_BASE_URL=https://kimai.tool-ctrl.de
# KIMAI_API_TOKEN=
# KIMAI_PROJECT_ID=
# KIMAI_ACTIVITY_ID=