No description
|
|
||
|---|---|---|
| .forgejo/workflows | ||
| backend | ||
| frontend | ||
| nginx | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||
| README.md | ||
HR System — Personalverwaltung
Einfache, selbst-gehostete HR-Software für kleine und mittlere Unternehmen. Inspiriert von timeoff.management.
Features
- Mitarbeiterverwaltung — Profile, Stammdaten, Vertragsdetails, Avatar
- Zeiterfassung — Kommen/Gehen, Pausen, Genehmigungsworkflow
- Abwesenheitsverwaltung — Urlaub, Krank, Homeoffice, Sonderurlaub u.v.m.
- Kalenderansicht — Alle Abwesenheiten auf einen Blick
- Notizen & Dateien — Pro Mitarbeiter, mit Sichtbarkeitssteuerung (nur HR oder auch Mitarbeiter)
- Rollen — Admin / HR (voller Zugriff) und Mitarbeiter (eigene Daten)
- Mobile-first — Responsive Design, funktioniert auf jedem Gerät
- Docker-Deployment — Läuft mit einem einzigen Befehl
Schnellstart
1. Repository klonen
git clone https://forgejo.thiel.tools/thiel/haer.git
cd haer
2. Konfiguration anlegen
cp .env.example .env
Wichtig: .env anpassen — mindestens JWT_SECRET auf einen langen Zufallsstring setzen:
HOST_PORT=8742
JWT_SECRET=mein-sehr-langes-zufaelliges-geheimnis-abc123xyz
ADMIN_EMAIL=admin@meinefirma.de
ADMIN_PASSWORD=sicheresPasswort!
3. Starten
docker compose up -d --build
Die App ist dann erreichbar unter: http://localhost:8742
Standard-Login:
- E-Mail:
admin@company.com(oder was in.envgesetzt) - Passwort:
admin123(oder was in.envgesetzt)
⚠️ Passwort nach dem ersten Login sofort ändern!
Architektur
nginx (Port 8742)
├── /api/* → backend (Node.js + Express, Port 3001)
├── /uploads/* → backend (statische Dateien)
└── /* → frontend (React + Vite, Nginx)
Daten:
├── hr_data (Docker Volume) → SQLite-Datenbank
└── hr_uploads (Docker Volume) → Hochgeladene Dateien & Avatare
| Dienst | Technologie |
|---|---|
| Frontend | React 18, Vite, Tailwind |
| Backend | Node.js, Express |
| Datenbank | SQLite (via better-sqlite3) |
| Auth | JWT (7 Tage gültig) |
| Proxy | Nginx |
Rollen & Berechtigungen
| Funktion | Mitarbeiter | HR / Admin |
|---|---|---|
| Eigenes Profil sehen & bearbeiten | ✅ | ✅ |
| Eigene Zeiten erfassen | ✅ | ✅ |
| Abwesenheit beantragen | ✅ | ✅ |
| Andere Mitarbeiter sehen | ❌ | ✅ |
| Anträge genehmigen/ablehnen | ❌ | ✅ |
| Notizen & Dateien anlegen | ❌ | ✅ |
| Login für Mitarbeiter erstellen | ❌ | ✅ |
| HR-interne Notizen sehen | ❌ | ✅ |
Notizen & Dateien — Sichtbarkeit
Beim Anlegen von Notizen und Dateien kann HR wählen:
- „Nur HR" — nur HR-Mitarbeiter und Admins sehen den Eintrag
- „Mitarbeiter kann sehen" — der betroffene Mitarbeiter sieht ihn in seinem Profil
Produktionsbetrieb
Hinter einem Reverse Proxy (empfohlen)
Wenn die App hinter Caddy, Traefik oder einem anderen Proxy läuft, HOST_PORT auf einen internen Port setzen und SSL am äußeren Proxy terminieren.
Beispiel Caddy:
meinefirma.de {
reverse_proxy localhost:8742
}
Port ändern
HOST_PORT=9000 # in .env anpassen
Backup
Die Daten liegen in Docker-Volumes. Backup:
# Datenbank
docker run --rm -v hr-system_hr_data:/data -v $(pwd):/backup alpine \
tar czf /backup/hr-backup-$(date +%Y%m%d).tar.gz /data
# Uploads
docker run --rm -v hr-system_hr_uploads:/data -v $(pwd):/backup alpine \
tar czf /backup/hr-uploads-$(date +%Y%m%d).tar.gz /data
Update
git pull
docker compose up -d --build
Lokale Entwicklung
Backend
cd backend
npm install
cp ../.env.example .env
# DB_PATH und UPLOAD_PATH auf lokale Pfade setzen
node src/index.js
Frontend
cd frontend
npm install
npm run dev
# läuft auf http://localhost:5173
# API-Proxy auf http://localhost:3001 (vite.config.js)
Lizenz
MIT — frei verwendbar und modifizierbar.