LeaveFlow ist ein selbst gehostetes Open-Source-Tool zur Urlaubsverwaltung für kleine und mittelständische Unternehmen. Es verwaltet Urlaubsanträge, Genehmigungen, Teamkalender, Urlaubsansprüche und DSGVO-konformes Datenlebenszyklus-Management — mit erstklassiger Unterstützung für deutsches Arbeitsrecht (Bundesurlaubsgesetz, Länderfeiertage, eAU).
Lizenz: PolyForm Noncommercial License 1.0.0 — kostenlos für nicht-kommerzielle Nutzung, Selbst-Hosting erlaubt.
| Funktion | Details |
|---|---|
| Urlaubsanträge | Ganz- und halbtägig, Turbo Frame Live-Vorschau, Saldoschutz |
| Genehmigungsworkflow | Symfony Workflow Component, 7 Übergänge, Audit-Trail |
| Teamkalender | FullCalendar.js, Abteilungsfilter, Sperrzeiträume |
| Urlaubsansprüche | Regulär + Resturlaub, FIFO-Verbrauch, Jahresübergang |
| Feiertagsmotor | Alle 16 Bundesländer, Osterberechnung, Unternehmensüberschreibungen |
| Benachrichtigungen | In-App + E-Mail, Slack, Microsoft Teams |
| Auth-Adapter | Lokal + 2FA (TOTP), Google Workspace, Microsoft Entra ID, LDAP/AD |
| Berichte & Exporte | Statistik-Dashboard, CSV, PDF, iCal-Abonnement-Feeds |
| DSGVO-Lifecycle | Aufbewahrungsfristen, Anonymisierung, Mitarbeiter-Austrittsworkflow |
| REST-API | Bearer-Token-Authentifizierung, OpenAPI/Swagger-Dokumentation |
| Komponente | Version |
|---|---|
| Docker | 24+ |
| Docker Compose | v2.20+ |
| MariaDB | 11.4 (im Docker-Image enthalten) |
| PHP | 8.4 (im Docker-Image enthalten) |
LeaveFlow wird als Docker-first-Anwendung geliefert. Keine lokale PHP- oder MariaDB-Installation erforderlich.
git clone https://github.com/markus-michalski/leaveflow.git
cd leaveflow
cp .env .env.local
Bearbeite .env.local und setze mindestens:
# Datenbankpasswort (ändern!)
DATABASE_URL="mysql://app:DEIN_PASSWORT@database:3306/app?serverVersion=11.4.2-MariaDB&charset=utf8mb4"
# E-Mail-Versand
MAILER_DSN="smtp://dein-smtp-server:587"
# Anwendungs-URL (wird in E-Mails und iCal-Links verwendet)
APP_URL="https://leaveflow.deine-domain.de"
docker compose up -d
Die Anwendung startet standardmäßig auf Port 80. Setze SERVER_NAME=:8080 in .env.local, um den Port zu ändern.
docker compose exec -u app app php bin/console doctrine:migrations:migrate --no-interaction
Öffne http://localhost (oder deine konfigurierte Domain) im Browser. Der Einrichtungsassistent erscheint automatisch, wenn noch kein Unternehmen existiert. Er führt eine Vorflug-Prüfung durch (PHP-Version, Erweiterungen, Datenbank, Migrationen, beschreibbare Verzeichnisse) und leitet durch die Erstellung des ersten Unternehmens und Admin-Kontos.
Sobald der Assistent abgeschlossen ist, leitet die App auf die Anmeldeseite weiter. Der Assistent ist einmalig — er kann nach Anlage eines Unternehmensdatensatzes nicht erneut aufgerufen werden.
LeaveFlow hat drei Rollen. Jede Rolle hat ihren eigenen Navigationsbereich:
| Rolle | Pfad | Aufgaben |
|---|---|---|
ROLE_ADMIN |
/admin/... |
Vollständige Konfiguration: Benutzer, Abteilungen, Abwesenheitstypen, Ansprüche, Feiertage, Authentifizierung, Statistiken, API-Token |
ROLE_MANAGER |
/manager/... |
Urlaubsanträge genehmigen/ablehnen, Teamkalender und Sperrzeiträume verwalten |
ROLE_EMPLOYEE |
/my/... |
Urlaubsanträge stellen, Saldo einsehen, Profil und Abonnements verwalten |
Ein Admin kann auch als Manager agieren. Jeder Benutzer mit einem Mitarbeiterdatensatz kann Urlaubsanträge stellen.
# Alle Container starten (App, Datenbank, Mailer, OpenLDAP)
docker compose up -d
# Migrationen ausführen
docker compose exec -u app app php bin/console doctrine:migrations:migrate --no-interaction
# Dev-Fixtures laden (Demo-Unternehmen + Testkonten)
make fixtures
# Tests ausführen
make test
# Statische Analyse
make stan
Dev-Testkonten (nach make fixtures):
| Passwort | Rolle | |
|---|---|---|
admin@leaveflow.test |
leaveflow-dev |
Admin |
manager@leaveflow.test |
leaveflow-dev |
Manager |
employee@leaveflow.test |
leaveflow-dev |
Mitarbeiter |
Mailpit (E-Mail-Catcher) ist unter http://localhost:8025 erreichbar.
LeaveFlow ist unter der PolyForm Noncommercial License 1.0.0 lizenziert. Kommerzielle Nutzung erfordert eine separate Vereinbarung.
Beiträge erfordern die Unterzeichnung des Contributor License Agreement. Siehe CONTRIBUTING.md für den Entwicklungsworkflow.
Issues und Feature-Requests: GitHub Issues